]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/md.texi
configure.ac: Use AM_MAINTAINER_MODE.
[thirdparty/gcc.git] / gcc / doc / md.texi
CommitLineData
b5e01d4b 1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1996, 1998, 1999, 2000, 2001,
66647d44
JJ
2@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3@c Free Software Foundation, Inc.
03dda8e3
RK
4@c This is part of the GCC manual.
5@c For copying conditions, see the file gcc.texi.
6
7@ifset INTERNALS
8@node Machine Desc
9@chapter Machine Descriptions
10@cindex machine descriptions
11
12A machine description has two parts: a file of instruction patterns
13(@file{.md} file) and a C header file of macro definitions.
14
15The @file{.md} file for a target machine contains a pattern for each
16instruction that the target machine supports (or at least each instruction
17that is worth telling the compiler about). It may also contain comments.
18A semicolon causes the rest of the line to be a comment, unless the semicolon
19is inside a quoted string.
20
21See the next chapter for information on the C header file.
22
23@menu
55e4756f 24* Overview:: How the machine description is used.
03dda8e3
RK
25* Patterns:: How to write instruction patterns.
26* Example:: An explained example of a @code{define_insn} pattern.
27* RTL Template:: The RTL template defines what insns match a pattern.
28* Output Template:: The output template says how to make assembler code
6ccde948 29 from such an insn.
03dda8e3 30* Output Statement:: For more generality, write C code to output
6ccde948 31 the assembler code.
e543e219 32* Predicates:: Controlling what kinds of operands can be used
6ccde948 33 for an insn.
e543e219 34* Constraints:: Fine-tuning operand selection.
03dda8e3
RK
35* Standard Names:: Names mark patterns to use for code generation.
36* Pattern Ordering:: When the order of patterns makes a difference.
37* Dependent Patterns:: Having one pattern may make you need another.
38* Jump Patterns:: Special considerations for patterns for jump insns.
6e4fcc95 39* Looping Patterns:: How to define patterns for special looping insns.
03dda8e3 40* Insn Canonicalizations::Canonicalization of Instructions
03dda8e3 41* Expander Definitions::Generating a sequence of several RTL insns
6ccde948 42 for a standard operation.
f3a3d0d3 43* Insn Splitting:: Splitting Instructions into Multiple Instructions.
6ccde948 44* Including Patterns:: Including Patterns in Machine Descriptions.
f3a3d0d3 45* Peephole Definitions::Defining machine-specific peephole optimizations.
03dda8e3 46* Insn Attributes:: Specifying the value of attributes for generated insns.
3262c1f5 47* Conditional Execution::Generating @code{define_insn} patterns for
6ccde948 48 predication.
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
ZW
667
668@node Predicates
669@section Predicates
670@cindex predicates
671@cindex operand predicates
672@cindex operator predicates
673
674A predicate determines whether a @code{match_operand} or
675@code{match_operator} expression matches, and therefore whether the
676surrounding instruction pattern will be used for that combination of
677operands. GCC has a number of machine-independent predicates, and you
678can define machine-specific predicates as needed. By convention,
679predicates used with @code{match_operand} have names that end in
680@samp{_operand}, and those used with @code{match_operator} have names
681that end in @samp{_operator}.
682
683All predicates are Boolean functions (in the mathematical sense) of
684two arguments: the RTL expression that is being considered at that
685position in the instruction pattern, and the machine mode that the
686@code{match_operand} or @code{match_operator} specifies. In this
687section, the first argument is called @var{op} and the second argument
688@var{mode}. Predicates can be called from C as ordinary two-argument
689functions; this can be useful in output templates or other
690machine-specific code.
691
692Operand predicates can allow operands that are not actually acceptable
693to the hardware, as long as the constraints give reload the ability to
694fix them up (@pxref{Constraints}). However, GCC will usually generate
695better code if the predicates specify the requirements of the machine
696instructions as closely as possible. Reload cannot fix up operands
697that must be constants (``immediate operands''); you must use a
698predicate that allows only constants, or else enforce the requirement
699in the extra condition.
700
701@cindex predicates and machine modes
702@cindex normal predicates
703@cindex special predicates
704Most predicates handle their @var{mode} argument in a uniform manner.
705If @var{mode} is @code{VOIDmode} (unspecified), then @var{op} can have
706any mode. If @var{mode} is anything else, then @var{op} must have the
707same mode, unless @var{op} is a @code{CONST_INT} or integer
708@code{CONST_DOUBLE}. These RTL expressions always have
709@code{VOIDmode}, so it would be counterproductive to check that their
710mode matches. Instead, predicates that accept @code{CONST_INT} and/or
711integer @code{CONST_DOUBLE} check that the value stored in the
712constant will fit in the requested mode.
713
714Predicates with this behavior are called @dfn{normal}.
715@command{genrecog} can optimize the instruction recognizer based on
716knowledge of how normal predicates treat modes. It can also diagnose
717certain kinds of common errors in the use of normal predicates; for
718instance, it is almost always an error to use a normal predicate
719without specifying a mode.
720
721Predicates that do something different with their @var{mode} argument
722are called @dfn{special}. The generic predicates
723@code{address_operand} and @code{pmode_register_operand} are special
724predicates. @command{genrecog} does not do any optimizations or
725diagnosis when special predicates are used.
726
727@menu
728* Machine-Independent Predicates:: Predicates available to all back ends.
729* Defining Predicates:: How to write machine-specific predicate
730 functions.
731@end menu
732
733@node Machine-Independent Predicates
734@subsection Machine-Independent Predicates
735@cindex machine-independent predicates
736@cindex generic predicates
737
738These are the generic predicates available to all back ends. They are
739defined in @file{recog.c}. The first category of predicates allow
740only constant, or @dfn{immediate}, operands.
741
742@defun immediate_operand
743This predicate allows any sort of constant that fits in @var{mode}.
744It is an appropriate choice for instructions that take operands that
745must be constant.
746@end defun
747
748@defun const_int_operand
749This predicate allows any @code{CONST_INT} expression that fits in
750@var{mode}. It is an appropriate choice for an immediate operand that
751does not allow a symbol or label.
752@end defun
753
754@defun const_double_operand
755This predicate accepts any @code{CONST_DOUBLE} expression that has
756exactly @var{mode}. If @var{mode} is @code{VOIDmode}, it will also
757accept @code{CONST_INT}. It is intended for immediate floating point
758constants.
759@end defun
760
761@noindent
762The second category of predicates allow only some kind of machine
763register.
764
765@defun register_operand
766This predicate allows any @code{REG} or @code{SUBREG} expression that
767is valid for @var{mode}. It is often suitable for arithmetic
768instruction operands on a RISC machine.
769@end defun
770
771@defun pmode_register_operand
772This is a slight variant on @code{register_operand} which works around
773a limitation in the machine-description reader.
774
cd1a8088 775@smallexample
e543e219 776(match_operand @var{n} "pmode_register_operand" @var{constraint})
cd1a8088 777@end smallexample
e543e219
ZW
778
779@noindent
780means exactly what
781
cd1a8088 782@smallexample
e543e219 783(match_operand:P @var{n} "register_operand" @var{constraint})
cd1a8088 784@end smallexample
e543e219
ZW
785
786@noindent
787would mean, if the machine-description reader accepted @samp{:P}
788mode suffixes. Unfortunately, it cannot, because @code{Pmode} is an
789alias for some other mode, and might vary with machine-specific
8a36672b 790options. @xref{Misc}.
e543e219
ZW
791@end defun
792
793@defun scratch_operand
794This predicate allows hard registers and @code{SCRATCH} expressions,
795but not pseudo-registers. It is used internally by @code{match_scratch};
796it should not be used directly.
797@end defun
798
799@noindent
800The third category of predicates allow only some kind of memory reference.
801
802@defun memory_operand
803This predicate allows any valid reference to a quantity of mode
804@var{mode} in memory, as determined by the weak form of
805@code{GO_IF_LEGITIMATE_ADDRESS} (@pxref{Addressing Modes}).
806@end defun
807
808@defun address_operand
809This predicate is a little unusual; it allows any operand that is a
810valid expression for the @emph{address} of a quantity of mode
811@var{mode}, again determined by the weak form of
812@code{GO_IF_LEGITIMATE_ADDRESS}. To first order, if
813@samp{@w{(mem:@var{mode} (@var{exp}))}} is acceptable to
814@code{memory_operand}, then @var{exp} is acceptable to
815@code{address_operand}. Note that @var{exp} does not necessarily have
816the mode @var{mode}.
817@end defun
818
819@defun indirect_operand
820This is a stricter form of @code{memory_operand} which allows only
821memory references with a @code{general_operand} as the address
822expression. New uses of this predicate are discouraged, because
823@code{general_operand} is very permissive, so it's hard to tell what
824an @code{indirect_operand} does or does not allow. If a target has
825different requirements for memory operands for different instructions,
826it is better to define target-specific predicates which enforce the
827hardware's requirements explicitly.
828@end defun
829
830@defun push_operand
831This predicate allows a memory reference suitable for pushing a value
832onto the stack. This will be a @code{MEM} which refers to
833@code{stack_pointer_rtx}, with a side-effect in its address expression
834(@pxref{Incdec}); which one is determined by the
835@code{STACK_PUSH_CODE} macro (@pxref{Frame Layout}).
836@end defun
837
838@defun pop_operand
839This predicate allows a memory reference suitable for popping a value
840off the stack. Again, this will be a @code{MEM} referring to
841@code{stack_pointer_rtx}, with a side-effect in its address
842expression. However, this time @code{STACK_POP_CODE} is expected.
843@end defun
844
845@noindent
846The fourth category of predicates allow some combination of the above
847operands.
848
849@defun nonmemory_operand
850This predicate allows any immediate or register operand valid for @var{mode}.
851@end defun
852
853@defun nonimmediate_operand
854This predicate allows any register or memory operand valid for @var{mode}.
855@end defun
856
857@defun general_operand
858This predicate allows any immediate, register, or memory operand
859valid for @var{mode}.
860@end defun
861
862@noindent
c6963675 863Finally, there are two generic operator predicates.
e543e219
ZW
864
865@defun comparison_operator
866This predicate matches any expression which performs an arithmetic
867comparison in @var{mode}; that is, @code{COMPARISON_P} is true for the
868expression code.
869@end defun
870
c6963675
PB
871@defun ordered_comparison_operator
872This predicate matches any expression which performs an arithmetic
873comparison in @var{mode} and whose expression code is valid for integer
874modes; that is, the expression code will be one of @code{eq}, @code{ne},
875@code{lt}, @code{ltu}, @code{le}, @code{leu}, @code{gt}, @code{gtu},
876@code{ge}, @code{geu}.
877@end defun
878
e543e219
ZW
879@node Defining Predicates
880@subsection Defining Machine-Specific Predicates
881@cindex defining predicates
882@findex define_predicate
883@findex define_special_predicate
884
885Many machines have requirements for their operands that cannot be
886expressed precisely using the generic predicates. You can define
887additional predicates using @code{define_predicate} and
888@code{define_special_predicate} expressions. These expressions have
889three operands:
890
891@itemize @bullet
892@item
893The name of the predicate, as it will be referred to in
894@code{match_operand} or @code{match_operator} expressions.
895
896@item
897An RTL expression which evaluates to true if the predicate allows the
898operand @var{op}, false if it does not. This expression can only use
899the following RTL codes:
900
901@table @code
902@item MATCH_OPERAND
903When written inside a predicate expression, a @code{MATCH_OPERAND}
904expression evaluates to true if the predicate it names would allow
905@var{op}. The operand number and constraint are ignored. Due to
906limitations in @command{genrecog}, you can only refer to generic
907predicates and predicates that have already been defined.
908
909@item MATCH_CODE
6e7a4706
ZW
910This expression evaluates to true if @var{op} or a specified
911subexpression of @var{op} has one of a given list of RTX codes.
912
913The first operand of this expression is a string constant containing a
914comma-separated list of RTX code names (in lower case). These are the
915codes for which the @code{MATCH_CODE} will be true.
916
917The second operand is a string constant which indicates what
918subexpression of @var{op} to examine. If it is absent or the empty
919string, @var{op} itself is examined. Otherwise, the string constant
920must be a sequence of digits and/or lowercase letters. Each character
921indicates a subexpression to extract from the current expression; for
922the first character this is @var{op}, for the second and subsequent
923characters it is the result of the previous character. A digit
924@var{n} extracts @samp{@w{XEXP (@var{e}, @var{n})}}; a letter @var{l}
925extracts @samp{@w{XVECEXP (@var{e}, 0, @var{n})}} where @var{n} is the
926alphabetic ordinal of @var{l} (0 for `a', 1 for 'b', and so on). The
927@code{MATCH_CODE} then examines the RTX code of the subexpression
928extracted by the complete string. It is not possible to extract
929components of an @code{rtvec} that is not at position 0 within its RTX
930object.
e543e219
ZW
931
932@item MATCH_TEST
933This expression has one operand, a string constant containing a C
934expression. The predicate's arguments, @var{op} and @var{mode}, are
935available with those names in the C expression. The @code{MATCH_TEST}
936evaluates to true if the C expression evaluates to a nonzero value.
937@code{MATCH_TEST} expressions must not have side effects.
938
939@item AND
940@itemx IOR
941@itemx NOT
942@itemx IF_THEN_ELSE
943The basic @samp{MATCH_} expressions can be combined using these
944logical operators, which have the semantics of the C operators
6e7a4706
ZW
945@samp{&&}, @samp{||}, @samp{!}, and @samp{@w{? :}} respectively. As
946in Common Lisp, you may give an @code{AND} or @code{IOR} expression an
947arbitrary number of arguments; this has exactly the same effect as
948writing a chain of two-argument @code{AND} or @code{IOR} expressions.
e543e219
ZW
949@end table
950
951@item
f0eb93a8 952An optional block of C code, which should execute
e543e219
ZW
953@samp{@w{return true}} if the predicate is found to match and
954@samp{@w{return false}} if it does not. It must not have any side
955effects. The predicate arguments, @var{op} and @var{mode}, are
956available with those names.
957
958If a code block is present in a predicate definition, then the RTL
959expression must evaluate to true @emph{and} the code block must
960execute @samp{@w{return true}} for the predicate to allow the operand.
961The RTL expression is evaluated first; do not re-check anything in the
962code block that was checked in the RTL expression.
963@end itemize
964
965The program @command{genrecog} scans @code{define_predicate} and
966@code{define_special_predicate} expressions to determine which RTX
967codes are possibly allowed. You should always make this explicit in
968the RTL predicate expression, using @code{MATCH_OPERAND} and
969@code{MATCH_CODE}.
970
971Here is an example of a simple predicate definition, from the IA64
972machine description:
973
974@smallexample
975@group
976;; @r{True if @var{op} is a @code{SYMBOL_REF} which refers to the sdata section.}
977(define_predicate "small_addr_symbolic_operand"
978 (and (match_code "symbol_ref")
979 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
980@end group
981@end smallexample
982
983@noindent
984And here is another, showing the use of the C block.
985
986@smallexample
987@group
988;; @r{True if @var{op} is a register operand that is (or could be) a GR reg.}
989(define_predicate "gr_register_operand"
990 (match_operand 0 "register_operand")
991@{
992 unsigned int regno;
993 if (GET_CODE (op) == SUBREG)
994 op = SUBREG_REG (op);
995
996 regno = REGNO (op);
997 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
998@})
999@end group
1000@end smallexample
1001
1002Predicates written with @code{define_predicate} automatically include
1003a test that @var{mode} is @code{VOIDmode}, or @var{op} has the same
1004mode as @var{mode}, or @var{op} is a @code{CONST_INT} or
1005@code{CONST_DOUBLE}. They do @emph{not} check specifically for
1006integer @code{CONST_DOUBLE}, nor do they test that the value of either
1007kind of constant fits in the requested mode. This is because
1008target-specific predicates that take constants usually have to do more
1009stringent value checks anyway. If you need the exact same treatment
1010of @code{CONST_INT} or @code{CONST_DOUBLE} that the generic predicates
1011provide, use a @code{MATCH_OPERAND} subexpression to call
1012@code{const_int_operand}, @code{const_double_operand}, or
1013@code{immediate_operand}.
1014
1015Predicates written with @code{define_special_predicate} do not get any
1016automatic mode checks, and are treated as having special mode handling
1017by @command{genrecog}.
1018
1019The program @command{genpreds} is responsible for generating code to
1020test predicates. It also writes a header file containing function
1021declarations for all machine-specific predicates. It is not necessary
1022to declare these predicates in @file{@var{cpu}-protos.h}.
03dda8e3
RK
1023@end ifset
1024
1025@c Most of this node appears by itself (in a different place) even
b11cc610
JM
1026@c when the INTERNALS flag is clear. Passages that require the internals
1027@c manual's context are conditionalized to appear only in the internals manual.
03dda8e3
RK
1028@ifset INTERNALS
1029@node Constraints
1030@section Operand Constraints
1031@cindex operand constraints
1032@cindex constraints
1033
e543e219
ZW
1034Each @code{match_operand} in an instruction pattern can specify
1035constraints for the operands allowed. The constraints allow you to
1036fine-tune matching within the set of operands allowed by the
1037predicate.
1038
03dda8e3
RK
1039@end ifset
1040@ifclear INTERNALS
1041@node Constraints
1042@section Constraints for @code{asm} Operands
1043@cindex operand constraints, @code{asm}
1044@cindex constraints, @code{asm}
1045@cindex @code{asm} constraints
1046
1047Here are specific details on what constraint letters you can use with
1048@code{asm} operands.
1049@end ifclear
1050Constraints can say whether
1051an operand may be in a register, and which kinds of register; whether the
1052operand can be a memory reference, and which kinds of address; whether the
1053operand may be an immediate constant, and which possible values it may
1054have. Constraints can also require two operands to match.
1055
1056@ifset INTERNALS
1057@menu
1058* Simple Constraints:: Basic use of constraints.
1059* Multi-Alternative:: When an insn has two alternative constraint-patterns.
1060* Class Preferences:: Constraints guide which hard register to put things in.
1061* Modifiers:: More precise control over effects of constraints.
7ac28727 1062* Disable Insn Alternatives:: Disable insn alternatives using the @code{enabled} attribute.
03dda8e3 1063* Machine Constraints:: Existing constraints for some particular machines.
f38840db
ZW
1064* Define Constraints:: How to define machine-specific constraints.
1065* C Constraint Interface:: How to test constraints from C code.
03dda8e3
RK
1066@end menu
1067@end ifset
1068
1069@ifclear INTERNALS
1070@menu
1071* Simple Constraints:: Basic use of constraints.
1072* Multi-Alternative:: When an insn has two alternative constraint-patterns.
1073* Modifiers:: More precise control over effects of constraints.
1074* Machine Constraints:: Special constraints for some particular machines.
1075@end menu
1076@end ifclear
1077
1078@node Simple Constraints
1079@subsection Simple Constraints
1080@cindex simple constraints
1081
1082The simplest kind of constraint is a string full of letters, each of
1083which describes one kind of operand that is permitted. Here are
1084the letters that are allowed:
1085
1086@table @asis
88a56c2e
HPN
1087@item whitespace
1088Whitespace characters are ignored and can be inserted at any position
1089except the first. This enables each alternative for different operands to
1090be visually aligned in the machine description even if they have different
1091number of constraints and modifiers.
1092
03dda8e3
RK
1093@cindex @samp{m} in constraint
1094@cindex memory references in constraints
1095@item @samp{m}
1096A memory operand is allowed, with any kind of address that the machine
1097supports in general.
a4edaf83
AK
1098Note that the letter used for the general memory constraint can be
1099re-defined by a back end using the @code{TARGET_MEM_CONSTRAINT} macro.
03dda8e3
RK
1100
1101@cindex offsettable address
1102@cindex @samp{o} in constraint
1103@item @samp{o}
1104A memory operand is allowed, but only if the address is
1105@dfn{offsettable}. This means that adding a small integer (actually,
1106the width in bytes of the operand, as determined by its machine mode)
1107may be added to the address and the result is also a valid memory
1108address.
1109
1110@cindex autoincrement/decrement addressing
1111For example, an address which is constant is offsettable; so is an
1112address that is the sum of a register and a constant (as long as a
1113slightly larger constant is also within the range of address-offsets
1114supported by the machine); but an autoincrement or autodecrement
1115address is not offsettable. More complicated indirect/indexed
1116addresses may or may not be offsettable depending on the other
1117addressing modes that the machine supports.
1118
1119Note that in an output operand which can be matched by another
1120operand, the constraint letter @samp{o} is valid only when accompanied
1121by both @samp{<} (if the target machine has predecrement addressing)
1122and @samp{>} (if the target machine has preincrement addressing).
1123
1124@cindex @samp{V} in constraint
1125@item @samp{V}
1126A memory operand that is not offsettable. In other words, anything that
1127would fit the @samp{m} constraint but not the @samp{o} constraint.
1128
1129@cindex @samp{<} in constraint
1130@item @samp{<}
1131A memory operand with autodecrement addressing (either predecrement or
1132postdecrement) is allowed.
1133
1134@cindex @samp{>} in constraint
1135@item @samp{>}
1136A memory operand with autoincrement addressing (either preincrement or
1137postincrement) is allowed.
1138
1139@cindex @samp{r} in constraint
1140@cindex registers in constraints
1141@item @samp{r}
1142A register operand is allowed provided that it is in a general
1143register.
1144
03dda8e3
RK
1145@cindex constants in constraints
1146@cindex @samp{i} in constraint
1147@item @samp{i}
1148An immediate integer operand (one with constant value) is allowed.
1149This includes symbolic constants whose values will be known only at
8ac658b6 1150assembly time or later.
03dda8e3
RK
1151
1152@cindex @samp{n} in constraint
1153@item @samp{n}
1154An immediate integer operand with a known numeric value is allowed.
1155Many systems cannot support assembly-time constants for operands less
1156than a word wide. Constraints for these operands should use @samp{n}
1157rather than @samp{i}.
1158
1159@cindex @samp{I} in constraint
1160@item @samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}
1161Other letters in the range @samp{I} through @samp{P} may be defined in
1162a machine-dependent fashion to permit immediate integer operands with
1163explicit integer values in specified ranges. For example, on the
116468000, @samp{I} is defined to stand for the range of values 1 to 8.
1165This is the range permitted as a shift count in the shift
1166instructions.
1167
1168@cindex @samp{E} in constraint
1169@item @samp{E}
1170An immediate floating operand (expression code @code{const_double}) is
1171allowed, but only if the target floating point format is the same as
1172that of the host machine (on which the compiler is running).
1173
1174@cindex @samp{F} in constraint
1175@item @samp{F}
bf7cd754
R
1176An immediate floating operand (expression code @code{const_double} or
1177@code{const_vector}) is allowed.
03dda8e3
RK
1178
1179@cindex @samp{G} in constraint
1180@cindex @samp{H} in constraint
1181@item @samp{G}, @samp{H}
1182@samp{G} and @samp{H} may be defined in a machine-dependent fashion to
1183permit immediate floating operands in particular ranges of values.
1184
1185@cindex @samp{s} in constraint
1186@item @samp{s}
1187An immediate integer operand whose value is not an explicit integer is
1188allowed.
1189
1190This might appear strange; if an insn allows a constant operand with a
1191value not known at compile time, it certainly must allow any known
1192value. So why use @samp{s} instead of @samp{i}? Sometimes it allows
1193better code to be generated.
1194
1195For example, on the 68000 in a fullword instruction it is possible to
630d3d5a 1196use an immediate operand; but if the immediate value is between @minus{}128
03dda8e3
RK
1197and 127, better code results from loading the value into a register and
1198using the register. This is because the load into the register can be
1199done with a @samp{moveq} instruction. We arrange for this to happen
1200by defining the letter @samp{K} to mean ``any integer outside the
630d3d5a 1201range @minus{}128 to 127'', and then specifying @samp{Ks} in the operand
03dda8e3
RK
1202constraints.
1203
1204@cindex @samp{g} in constraint
1205@item @samp{g}
1206Any register, memory or immediate integer operand is allowed, except for
1207registers that are not general registers.
1208
1209@cindex @samp{X} in constraint
1210@item @samp{X}
1211@ifset INTERNALS
1212Any operand whatsoever is allowed, even if it does not satisfy
1213@code{general_operand}. This is normally used in the constraint of
1214a @code{match_scratch} when certain alternatives will not actually
1215require a scratch register.
1216@end ifset
1217@ifclear INTERNALS
1218Any operand whatsoever is allowed.
1219@end ifclear
1220
1221@cindex @samp{0} in constraint
1222@cindex digits in constraint
1223@item @samp{0}, @samp{1}, @samp{2}, @dots{} @samp{9}
1224An operand that matches the specified operand number is allowed. If a
1225digit is used together with letters within the same alternative, the
1226digit should come last.
1227
84b72302 1228This number is allowed to be more than a single digit. If multiple
c0478a66 1229digits are encountered consecutively, they are interpreted as a single
84b72302
RH
1230decimal integer. There is scant chance for ambiguity, since to-date
1231it has never been desirable that @samp{10} be interpreted as matching
1232either operand 1 @emph{or} operand 0. Should this be desired, one
1233can use multiple alternatives instead.
1234
03dda8e3
RK
1235@cindex matching constraint
1236@cindex constraint, matching
1237This is called a @dfn{matching constraint} and what it really means is
1238that the assembler has only a single operand that fills two roles
1239@ifset INTERNALS
1240considered separate in the RTL insn. For example, an add insn has two
1241input operands and one output operand in the RTL, but on most CISC
1242@end ifset
1243@ifclear INTERNALS
1244which @code{asm} distinguishes. For example, an add instruction uses
1245two input operands and an output operand, but on most CISC
1246@end ifclear
1247machines an add instruction really has only two operands, one of them an
1248input-output operand:
1249
1250@smallexample
1251addl #35,r12
1252@end smallexample
1253
1254Matching constraints are used in these circumstances.
1255More precisely, the two operands that match must include one input-only
1256operand and one output-only operand. Moreover, the digit must be a
1257smaller number than the number of the operand that uses it in the
1258constraint.
1259
1260@ifset INTERNALS
1261For operands to match in a particular case usually means that they
1262are identical-looking RTL expressions. But in a few special cases
1263specific kinds of dissimilarity are allowed. For example, @code{*x}
1264as an input operand will match @code{*x++} as an output operand.
1265For proper results in such cases, the output template should always
1266use the output-operand's number when printing the operand.
1267@end ifset
1268
1269@cindex load address instruction
1270@cindex push address instruction
1271@cindex address constraints
1272@cindex @samp{p} in constraint
1273@item @samp{p}
1274An operand that is a valid memory address is allowed. This is
1275for ``load address'' and ``push address'' instructions.
1276
1277@findex address_operand
1278@samp{p} in the constraint must be accompanied by @code{address_operand}
1279as the predicate in the @code{match_operand}. This predicate interprets
1280the mode specified in the @code{match_operand} as the mode of the memory
1281reference for which the address would be valid.
1282
c2cba7a9 1283@cindex other register constraints
03dda8e3 1284@cindex extensible constraints
630d3d5a 1285@item @var{other-letters}
c2cba7a9
RH
1286Other letters can be defined in machine-dependent fashion to stand for
1287particular classes of registers or other arbitrary operand types.
1288@samp{d}, @samp{a} and @samp{f} are defined on the 68000/68020 to stand
1289for data, address and floating point registers.
03dda8e3
RK
1290@end table
1291
1292@ifset INTERNALS
1293In order to have valid assembler code, each operand must satisfy
1294its constraint. But a failure to do so does not prevent the pattern
1295from applying to an insn. Instead, it directs the compiler to modify
1296the code so that the constraint will be satisfied. Usually this is
1297done by copying an operand into a register.
1298
1299Contrast, therefore, the two instruction patterns that follow:
1300
1301@smallexample
1302(define_insn ""
1303 [(set (match_operand:SI 0 "general_operand" "=r")
1304 (plus:SI (match_dup 0)
1305 (match_operand:SI 1 "general_operand" "r")))]
1306 ""
1307 "@dots{}")
1308@end smallexample
1309
1310@noindent
1311which has two operands, one of which must appear in two places, and
1312
1313@smallexample
1314(define_insn ""
1315 [(set (match_operand:SI 0 "general_operand" "=r")
1316 (plus:SI (match_operand:SI 1 "general_operand" "0")
1317 (match_operand:SI 2 "general_operand" "r")))]
1318 ""
1319 "@dots{}")
1320@end smallexample
1321
1322@noindent
1323which has three operands, two of which are required by a constraint to be
1324identical. If we are considering an insn of the form
1325
1326@smallexample
1327(insn @var{n} @var{prev} @var{next}
1328 (set (reg:SI 3)
1329 (plus:SI (reg:SI 6) (reg:SI 109)))
1330 @dots{})
1331@end smallexample
1332
1333@noindent
1334the first pattern would not apply at all, because this insn does not
1335contain two identical subexpressions in the right place. The pattern would
d78aa55c 1336say, ``That does not look like an add instruction; try other patterns''.
03dda8e3 1337The second pattern would say, ``Yes, that's an add instruction, but there
d78aa55c 1338is something wrong with it''. It would direct the reload pass of the
03dda8e3
RK
1339compiler to generate additional insns to make the constraint true. The
1340results might look like this:
1341
1342@smallexample
1343(insn @var{n2} @var{prev} @var{n}
1344 (set (reg:SI 3) (reg:SI 6))
1345 @dots{})
1346
1347(insn @var{n} @var{n2} @var{next}
1348 (set (reg:SI 3)
1349 (plus:SI (reg:SI 3) (reg:SI 109)))
1350 @dots{})
1351@end smallexample
1352
1353It is up to you to make sure that each operand, in each pattern, has
1354constraints that can handle any RTL expression that could be present for
1355that operand. (When multiple alternatives are in use, each pattern must,
1356for each possible combination of operand expressions, have at least one
1357alternative which can handle that combination of operands.) The
1358constraints don't need to @emph{allow} any possible operand---when this is
1359the case, they do not constrain---but they must at least point the way to
1360reloading any possible operand so that it will fit.
1361
1362@itemize @bullet
1363@item
1364If the constraint accepts whatever operands the predicate permits,
1365there is no problem: reloading is never necessary for this operand.
1366
1367For example, an operand whose constraints permit everything except
1368registers is safe provided its predicate rejects registers.
1369
1370An operand whose predicate accepts only constant values is safe
1371provided its constraints include the letter @samp{i}. If any possible
1372constant value is accepted, then nothing less than @samp{i} will do;
1373if the predicate is more selective, then the constraints may also be
1374more selective.
1375
1376@item
1377Any operand expression can be reloaded by copying it into a register.
1378So if an operand's constraints allow some kind of register, it is
1379certain to be safe. It need not permit all classes of registers; the
1380compiler knows how to copy a register into another register of the
1381proper class in order to make an instruction valid.
1382
1383@cindex nonoffsettable memory reference
1384@cindex memory reference, nonoffsettable
1385@item
1386A nonoffsettable memory reference can be reloaded by copying the
1387address into a register. So if the constraint uses the letter
1388@samp{o}, all memory references are taken care of.
1389
1390@item
1391A constant operand can be reloaded by allocating space in memory to
1392hold it as preinitialized data. Then the memory reference can be used
1393in place of the constant. So if the constraint uses the letters
1394@samp{o} or @samp{m}, constant operands are not a problem.
1395
1396@item
1397If the constraint permits a constant and a pseudo register used in an insn
1398was not allocated to a hard register and is equivalent to a constant,
1399the register will be replaced with the constant. If the predicate does
1400not permit a constant and the insn is re-recognized for some reason, the
1401compiler will crash. Thus the predicate must always recognize any
1402objects allowed by the constraint.
1403@end itemize
1404
1405If the operand's predicate can recognize registers, but the constraint does
1406not permit them, it can make the compiler crash. When this operand happens
1407to be a register, the reload pass will be stymied, because it does not know
1408how to copy a register temporarily into memory.
1409
1410If the predicate accepts a unary operator, the constraint applies to the
1411operand. For example, the MIPS processor at ISA level 3 supports an
1412instruction which adds two registers in @code{SImode} to produce a
1413@code{DImode} result, but only if the registers are correctly sign
1414extended. This predicate for the input operands accepts a
1415@code{sign_extend} of an @code{SImode} register. Write the constraint
1416to indicate the type of register that is required for the operand of the
1417@code{sign_extend}.
1418@end ifset
1419
1420@node Multi-Alternative
1421@subsection Multiple Alternative Constraints
1422@cindex multiple alternative constraints
1423
1424Sometimes a single instruction has multiple alternative sets of possible
1425operands. For example, on the 68000, a logical-or instruction can combine
1426register or an immediate value into memory, or it can combine any kind of
1427operand into a register; but it cannot combine one memory location into
1428another.
1429
1430These constraints are represented as multiple alternatives. An alternative
1431can be described by a series of letters for each operand. The overall
1432constraint for an operand is made from the letters for this operand
1433from the first alternative, a comma, the letters for this operand from
1434the second alternative, a comma, and so on until the last alternative.
1435@ifset INTERNALS
1436Here is how it is done for fullword logical-or on the 68000:
1437
1438@smallexample
1439(define_insn "iorsi3"
1440 [(set (match_operand:SI 0 "general_operand" "=m,d")
1441 (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
1442 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
1443 @dots{})
1444@end smallexample
1445
1446The first alternative has @samp{m} (memory) for operand 0, @samp{0} for
1447operand 1 (meaning it must match operand 0), and @samp{dKs} for operand
14482. The second alternative has @samp{d} (data register) for operand 0,
1449@samp{0} for operand 1, and @samp{dmKs} for operand 2. The @samp{=} and
1450@samp{%} in the constraints apply to all the alternatives; their
1451meaning is explained in the next section (@pxref{Class Preferences}).
1452@end ifset
1453
1454@c FIXME Is this ? and ! stuff of use in asm()? If not, hide unless INTERNAL
1455If all the operands fit any one alternative, the instruction is valid.
1456Otherwise, for each alternative, the compiler counts how many instructions
1457must be added to copy the operands so that that alternative applies.
1458The alternative requiring the least copying is chosen. If two alternatives
1459need the same amount of copying, the one that comes first is chosen.
1460These choices can be altered with the @samp{?} and @samp{!} characters:
1461
1462@table @code
1463@cindex @samp{?} in constraint
1464@cindex question mark
1465@item ?
1466Disparage slightly the alternative that the @samp{?} appears in,
1467as a choice when no alternative applies exactly. The compiler regards
1468this alternative as one unit more costly for each @samp{?} that appears
1469in it.
1470
1471@cindex @samp{!} in constraint
1472@cindex exclamation point
1473@item !
1474Disparage severely the alternative that the @samp{!} appears in.
1475This alternative can still be used if it fits without reloading,
1476but if reloading is needed, some other alternative will be used.
1477@end table
1478
1479@ifset INTERNALS
1480When an insn pattern has multiple alternatives in its constraints, often
1481the appearance of the assembler code is determined mostly by which
1482alternative was matched. When this is so, the C code for writing the
1483assembler code can use the variable @code{which_alternative}, which is
1484the ordinal number of the alternative that was actually satisfied (0 for
1485the first, 1 for the second alternative, etc.). @xref{Output Statement}.
1486@end ifset
1487
1488@ifset INTERNALS
1489@node Class Preferences
1490@subsection Register Class Preferences
1491@cindex class preference constraints
1492@cindex register class preference constraints
1493
1494@cindex voting between constraint alternatives
1495The operand constraints have another function: they enable the compiler
1496to decide which kind of hardware register a pseudo register is best
1497allocated to. The compiler examines the constraints that apply to the
1498insns that use the pseudo register, looking for the machine-dependent
1499letters such as @samp{d} and @samp{a} that specify classes of registers.
1500The pseudo register is put in whichever class gets the most ``votes''.
1501The constraint letters @samp{g} and @samp{r} also vote: they vote in
1502favor of a general register. The machine description says which registers
1503are considered general.
1504
1505Of course, on some machines all registers are equivalent, and no register
1506classes are defined. Then none of this complexity is relevant.
1507@end ifset
1508
1509@node Modifiers
1510@subsection Constraint Modifier Characters
1511@cindex modifiers in constraints
1512@cindex constraint modifier characters
1513
1514@c prevent bad page break with this line
1515Here are constraint modifier characters.
1516
1517@table @samp
1518@cindex @samp{=} in constraint
1519@item =
1520Means that this operand is write-only for this instruction: the previous
1521value is discarded and replaced by output data.
1522
1523@cindex @samp{+} in constraint
1524@item +
1525Means that this operand is both read and written by the instruction.
1526
1527When the compiler fixes up the operands to satisfy the constraints,
1528it needs to know which operands are inputs to the instruction and
1529which are outputs from it. @samp{=} identifies an output; @samp{+}
1530identifies an operand that is both input and output; all other operands
1531are assumed to be input only.
1532
c5c76735
JL
1533If you specify @samp{=} or @samp{+} in a constraint, you put it in the
1534first character of the constraint string.
1535
03dda8e3
RK
1536@cindex @samp{&} in constraint
1537@cindex earlyclobber operand
1538@item &
1539Means (in a particular alternative) that this operand is an
1540@dfn{earlyclobber} operand, which is modified before the instruction is
1541finished using the input operands. Therefore, this operand may not lie
1542in a register that is used as an input operand or as part of any memory
1543address.
1544
1545@samp{&} applies only to the alternative in which it is written. In
1546constraints with multiple alternatives, sometimes one alternative
1547requires @samp{&} while others do not. See, for example, the
1548@samp{movdf} insn of the 68000.
1549
ebb48a4d 1550An input operand can be tied to an earlyclobber operand if its only
03dda8e3
RK
1551use as an input occurs before the early result is written. Adding
1552alternatives of this form often allows GCC to produce better code
ebb48a4d 1553when only some of the inputs can be affected by the earlyclobber.
161d7b59 1554See, for example, the @samp{mulsi3} insn of the ARM@.
03dda8e3
RK
1555
1556@samp{&} does not obviate the need to write @samp{=}.
1557
1558@cindex @samp{%} in constraint
1559@item %
1560Declares the instruction to be commutative for this operand and the
1561following operand. This means that the compiler may interchange the
1562two operands if that is the cheapest way to make all operands fit the
1563constraints.
1564@ifset INTERNALS
1565This is often used in patterns for addition instructions
1566that really have only two operands: the result must go in one of the
1567arguments. Here for example, is how the 68000 halfword-add
1568instruction is defined:
1569
1570@smallexample
1571(define_insn "addhi3"
1572 [(set (match_operand:HI 0 "general_operand" "=m,r")
1573 (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
1574 (match_operand:HI 2 "general_operand" "di,g")))]
1575 @dots{})
1576@end smallexample
1577@end ifset
daf2f129 1578GCC can only handle one commutative pair in an asm; if you use more,
595163db
EB
1579the compiler may fail. Note that you need not use the modifier if
1580the two alternatives are strictly identical; this would only waste
be3914df
HPN
1581time in the reload pass. The modifier is not operational after
1582register allocation, so the result of @code{define_peephole2}
1583and @code{define_split}s performed after reload cannot rely on
1584@samp{%} to make the intended insn match.
03dda8e3
RK
1585
1586@cindex @samp{#} in constraint
1587@item #
1588Says that all following characters, up to the next comma, are to be
1589ignored as a constraint. They are significant only for choosing
1590register preferences.
1591
03dda8e3
RK
1592@cindex @samp{*} in constraint
1593@item *
1594Says that the following character should be ignored when choosing
1595register preferences. @samp{*} has no effect on the meaning of the
1596constraint as a constraint, and no effect on reloading.
1597
9f339dde 1598@ifset INTERNALS
03dda8e3
RK
1599Here is an example: the 68000 has an instruction to sign-extend a
1600halfword in a data register, and can also sign-extend a value by
1601copying it into an address register. While either kind of register is
1602acceptable, the constraints on an address-register destination are
1603less strict, so it is best if register allocation makes an address
1604register its goal. Therefore, @samp{*} is used so that the @samp{d}
1605constraint letter (for data register) is ignored when computing
1606register preferences.
1607
1608@smallexample
1609(define_insn "extendhisi2"
1610 [(set (match_operand:SI 0 "general_operand" "=*d,a")
1611 (sign_extend:SI
1612 (match_operand:HI 1 "general_operand" "0,g")))]
1613 @dots{})
1614@end smallexample
1615@end ifset
1616@end table
1617
1618@node Machine Constraints
1619@subsection Constraints for Particular Machines
1620@cindex machine specific constraints
1621@cindex constraints, machine specific
1622
1623Whenever possible, you should use the general-purpose constraint letters
1624in @code{asm} arguments, since they will convey meaning more readily to
1625people reading your code. Failing that, use the constraint letters
1626that usually have very similar meanings across architectures. The most
1627commonly used constraints are @samp{m} and @samp{r} (for memory and
1628general-purpose registers respectively; @pxref{Simple Constraints}), and
1629@samp{I}, usually the letter indicating the most common
1630immediate-constant format.
1631
f38840db
ZW
1632Each architecture defines additional constraints. These constraints
1633are used by the compiler itself for instruction generation, as well as
1634for @code{asm} statements; therefore, some of the constraints are not
1635particularly useful for @code{asm}. Here is a summary of some of the
1636machine-dependent constraints available on some particular machines;
1637it includes both constraints that are useful for @code{asm} and
1638constraints that aren't. The compiler source file mentioned in the
1639table heading for each architecture is the definitive reference for
1640the meanings of that architecture's constraints.
6ccde948 1641
03dda8e3 1642@table @emph
74fe790b 1643@item ARM family---@file{config/arm/arm.h}
03dda8e3
RK
1644@table @code
1645@item f
1646Floating-point register
1647
9b66ebb1
PB
1648@item w
1649VFP floating-point register
1650
03dda8e3
RK
1651@item F
1652One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0
1653or 10.0
1654
1655@item G
1656Floating-point constant that would satisfy the constraint @samp{F} if it
1657were negated
1658
1659@item I
1660Integer that is valid as an immediate operand in a data processing
1661instruction. That is, an integer in the range 0 to 255 rotated by a
1662multiple of 2
1663
1664@item J
630d3d5a 1665Integer in the range @minus{}4095 to 4095
03dda8e3
RK
1666
1667@item K
1668Integer that satisfies constraint @samp{I} when inverted (ones complement)
1669
1670@item L
1671Integer that satisfies constraint @samp{I} when negated (twos complement)
1672
1673@item M
1674Integer in the range 0 to 32
1675
1676@item Q
1677A memory reference where the exact address is in a single register
1678(`@samp{m}' is preferable for @code{asm} statements)
1679
1680@item R
1681An item in the constant pool
1682
1683@item S
1684A symbol in the text segment of the current file
03dda8e3 1685
1e1ab407 1686@item Uv
9b66ebb1
PB
1687A memory reference suitable for VFP load/store insns (reg+constant offset)
1688
fdd695fd
PB
1689@item Uy
1690A memory reference suitable for iWMMXt load/store instructions.
1691
1e1ab407 1692@item Uq
0bdcd332 1693A memory reference suitable for the ARMv4 ldrsb instruction.
db875b15 1694@end table
1e1ab407 1695
fc262682 1696@item AVR family---@file{config/avr/constraints.md}
052a4b28
DC
1697@table @code
1698@item l
1699Registers from r0 to r15
1700
1701@item a
1702Registers from r16 to r23
1703
1704@item d
1705Registers from r16 to r31
1706
1707@item w
3a69a7d5 1708Registers from r24 to r31. These registers can be used in @samp{adiw} command
052a4b28
DC
1709
1710@item e
d7d9c429 1711Pointer register (r26--r31)
052a4b28
DC
1712
1713@item b
d7d9c429 1714Base pointer register (r28--r31)
052a4b28 1715
3a69a7d5
MM
1716@item q
1717Stack pointer register (SPH:SPL)
1718
052a4b28
DC
1719@item t
1720Temporary register r0
1721
1722@item x
1723Register pair X (r27:r26)
1724
1725@item y
1726Register pair Y (r29:r28)
1727
1728@item z
1729Register pair Z (r31:r30)
1730
1731@item I
630d3d5a 1732Constant greater than @minus{}1, less than 64
052a4b28
DC
1733
1734@item J
630d3d5a 1735Constant greater than @minus{}64, less than 1
052a4b28
DC
1736
1737@item K
1738Constant integer 2
1739
1740@item L
1741Constant integer 0
1742
1743@item M
1744Constant that fits in 8 bits
1745
1746@item N
630d3d5a 1747Constant integer @minus{}1
052a4b28
DC
1748
1749@item O
3a69a7d5 1750Constant integer 8, 16, or 24
052a4b28
DC
1751
1752@item P
1753Constant integer 1
1754
1755@item G
1756A floating point constant 0.0
0e8eb4d8
EW
1757
1758@item R
8ad1dde7 1759Integer constant in the range @minus{}6 @dots{} 5.
0e8eb4d8
EW
1760
1761@item Q
1762A memory address based on Y or Z pointer with displacement.
052a4b28 1763@end table
53054e77 1764
74fe790b 1765@item CRX Architecture---@file{config/crx/crx.h}
53054e77
PW
1766@table @code
1767
1768@item b
1769Registers from r0 to r14 (registers without stack pointer)
1770
1771@item l
1772Register r16 (64-bit accumulator lo register)
1773
1774@item h
1775Register r17 (64-bit accumulator hi register)
1776
1777@item k
1778Register pair r16-r17. (64-bit accumulator lo-hi pair)
1779
1780@item I
1781Constant that fits in 3 bits
1782
1783@item J
1784Constant that fits in 4 bits
1785
1786@item K
1787Constant that fits in 5 bits
1788
1789@item L
8ad1dde7 1790Constant that is one of @minus{}1, 4, @minus{}4, 7, 8, 12, 16, 20, 32, 48
53054e77
PW
1791
1792@item G
1793Floating point constant that is legal for store immediate
1794@end table
052a4b28 1795
8119b4e4
JDA
1796@item Hewlett-Packard PA-RISC---@file{config/pa/pa.h}
1797@table @code
1798@item a
1799General register 1
1800
1801@item f
1802Floating point register
1803
1804@item q
1805Shift amount register
1806
1807@item x
1808Floating point register (deprecated)
1809
1810@item y
1811Upper floating point register (32-bit), floating point register (64-bit)
1812
1813@item Z
1814Any register
1815
1816@item I
1817Signed 11-bit integer constant
1818
1819@item J
1820Signed 14-bit integer constant
1821
1822@item K
1823Integer constant that can be deposited with a @code{zdepi} instruction
1824
1825@item L
1826Signed 5-bit integer constant
1827
1828@item M
1829Integer constant 0
1830
1831@item N
1832Integer constant that can be loaded with a @code{ldil} instruction
1833
1834@item O
1835Integer constant whose value plus one is a power of 2
1836
1837@item P
1838Integer constant that can be used for @code{and} operations in @code{depi}
1839and @code{extru} instructions
1840
1841@item S
1842Integer constant 31
1843
1844@item U
1845Integer constant 63
1846
1847@item G
1848Floating-point constant 0.0
1849
1850@item A
1851A @code{lo_sum} data-linkage-table memory operand
1852
1853@item Q
1854A memory operand that can be used as the destination operand of an
1855integer store instruction
1856
1857@item R
1858A scaled or unscaled indexed memory operand
1859
1860@item T
1861A memory operand for floating-point loads and stores
1862
1863@item W
1864A register indirect memory operand
1865@end table
1866
358da97e
HS
1867@item picoChip family---@file{picochip.h}
1868@table @code
1869@item k
1870Stack register.
1871
1872@item f
1873Pointer register. A register which can be used to access memory without
1874supplying an offset. Any other register can be used to access memory,
1875but will need a constant offset. In the case of the offset being zero,
1876it is more efficient to use a pointer register, since this reduces code
1877size.
1878
1879@item t
1880A twin register. A register which may be paired with an adjacent
1881register to create a 32-bit register.
1882
1883@item a
1884Any absolute memory address (e.g., symbolic constant, symbolic
1885constant + offset).
1886
1887@item I
18884-bit signed integer.
1889
1890@item J
18914-bit unsigned integer.
1892
1893@item K
18948-bit signed integer.
1895
1896@item M
1897Any constant whose absolute value is no greater than 4-bits.
1898
1899@item N
190010-bit signed integer
1901
1902@item O
190316-bit signed integer.
1904
1905@end table
1906
74fe790b 1907@item PowerPC and IBM RS6000---@file{config/rs6000/rs6000.h}
03dda8e3
RK
1908@table @code
1909@item b
1910Address base register
1911
799dbb0f
ME
1912@item d
1913Floating point register (containing 64-bit value)
1914
03dda8e3 1915@item f
799dbb0f 1916Floating point register (containing 32-bit value)
03dda8e3 1917
2dcfc29d 1918@item v
29e6733c
MM
1919Altivec vector register
1920
1921@item wd
1922VSX vector register to hold vector double data
1923
1924@item wf
1925VSX vector register to hold vector float data
1926
1927@item ws
1928VSX vector register to hold scalar float data
1929
1930@item wa
1931Any VSX register
2dcfc29d 1932
03dda8e3
RK
1933@item h
1934@samp{MQ}, @samp{CTR}, or @samp{LINK} register
1935
1936@item q
1937@samp{MQ} register
1938
1939@item c
1940@samp{CTR} register
1941
1942@item l
1943@samp{LINK} register
1944
1945@item x
1946@samp{CR} register (condition register) number 0
1947
1948@item y
1949@samp{CR} register (condition register)
1950
8f685459
DE
1951@item z
1952@samp{FPMEM} stack memory for FPR-GPR transfers
1953
03dda8e3 1954@item I
1e5f973d 1955Signed 16-bit constant
03dda8e3
RK
1956
1957@item J
ebb48a4d 1958Unsigned 16-bit constant shifted left 16 bits (use @samp{L} instead for
5f59ecb7 1959@code{SImode} constants)
03dda8e3
RK
1960
1961@item K
1e5f973d 1962Unsigned 16-bit constant
03dda8e3
RK
1963
1964@item L
1e5f973d 1965Signed 16-bit constant shifted left 16 bits
03dda8e3
RK
1966
1967@item M
1968Constant larger than 31
1969
1970@item N
1971Exact power of 2
1972
1973@item O
1974Zero
1975
1976@item P
1e5f973d 1977Constant whose negation is a signed 16-bit constant
03dda8e3
RK
1978
1979@item G
1980Floating point constant that can be loaded into a register with one
1981instruction per word
1982
a8a51a97
AP
1983@item H
1984Integer/Floating point constant that can be loaded into a register using
1985three instructions
1986
1d447995
RS
1987@item m
1988Memory operand. Note that on PowerPC targets, @code{m} can include
1989addresses that update the base register. It is therefore only safe
1990to use @samp{m} in an @code{asm} statement if that @code{asm} statement
1991accesses the operand exactly once. The @code{asm} statement must also
1992use @samp{%U@var{<opno>}} as a placeholder for the ``update'' flag in the
1993corresponding load or store instruction. For example:
1994
1995@smallexample
1996asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val));
1997@end smallexample
1998
1999is correct but:
2000
2001@smallexample
2002asm ("st %1,%0" : "=m" (mem) : "r" (val));
2003@end smallexample
2004
2005is not. Use @code{es} rather than @code{m} if you don't want the
2006base register to be updated.
2007
2008@item es
2009A ``stable'' memory operand; that is, one which does not include any
2010automodification of the base register. Unlike @samp{m}, this constraint
2011can be used in @code{asm} statements that might access the operand
2012several times, or that might not access it at all.
2013
03dda8e3 2014@item Q
1d447995
RS
2015Memory operand that is an offset from a register (it is usually better
2016to use @samp{m} or @samp{es} in @code{asm} statements)
03dda8e3 2017
a8a51a97 2018@item Z
1d447995
RS
2019Memory operand that is an indexed or indirect from a register (it is
2020usually better to use @samp{m} or @samp{es} in @code{asm} statements)
a8a51a97 2021
03dda8e3
RK
2022@item R
2023AIX TOC entry
2024
a8a51a97
AP
2025@item a
2026Address operand that is an indexed or indirect from a register (@samp{p} is
2027preferable for @code{asm} statements)
2028
03dda8e3 2029@item S
8f685459 2030Constant suitable as a 64-bit mask operand
03dda8e3 2031
5f59ecb7
DE
2032@item T
2033Constant suitable as a 32-bit mask operand
2034
03dda8e3
RK
2035@item U
2036System V Release 4 small data area reference
a8a51a97
AP
2037
2038@item t
2039AND masks that can be performed by two rldic@{l, r@} instructions
2040
2041@item W
2042Vector constant that does not require memory
2043
29e6733c
MM
2044@item j
2045Vector constant that is all zeros.
2046
03dda8e3
RK
2047@end table
2048
08b1e29a 2049@item Intel 386---@file{config/i386/constraints.md}
03dda8e3 2050@table @code
0c56474e 2051@item R
f38840db
ZW
2052Legacy register---the eight integer registers available on all
2053i386 processors (@code{a}, @code{b}, @code{c}, @code{d},
2054@code{si}, @code{di}, @code{bp}, @code{sp}).
03dda8e3 2055
f38840db
ZW
2056@item q
2057Any register accessible as @code{@var{r}l}. In 32-bit mode, @code{a},
2058@code{b}, @code{c}, and @code{d}; in 64-bit mode, any integer register.
03dda8e3 2059
f38840db
ZW
2060@item Q
2061Any register accessible as @code{@var{r}h}: @code{a}, @code{b},
2062@code{c}, and @code{d}.
03dda8e3 2063
f38840db
ZW
2064@ifset INTERNALS
2065@item l
2066Any register that can be used as the index in a base+index memory
2067access: that is, any general register except the stack pointer.
2068@end ifset
03dda8e3
RK
2069
2070@item a
f38840db 2071The @code{a} register.
03dda8e3
RK
2072
2073@item b
f38840db 2074The @code{b} register.
03dda8e3
RK
2075
2076@item c
f38840db 2077The @code{c} register.
f8ca7923 2078
03dda8e3 2079@item d
f38840db
ZW
2080The @code{d} register.
2081
2082@item S
2083The @code{si} register.
03dda8e3
RK
2084
2085@item D
f38840db 2086The @code{di} register.
03dda8e3 2087
f38840db
ZW
2088@item A
2089The @code{a} and @code{d} registers, as a pair (for instructions that
2090return half the result in one and half in the other).
03dda8e3 2091
f38840db
ZW
2092@item f
2093Any 80387 floating-point (stack) register.
2094
2095@item t
2096Top of 80387 floating-point stack (@code{%st(0)}).
2097
2098@item u
2099Second from top of 80387 floating-point stack (@code{%st(1)}).
994682b9
AJ
2100
2101@item y
f38840db
ZW
2102Any MMX register.
2103
2104@item x
2105Any SSE register.
2106
c5245af5
L
2107@item Yz
2108First SSE register (@code{%xmm0}).
2109
f38840db 2110@ifset INTERNALS
c5245af5
L
2111@item Y2
2112Any SSE register, when SSE2 is enabled.
2113
2114@item Yi
2115Any SSE register, when SSE2 and inter-unit moves are enabled.
2116
2117@item Ym
2118Any MMX register, when inter-unit moves are enabled.
f38840db 2119@end ifset
994682b9 2120
03dda8e3 2121@item I
f38840db 2122Integer constant in the range 0 @dots{} 31, for 32-bit shifts.
03dda8e3
RK
2123
2124@item J
f38840db 2125Integer constant in the range 0 @dots{} 63, for 64-bit shifts.
03dda8e3
RK
2126
2127@item K
f38840db 2128Signed 8-bit integer constant.
03dda8e3
RK
2129
2130@item L
f38840db 2131@code{0xFF} or @code{0xFFFF}, for andsi as a zero-extending move.
03dda8e3
RK
2132
2133@item M
f38840db 21340, 1, 2, or 3 (shifts for the @code{lea} instruction).
03dda8e3
RK
2135
2136@item N
f38840db
ZW
2137Unsigned 8-bit integer constant (for @code{in} and @code{out}
2138instructions).
03dda8e3 2139
f38840db
ZW
2140@ifset INTERNALS
2141@item O
2142Integer constant in the range 0 @dots{} 127, for 128-bit shifts.
2143@end ifset
2144
2145@item G
2146Standard 80387 floating point constant.
2147
2148@item C
2149Standard SSE floating point constant.
0c56474e
JH
2150
2151@item e
f38840db
ZW
215232-bit signed integer constant, or a symbolic reference known
2153to fit that range (for immediate operands in sign-extending x86-64
2154instructions).
2155
2156@item Z
215732-bit unsigned integer constant, or a symbolic reference known
2158to fit that range (for immediate operands in zero-extending x86-64
2159instructions).
0c56474e 2160
03dda8e3
RK
2161@end table
2162
74fe790b 2163@item Intel IA-64---@file{config/ia64/ia64.h}
7a430e3b
SC
2164@table @code
2165@item a
2166General register @code{r0} to @code{r3} for @code{addl} instruction
2167
2168@item b
2169Branch register
2170
2171@item c
2172Predicate register (@samp{c} as in ``conditional'')
2173
2174@item d
2175Application register residing in M-unit
2176
2177@item e
2178Application register residing in I-unit
2179
2180@item f
2181Floating-point register
2182
2183@item m
2184Memory operand.
2185Remember that @samp{m} allows postincrement and postdecrement which
2186require printing with @samp{%Pn} on IA-64.
2187Use @samp{S} to disallow postincrement and postdecrement.
2188
2189@item G
2190Floating-point constant 0.0 or 1.0
2191
2192@item I
219314-bit signed integer constant
2194
2195@item J
219622-bit signed integer constant
2197
2198@item K
21998-bit signed integer constant for logical instructions
2200
2201@item L
22028-bit adjusted signed integer constant for compare pseudo-ops
2203
2204@item M
22056-bit unsigned integer constant for shift counts
2206
2207@item N
22089-bit signed integer constant for load and store postincrements
2209
2210@item O
2211The constant zero
2212
2213@item P
78466c0e 22140 or @minus{}1 for @code{dep} instruction
7a430e3b
SC
2215
2216@item Q
2217Non-volatile memory for floating-point loads and stores
2218
2219@item R
2220Integer constant in the range 1 to 4 for @code{shladd} instruction
2221
2222@item S
2223Memory operand except postincrement and postdecrement
2224@end table
03dda8e3 2225
74fe790b 2226@item FRV---@file{config/frv/frv.h}
70899148
BS
2227@table @code
2228@item a
840758d3 2229Register in the class @code{ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2230
2231@item b
840758d3 2232Register in the class @code{EVEN_ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2233
2234@item c
840758d3
BS
2235Register in the class @code{CC_REGS} (@code{fcc0} to @code{fcc3} and
2236@code{icc0} to @code{icc3}).
70899148
BS
2237
2238@item d
840758d3 2239Register in the class @code{GPR_REGS} (@code{gr0} to @code{gr63}).
70899148
BS
2240
2241@item e
840758d3 2242Register in the class @code{EVEN_REGS} (@code{gr0} to @code{gr63}).
70899148
BS
2243Odd registers are excluded not in the class but through the use of a machine
2244mode larger than 4 bytes.
2245
2246@item f
840758d3 2247Register in the class @code{FPR_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2248
2249@item h
840758d3 2250Register in the class @code{FEVEN_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2251Odd registers are excluded not in the class but through the use of a machine
2252mode larger than 4 bytes.
2253
2254@item l
840758d3 2255Register in the class @code{LR_REG} (the @code{lr} register).
70899148
BS
2256
2257@item q
840758d3 2258Register in the class @code{QUAD_REGS} (@code{gr2} to @code{gr63}).
70899148
BS
2259Register numbers not divisible by 4 are excluded not in the class but through
2260the use of a machine mode larger than 8 bytes.
2261
2262@item t
840758d3 2263Register in the class @code{ICC_REGS} (@code{icc0} to @code{icc3}).
70899148
BS
2264
2265@item u
840758d3 2266Register in the class @code{FCC_REGS} (@code{fcc0} to @code{fcc3}).
70899148
BS
2267
2268@item v
840758d3 2269Register in the class @code{ICR_REGS} (@code{cc4} to @code{cc7}).
70899148
BS
2270
2271@item w
840758d3 2272Register in the class @code{FCR_REGS} (@code{cc0} to @code{cc3}).
70899148
BS
2273
2274@item x
840758d3 2275Register in the class @code{QUAD_FPR_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2276Register numbers not divisible by 4 are excluded not in the class but through
2277the use of a machine mode larger than 8 bytes.
2278
2279@item z
840758d3 2280Register in the class @code{SPR_REGS} (@code{lcr} and @code{lr}).
70899148
BS
2281
2282@item A
840758d3 2283Register in the class @code{QUAD_ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2284
2285@item B
840758d3 2286Register in the class @code{ACCG_REGS} (@code{accg0} to @code{accg7}).
70899148
BS
2287
2288@item C
840758d3 2289Register in the class @code{CR_REGS} (@code{cc0} to @code{cc7}).
70899148
BS
2290
2291@item G
2292Floating point constant zero
2293
2294@item I
22956-bit signed integer constant
2296
2297@item J
229810-bit signed integer constant
2299
2300@item L
230116-bit signed integer constant
2302
2303@item M
230416-bit unsigned integer constant
2305
2306@item N
840758d3
BS
230712-bit signed integer constant that is negative---i.e.@: in the
2308range of @minus{}2048 to @minus{}1
70899148
BS
2309
2310@item O
2311Constant zero
2312
2313@item P
840758d3 231412-bit signed integer constant that is greater than zero---i.e.@: in the
70899148
BS
2315range of 1 to 2047.
2316
2317@end table
2318
9fdd7520 2319@item Blackfin family---@file{config/bfin/constraints.md}
0d4a78eb
BS
2320@table @code
2321@item a
2322P register
2323
2324@item d
2325D register
2326
2327@item z
2328A call clobbered P register.
2329
03848bd0
BS
2330@item q@var{n}
2331A single register. If @var{n} is in the range 0 to 7, the corresponding D
2332register. If it is @code{A}, then the register P0.
2333
0d4a78eb
BS
2334@item D
2335Even-numbered D register
2336
2337@item W
2338Odd-numbered D register
2339
2340@item e
2341Accumulator register.
2342
2343@item A
2344Even-numbered accumulator register.
2345
2346@item B
2347Odd-numbered accumulator register.
2348
2349@item b
2350I register
2351
a9c46998 2352@item v
0d4a78eb
BS
2353B register
2354
2355@item f
2356M register
2357
2358@item c
2359Registers used for circular buffering, i.e. I, B, or L registers.
2360
2361@item C
2362The CC register.
2363
a9c46998
JZ
2364@item t
2365LT0 or LT1.
2366
2367@item k
2368LC0 or LC1.
2369
2370@item u
2371LB0 or LB1.
2372
0d4a78eb
BS
2373@item x
2374Any D, P, B, M, I or L register.
2375
2376@item y
2377Additional registers typically used only in prologues and epilogues: RETS,
2378RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.
2379
2380@item w
2381Any register except accumulators or CC.
2382
2383@item Ksh
8ad1dde7 2384Signed 16 bit integer (in the range @minus{}32768 to 32767)
0d4a78eb
BS
2385
2386@item Kuh
2387Unsigned 16 bit integer (in the range 0 to 65535)
2388
2389@item Ks7
8ad1dde7 2390Signed 7 bit integer (in the range @minus{}64 to 63)
0d4a78eb
BS
2391
2392@item Ku7
2393Unsigned 7 bit integer (in the range 0 to 127)
2394
2395@item Ku5
2396Unsigned 5 bit integer (in the range 0 to 31)
2397
2398@item Ks4
8ad1dde7 2399Signed 4 bit integer (in the range @minus{}8 to 7)
0d4a78eb
BS
2400
2401@item Ks3
8ad1dde7 2402Signed 3 bit integer (in the range @minus{}3 to 4)
0d4a78eb
BS
2403
2404@item Ku3
2405Unsigned 3 bit integer (in the range 0 to 7)
2406
2407@item P@var{n}
2408Constant @var{n}, where @var{n} is a single-digit constant in the range 0 to 4.
2409
3efd5670
BS
2410@item PA
2411An integer equal to one of the MACFLAG_XXX constants that is suitable for
2412use with either accumulator.
2413
2414@item PB
2415An integer equal to one of the MACFLAG_XXX constants that is suitable for
2416use only with accumulator A1.
2417
0d4a78eb
BS
2418@item M1
2419Constant 255.
2420
2421@item M2
2422Constant 65535.
2423
2424@item J
2425An integer constant with exactly a single bit set.
2426
2427@item L
2428An integer constant with all bits set except exactly one.
2429
2430@item H
2431
2432@item Q
2433Any SYMBOL_REF.
2434@end table
2435
74fe790b
ZW
2436@item M32C---@file{config/m32c/m32c.c}
2437@table @code
38b2d076
DD
2438@item Rsp
2439@itemx Rfb
2440@itemx Rsb
2441@samp{$sp}, @samp{$fb}, @samp{$sb}.
2442
2443@item Rcr
2444Any control register, when they're 16 bits wide (nothing if control
2445registers are 24 bits wide)
2446
2447@item Rcl
2448Any control register, when they're 24 bits wide.
2449
2450@item R0w
2451@itemx R1w
2452@itemx R2w
2453@itemx R3w
2454$r0, $r1, $r2, $r3.
2455
2456@item R02
2457$r0 or $r2, or $r2r0 for 32 bit values.
2458
2459@item R13
2460$r1 or $r3, or $r3r1 for 32 bit values.
2461
2462@item Rdi
2463A register that can hold a 64 bit value.
2464
2465@item Rhl
2466$r0 or $r1 (registers with addressable high/low bytes)
2467
2468@item R23
2469$r2 or $r3
2470
2471@item Raa
2472Address registers
2473
2474@item Raw
2475Address registers when they're 16 bits wide.
2476
2477@item Ral
2478Address registers when they're 24 bits wide.
2479
2480@item Rqi
2481Registers that can hold QI values.
2482
2483@item Rad
2484Registers that can be used with displacements ($a0, $a1, $sb).
2485
2486@item Rsi
2487Registers that can hold 32 bit values.
2488
2489@item Rhi
2490Registers that can hold 16 bit values.
2491
2492@item Rhc
2493Registers chat can hold 16 bit values, including all control
2494registers.
2495
2496@item Rra
2497$r0 through R1, plus $a0 and $a1.
2498
2499@item Rfl
2500The flags register.
2501
2502@item Rmm
2503The memory-based pseudo-registers $mem0 through $mem15.
2504
2505@item Rpi
2506Registers that can hold pointers (16 bit registers for r8c, m16c; 24
2507bit registers for m32cm, m32c).
2508
2509@item Rpa
2510Matches multiple registers in a PARALLEL to form a larger register.
2511Used to match function return values.
2512
2513@item Is3
8ad1dde7 2514@minus{}8 @dots{} 7
38b2d076
DD
2515
2516@item IS1
8ad1dde7 2517@minus{}128 @dots{} 127
38b2d076
DD
2518
2519@item IS2
8ad1dde7 2520@minus{}32768 @dots{} 32767
38b2d076
DD
2521
2522@item IU2
25230 @dots{} 65535
2524
2525@item In4
8ad1dde7 2526@minus{}8 @dots{} @minus{}1 or 1 @dots{} 8
38b2d076
DD
2527
2528@item In5
8ad1dde7 2529@minus{}16 @dots{} @minus{}1 or 1 @dots{} 16
38b2d076 2530
23fed240 2531@item In6
8ad1dde7 2532@minus{}32 @dots{} @minus{}1 or 1 @dots{} 32
38b2d076
DD
2533
2534@item IM2
8ad1dde7 2535@minus{}65536 @dots{} @minus{}1
38b2d076
DD
2536
2537@item Ilb
2538An 8 bit value with exactly one bit set.
2539
2540@item Ilw
2541A 16 bit value with exactly one bit set.
2542
2543@item Sd
2544The common src/dest memory addressing modes.
2545
2546@item Sa
2547Memory addressed using $a0 or $a1.
2548
2549@item Si
2550Memory addressed with immediate addresses.
2551
2552@item Ss
2553Memory addressed using the stack pointer ($sp).
2554
2555@item Sf
2556Memory addressed using the frame base register ($fb).
2557
2558@item Ss
2559Memory addressed using the small base register ($sb).
2560
2561@item S1
2562$r1h
e2491744
DD
2563@end table
2564
2565@item MeP---@file{config/mep/constraints.md}
2566@table @code
2567
2568@item a
2569The $sp register.
2570
2571@item b
2572The $tp register.
2573
2574@item c
2575Any control register.
2576
2577@item d
2578Either the $hi or the $lo register.
2579
2580@item em
2581Coprocessor registers that can be directly loaded ($c0-$c15).
2582
2583@item ex
2584Coprocessor registers that can be moved to each other.
2585
2586@item er
2587Coprocessor registers that can be moved to core registers.
2588
2589@item h
2590The $hi register.
2591
2592@item j
2593The $rpc register.
2594
2595@item l
2596The $lo register.
2597
2598@item t
2599Registers which can be used in $tp-relative addressing.
2600
2601@item v
2602The $gp register.
2603
2604@item x
2605The coprocessor registers.
2606
2607@item y
2608The coprocessor control registers.
2609
2610@item z
2611The $0 register.
2612
2613@item A
2614User-defined register set A.
2615
2616@item B
2617User-defined register set B.
2618
2619@item C
2620User-defined register set C.
2621
2622@item D
2623User-defined register set D.
2624
2625@item I
2626Offsets for $gp-rel addressing.
2627
2628@item J
2629Constants that can be used directly with boolean insns.
2630
2631@item K
2632Constants that can be moved directly to registers.
2633
2634@item L
2635Small constants that can be added to registers.
2636
2637@item M
2638Long shift counts.
2639
2640@item N
2641Small constants that can be compared to registers.
2642
2643@item O
2644Constants that can be loaded into the top half of registers.
2645
2646@item S
2647Signed 8-bit immediates.
2648
2649@item T
2650Symbols encoded for $tp-rel or $gp-rel addressing.
2651
2652@item U
2653Non-constant addresses for loading/saving coprocessor registers.
2654
2655@item W
2656The top half of a symbol's value.
2657
2658@item Y
2659A register indirect address without offset.
2660
2661@item Z
2662Symbolic references to the control bus.
2663
2664
2665
74fe790b 2666@end table
38b2d076 2667
cbbb5b6d 2668@item MIPS---@file{config/mips/constraints.md}
4226378a
PK
2669@table @code
2670@item d
cbbb5b6d
RS
2671An address register. This is equivalent to @code{r} unless
2672generating MIPS16 code.
4226378a
PK
2673
2674@item f
cbbb5b6d 2675A floating-point register (if available).
4226378a
PK
2676
2677@item h
21dfc6dc 2678Formerly the @code{hi} register. This constraint is no longer supported.
4226378a
PK
2679
2680@item l
21dfc6dc
RS
2681The @code{lo} register. Use this register to store values that are
2682no bigger than a word.
4226378a
PK
2683
2684@item x
21dfc6dc
RS
2685The concatenated @code{hi} and @code{lo} registers. Use this register
2686to store doubleword values.
cbbb5b6d
RS
2687
2688@item c
2689A register suitable for use in an indirect jump. This will always be
2690@code{$25} for @option{-mabicalls}.
4226378a 2691
2feaae20
RS
2692@item v
2693Register @code{$3}. Do not use this constraint in new code;
2694it is retained only for compatibility with glibc.
2695
4226378a 2696@item y
cbbb5b6d 2697Equivalent to @code{r}; retained for backwards compatibility.
4226378a
PK
2698
2699@item z
cbbb5b6d 2700A floating-point condition code register.
4226378a
PK
2701
2702@item I
cbbb5b6d 2703A signed 16-bit constant (for arithmetic instructions).
4226378a
PK
2704
2705@item J
cbbb5b6d 2706Integer zero.
4226378a
PK
2707
2708@item K
cbbb5b6d 2709An unsigned 16-bit constant (for logic instructions).
4226378a
PK
2710
2711@item L
cbbb5b6d
RS
2712A signed 32-bit constant in which the lower 16 bits are zero.
2713Such constants can be loaded using @code{lui}.
4226378a
PK
2714
2715@item M
cbbb5b6d
RS
2716A constant that cannot be loaded using @code{lui}, @code{addiu}
2717or @code{ori}.
4226378a
PK
2718
2719@item N
8ad1dde7 2720A constant in the range @minus{}65535 to @minus{}1 (inclusive).
4226378a
PK
2721
2722@item O
cbbb5b6d 2723A signed 15-bit constant.
4226378a
PK
2724
2725@item P
cbbb5b6d 2726A constant in the range 1 to 65535 (inclusive).
4226378a
PK
2727
2728@item G
cbbb5b6d 2729Floating-point zero.
4226378a
PK
2730
2731@item R
cbbb5b6d 2732An address that can be used in a non-macro load or store.
4226378a
PK
2733@end table
2734
c47b0cb4 2735@item Motorola 680x0---@file{config/m68k/constraints.md}
03dda8e3
RK
2736@table @code
2737@item a
2738Address register
2739
2740@item d
2741Data register
2742
2743@item f
274468881 floating-point register, if available
2745
03dda8e3
RK
2746@item I
2747Integer in the range 1 to 8
2748
2749@item J
1e5f973d 275016-bit signed number
03dda8e3
RK
2751
2752@item K
2753Signed number whose magnitude is greater than 0x80
2754
2755@item L
630d3d5a 2756Integer in the range @minus{}8 to @minus{}1
03dda8e3
RK
2757
2758@item M
2759Signed number whose magnitude is greater than 0x100
2760
c47b0cb4
MK
2761@item N
2762Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
2763
2764@item O
276516 (for rotate using swap)
2766
2767@item P
2768Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
2769
2770@item R
2771Numbers that mov3q can handle
2772
03dda8e3
RK
2773@item G
2774Floating point constant that is not a 68881 constant
c47b0cb4
MK
2775
2776@item S
2777Operands that satisfy 'm' when -mpcrel is in effect
2778
2779@item T
2780Operands that satisfy 's' when -mpcrel is not in effect
2781
2782@item Q
2783Address register indirect addressing mode
2784
2785@item U
2786Register offset addressing
2787
2788@item W
2789const_call_operand
2790
2791@item Cs
2792symbol_ref or const
2793
2794@item Ci
2795const_int
2796
2797@item C0
2798const_int 0
2799
2800@item Cj
2801Range of signed numbers that don't fit in 16 bits
2802
2803@item Cmvq
2804Integers valid for mvq
2805
2806@item Capsw
2807Integers valid for a moveq followed by a swap
2808
2809@item Cmvz
2810Integers valid for mvz
2811
2812@item Cmvs
2813Integers valid for mvs
2814
2815@item Ap
2816push_operand
2817
2818@item Ac
2819Non-register operands allowed in clr
2820
03dda8e3
RK
2821@end table
2822
74fe790b 2823@item Motorola 68HC11 & 68HC12 families---@file{config/m68hc11/m68hc11.h}
2856c3e3
SC
2824@table @code
2825@item a
78466c0e 2826Register `a'
2856c3e3
SC
2827
2828@item b
78466c0e 2829Register `b'
2856c3e3
SC
2830
2831@item d
78466c0e 2832Register `d'
2856c3e3
SC
2833
2834@item q
2835An 8-bit register
2836
2837@item t
2838Temporary soft register _.tmp
2839
2840@item u
2841A soft register _.d1 to _.d31
2842
2843@item w
2844Stack pointer register
2845
2846@item x
78466c0e 2847Register `x'
2856c3e3
SC
2848
2849@item y
78466c0e 2850Register `y'
2856c3e3
SC
2851
2852@item z
78466c0e 2853Pseudo register `z' (replaced by `x' or `y' at the end)
2856c3e3
SC
2854
2855@item A
2856An address register: x, y or z
2857
2858@item B
2859An address register: x or y
2860
2861@item D
2862Register pair (x:d) to form a 32-bit value
2863
2864@item L
630d3d5a 2865Constants in the range @minus{}65536 to 65535
2856c3e3
SC
2866
2867@item M
2868Constants whose 16-bit low part is zero
2869
2870@item N
630d3d5a 2871Constant integer 1 or @minus{}1
2856c3e3
SC
2872
2873@item O
2874Constant integer 16
2875
2876@item P
630d3d5a 2877Constants in the range @minus{}8 to 2
2856c3e3
SC
2878
2879@end table
2880
cceb575c
AG
2881@item Moxie---@file{config/moxie/constraints.md}
2882@table @code
2883@item A
2884An absolute address
2885
2886@item B
2887An offset address
2888
2889@item W
2890A register indirect memory operand
2891
2892@item I
2893A constant in the range of 0 to 255.
2894
2895@item N
8ad1dde7 2896A constant in the range of 0 to @minus{}255.
cceb575c
AG
2897
2898@end table
2899
03dda8e3 2900@need 1000
74fe790b 2901@item SPARC---@file{config/sparc/sparc.h}
03dda8e3
RK
2902@table @code
2903@item f
53e5f173
EB
2904Floating-point register on the SPARC-V8 architecture and
2905lower floating-point register on the SPARC-V9 architecture.
03dda8e3
RK
2906
2907@item e
8a36672b 2908Floating-point register. It is equivalent to @samp{f} on the
53e5f173
EB
2909SPARC-V8 architecture and contains both lower and upper
2910floating-point registers on the SPARC-V9 architecture.
03dda8e3 2911
8a69f99f
EB
2912@item c
2913Floating-point condition code register.
2914
2915@item d
8a36672b 2916Lower floating-point register. It is only valid on the SPARC-V9
53e5f173 2917architecture when the Visual Instruction Set is available.
8a69f99f
EB
2918
2919@item b
8a36672b 2920Floating-point register. It is only valid on the SPARC-V9 architecture
53e5f173 2921when the Visual Instruction Set is available.
8a69f99f
EB
2922
2923@item h
292464-bit global or out register for the SPARC-V8+ architecture.
2925
66e62b49
KH
2926@item D
2927A vector constant
2928
03dda8e3 2929@item I
1e5f973d 2930Signed 13-bit constant
03dda8e3
RK
2931
2932@item J
2933Zero
2934
2935@item K
1e5f973d 293632-bit constant with the low 12 bits clear (a constant that can be
03dda8e3
RK
2937loaded with the @code{sethi} instruction)
2938
7d6040e8
AO
2939@item L
2940A constant in the range supported by @code{movcc} instructions
2941
2942@item M
2943A constant in the range supported by @code{movrcc} instructions
2944
2945@item N
2946Same as @samp{K}, except that it verifies that bits that are not in the
57694e40 2947lower 32-bit range are all zero. Must be used instead of @samp{K} for
7d6040e8
AO
2948modes wider than @code{SImode}
2949
ef0139b1
EB
2950@item O
2951The constant 4096
2952
03dda8e3
RK
2953@item G
2954Floating-point zero
2955
2956@item H
1e5f973d 2957Signed 13-bit constant, sign-extended to 32 or 64 bits
03dda8e3
RK
2958
2959@item Q
62190128
DM
2960Floating-point constant whose integral representation can
2961be moved into an integer register using a single sethi
2962instruction
2963
2964@item R
2965Floating-point constant whose integral representation can
2966be moved into an integer register using a single mov
2967instruction
03dda8e3
RK
2968
2969@item S
62190128
DM
2970Floating-point constant whose integral representation can
2971be moved into an integer register using a high/lo_sum
2972instruction sequence
03dda8e3
RK
2973
2974@item T
2975Memory address aligned to an 8-byte boundary
2976
2977@item U
2978Even register
6ca30df6 2979
7a31a340 2980@item W
c75d6010
JM
2981Memory address for @samp{e} constraint registers
2982
2983@item Y
2984Vector zero
7a31a340 2985
6ca30df6
MH
2986@end table
2987
85d9c13c
TS
2988@item SPU---@file{config/spu/spu.h}
2989@table @code
2990@item a
2991An immediate which can be loaded with the il/ila/ilh/ilhu instructions. const_int is treated as a 64 bit value.
2992
2993@item c
2994An immediate for and/xor/or instructions. const_int is treated as a 64 bit value.
2995
2996@item d
2997An immediate for the @code{iohl} instruction. const_int is treated as a 64 bit value.
2998
2999@item f
3000An immediate which can be loaded with @code{fsmbi}.
3001
3002@item A
3003An immediate which can be loaded with the il/ila/ilh/ilhu instructions. const_int is treated as a 32 bit value.
3004
3005@item B
3006An immediate for most arithmetic instructions. const_int is treated as a 32 bit value.
3007
3008@item C
3009An immediate for and/xor/or instructions. const_int is treated as a 32 bit value.
3010
3011@item D
3012An immediate for the @code{iohl} instruction. const_int is treated as a 32 bit value.
3013
3014@item I
8ad1dde7 3015A constant in the range [@minus{}64, 63] for shift/rotate instructions.
85d9c13c
TS
3016
3017@item J
3018An unsigned 7-bit constant for conversion/nop/channel instructions.
3019
3020@item K
3021A signed 10-bit constant for most arithmetic instructions.
3022
3023@item M
3024A signed 16 bit immediate for @code{stop}.
3025
3026@item N
3027An unsigned 16-bit constant for @code{iohl} and @code{fsmbi}.
3028
3029@item O
3030An unsigned 7-bit constant whose 3 least significant bits are 0.
3031
3032@item P
3033An unsigned 3-bit constant for 16-byte rotates and shifts
3034
3035@item R
3036Call operand, reg, for indirect calls
3037
3038@item S
3039Call operand, symbol, for relative calls.
3040
3041@item T
3042Call operand, const_int, for absolute calls.
3043
3044@item U
3045An immediate which can be loaded with the il/ila/ilh/ilhu instructions. const_int is sign extended to 128 bit.
3046
3047@item W
3048An immediate for shift and rotate instructions. const_int is treated as a 32 bit value.
3049
3050@item Y
3051An immediate for and/xor/or instructions. const_int is sign extended as a 128 bit.
3052
3053@item Z
3054An immediate for the @code{iohl} instruction. const_int is sign extended to 128 bit.
3055
3056@end table
3057
74fe790b 3058@item S/390 and zSeries---@file{config/s390/s390.h}
91abf72d
HP
3059@table @code
3060@item a
3061Address register (general purpose register except r0)
3062
9dc62c00
AK
3063@item c
3064Condition code register
3065
91abf72d
HP
3066@item d
3067Data register (arbitrary general purpose register)
3068
3069@item f
3070Floating-point register
3071
3072@item I
3073Unsigned 8-bit constant (0--255)
3074
3075@item J
3076Unsigned 12-bit constant (0--4095)
3077
3078@item K
3079Signed 16-bit constant (@minus{}32768--32767)
3080
3081@item L
f19a9af7
AK
3082Value appropriate as displacement.
3083@table @code
6ccde948
RW
3084@item (0..4095)
3085for short displacement
8ad1dde7 3086@item (@minus{}524288..524287)
6ccde948 3087for long displacement
f19a9af7
AK
3088@end table
3089
3090@item M
3091Constant integer with a value of 0x7fffffff.
3092
3093@item N
3094Multiple letter constraint followed by 4 parameter letters.
3095@table @code
6ccde948
RW
3096@item 0..9:
3097number of the part counting from most to least significant
3098@item H,Q:
3099mode of the part
3100@item D,S,H:
3101mode of the containing operand
3102@item 0,F:
3103value of the other parts (F---all bits set)
f19a9af7
AK
3104@end table
3105The constraint matches if the specified part of a constant
dc9a511d 3106has a value different from its other parts.
91abf72d
HP
3107
3108@item Q
f19a9af7
AK
3109Memory reference without index register and with short displacement.
3110
3111@item R
3112Memory reference with index register and short displacement.
91abf72d
HP
3113
3114@item S
f19a9af7
AK
3115Memory reference without index register but with long displacement.
3116
3117@item T
3118Memory reference with index register and long displacement.
3119
3120@item U
3121Pointer with short displacement.
3122
3123@item W
3124Pointer with long displacement.
3125
3126@item Y
3127Shift count operand.
91abf72d
HP
3128
3129@end table
3130
93ef7c1f
CL
3131@item Score family---@file{config/score/score.h}
3132@table @code
3133@item d
3134Registers from r0 to r32.
3135
3136@item e
3137Registers from r0 to r16.
3138
3139@item t
3140r8---r11 or r22---r27 registers.
3141
3142@item h
3143hi register.
3144
3145@item l
3146lo register.
3147
3148@item x
3149hi + lo register.
3150
3151@item q
3152cnt register.
3153
3154@item y
3155lcb register.
3156
3157@item z
3158scb register.
3159
3160@item a
3161cnt + lcb + scb register.
3162
3163@item c
3164cr0---cr15 register.
3165
3166@item b
3167cp1 registers.
3168
3169@item f
3170cp2 registers.
3171
3172@item i
3173cp3 registers.
3174
3175@item j
3176cp1 + cp2 + cp3 registers.
3177
3178@item I
c6681463 3179High 16-bit constant (32-bit constant with 16 LSBs zero).
93ef7c1f
CL
3180
3181@item J
3182Unsigned 5 bit integer (in the range 0 to 31).
3183
3184@item K
3185Unsigned 16 bit integer (in the range 0 to 65535).
3186
3187@item L
3188Signed 16 bit integer (in the range @minus{}32768 to 32767).
3189
3190@item M
3191Unsigned 14 bit integer (in the range 0 to 16383).
3192
3193@item N
3194Signed 14 bit integer (in the range @minus{}8192 to 8191).
3195
93ef7c1f
CL
3196@item Z
3197Any SYMBOL_REF.
3198@end table
3199
74fe790b 3200@item Xstormy16---@file{config/stormy16/stormy16.h}
9f339dde
GK
3201@table @code
3202@item a
3203Register r0.
3204
3205@item b
3206Register r1.
3207
3208@item c
3209Register r2.
3210
3211@item d
3212Register r8.
3213
3214@item e
3215Registers r0 through r7.
3216
3217@item t
3218Registers r0 and r1.
3219
3220@item y
3221The carry register.
3222
3223@item z
3224Registers r8 and r9.
3225
3226@item I
3227A constant between 0 and 3 inclusive.
3228
3229@item J
3230A constant that has exactly one bit set.
3231
3232@item K
3233A constant that has exactly one bit clear.
3234
3235@item L
3236A constant between 0 and 255 inclusive.
3237
3238@item M
69a0611f 3239A constant between @minus{}255 and 0 inclusive.
9f339dde
GK
3240
3241@item N
69a0611f 3242A constant between @minus{}3 and 0 inclusive.
9f339dde
GK
3243
3244@item O
3245A constant between 1 and 4 inclusive.
3246
3247@item P
69a0611f 3248A constant between @minus{}4 and @minus{}1 inclusive.
9f339dde
GK
3249
3250@item Q
3251A memory reference that is a stack push.
3252
3253@item R
3254A memory reference that is a stack pop.
3255
3256@item S
63519d23 3257A memory reference that refers to a constant address of known value.
9f339dde
GK
3258
3259@item T
3260The register indicated by Rx (not implemented yet).
3261
3262@item U
3263A constant that is not between 2 and 15 inclusive.
3264
e2ce66a9
DD
3265@item Z
3266The constant 0.
3267
9f339dde
GK
3268@end table
3269
887af464 3270@item Xtensa---@file{config/xtensa/constraints.md}
03984308
BW
3271@table @code
3272@item a
3273General-purpose 32-bit register
3274
3275@item b
3276One-bit boolean register
3277
3278@item A
3279MAC16 40-bit accumulator register
3280
3281@item I
3282Signed 12-bit integer constant, for use in MOVI instructions
3283
3284@item J
3285Signed 8-bit integer constant, for use in ADDI instructions
3286
3287@item K
3288Integer constant valid for BccI instructions
3289
3290@item L
3291Unsigned constant valid for BccUI instructions
3292
3293@end table
3294
03dda8e3
RK
3295@end table
3296
7ac28727
AK
3297@ifset INTERNALS
3298@node Disable Insn Alternatives
3299@subsection Disable insn alternatives using the @code{enabled} attribute
3300@cindex enabled
3301
3302The @code{enabled} insn attribute may be used to disable certain insn
3303alternatives for machine-specific reasons. This is useful when adding
3304new instructions to an existing pattern which are only available for
3305certain cpu architecture levels as specified with the @code{-march=}
3306option.
3307
3308If an insn alternative is disabled, then it will never be used. The
3309compiler treats the constraints for the disabled alternative as
3310unsatisfiable.
3311
3312In order to make use of the @code{enabled} attribute a back end has to add
3313in the machine description files:
3314
3315@enumerate
3316@item
3317A definition of the @code{enabled} insn attribute. The attribute is
3318defined as usual using the @code{define_attr} command. This
3319definition should be based on other insn attributes and/or target flags.
3320The @code{enabled} attribute is a numeric attribute and should evaluate to
3321@code{(const_int 1)} for an enabled alternative and to
3322@code{(const_int 0)} otherwise.
3323@item
3324A definition of another insn attribute used to describe for what
3325reason an insn alternative might be available or
3326not. E.g. @code{cpu_facility} as in the example below.
3327@item
a640c13b 3328An assignment for the second attribute to each insn definition
7ac28727
AK
3329combining instructions which are not all available under the same
3330circumstances. (Note: It obviously only makes sense for definitions
3331with more than one alternative. Otherwise the insn pattern should be
3332disabled or enabled using the insn condition.)
3333@end enumerate
3334
3335E.g. the following two patterns could easily be merged using the @code{enabled}
3336attribute:
3337
3338@smallexample
3339
3340(define_insn "*movdi_old"
3341 [(set (match_operand:DI 0 "register_operand" "=d")
3342 (match_operand:DI 1 "register_operand" " d"))]
3343 "!TARGET_NEW"
3344 "lgr %0,%1")
3345
3346(define_insn "*movdi_new"
3347 [(set (match_operand:DI 0 "register_operand" "=d,f,d")
3348 (match_operand:DI 1 "register_operand" " d,d,f"))]
3349 "TARGET_NEW"
3350 "@@
3351 lgr %0,%1
3352 ldgr %0,%1
3353 lgdr %0,%1")
3354
3355@end smallexample
3356
3357to:
3358
3359@smallexample
3360
3361(define_insn "*movdi_combined"
3362 [(set (match_operand:DI 0 "register_operand" "=d,f,d")
3363 (match_operand:DI 1 "register_operand" " d,d,f"))]
3364 ""
3365 "@@
3366 lgr %0,%1
3367 ldgr %0,%1
3368 lgdr %0,%1"
3369 [(set_attr "cpu_facility" "*,new,new")])
3370
3371@end smallexample
3372
3373with the @code{enabled} attribute defined like this:
3374
3375@smallexample
3376
3377(define_attr "cpu_facility" "standard,new" (const_string "standard"))
3378
3379(define_attr "enabled" ""
3380 (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
3381 (and (eq_attr "cpu_facility" "new")
3382 (ne (symbol_ref "TARGET_NEW") (const_int 0)))
3383 (const_int 1)]
3384 (const_int 0)))
3385
3386@end smallexample
3387
3388@end ifset
3389
03dda8e3 3390@ifset INTERNALS
f38840db
ZW
3391@node Define Constraints
3392@subsection Defining Machine-Specific Constraints
3393@cindex defining constraints
3394@cindex constraints, defining
3395
3396Machine-specific constraints fall into two categories: register and
3397non-register constraints. Within the latter category, constraints
3398which allow subsets of all possible memory or address operands should
3399be specially marked, to give @code{reload} more information.
3400
3401Machine-specific constraints can be given names of arbitrary length,
3402but they must be entirely composed of letters, digits, underscores
3403(@samp{_}), and angle brackets (@samp{< >}). Like C identifiers, they
3404must begin with a letter or underscore.
3405
3406In order to avoid ambiguity in operand constraint strings, no
3407constraint can have a name that begins with any other constraint's
3408name. For example, if @code{x} is defined as a constraint name,
3409@code{xy} may not be, and vice versa. As a consequence of this rule,
3410no constraint may begin with one of the generic constraint letters:
3411@samp{E F V X g i m n o p r s}.
3412
3413Register constraints correspond directly to register classes.
3414@xref{Register Classes}. There is thus not much flexibility in their
3415definitions.
3416
3417@deffn {MD Expression} define_register_constraint name regclass docstring
3418All three arguments are string constants.
3419@var{name} is the name of the constraint, as it will appear in
5be527d0
RG
3420@code{match_operand} expressions. If @var{name} is a multi-letter
3421constraint its length shall be the same for all constraints starting
3422with the same letter. @var{regclass} can be either the
f38840db
ZW
3423name of the corresponding register class (@pxref{Register Classes}),
3424or a C expression which evaluates to the appropriate register class.
3425If it is an expression, it must have no side effects, and it cannot
3426look at the operand. The usual use of expressions is to map some
3427register constraints to @code{NO_REGS} when the register class
3428is not available on a given subarchitecture.
3429
3430@var{docstring} is a sentence documenting the meaning of the
3431constraint. Docstrings are explained further below.
3432@end deffn
3433
3434Non-register constraints are more like predicates: the constraint
3435definition gives a Boolean expression which indicates whether the
3436constraint matches.
3437
3438@deffn {MD Expression} define_constraint name docstring exp
3439The @var{name} and @var{docstring} arguments are the same as for
3440@code{define_register_constraint}, but note that the docstring comes
3441immediately after the name for these expressions. @var{exp} is an RTL
3442expression, obeying the same rules as the RTL expressions in predicate
3443definitions. @xref{Defining Predicates}, for details. If it
3444evaluates true, the constraint matches; if it evaluates false, it
3445doesn't. Constraint expressions should indicate which RTL codes they
3446might match, just like predicate expressions.
3447
3448@code{match_test} C expressions have access to the
3449following variables:
3450
3451@table @var
3452@item op
3453The RTL object defining the operand.
3454@item mode
3455The machine mode of @var{op}.
3456@item ival
3457@samp{INTVAL (@var{op})}, if @var{op} is a @code{const_int}.
3458@item hval
3459@samp{CONST_DOUBLE_HIGH (@var{op})}, if @var{op} is an integer
3460@code{const_double}.
3461@item lval
3462@samp{CONST_DOUBLE_LOW (@var{op})}, if @var{op} is an integer
3463@code{const_double}.
3464@item rval
3465@samp{CONST_DOUBLE_REAL_VALUE (@var{op})}, if @var{op} is a floating-point
3fa1b0e5 3466@code{const_double}.
f38840db
ZW
3467@end table
3468
3469The @var{*val} variables should only be used once another piece of the
3470expression has verified that @var{op} is the appropriate kind of RTL
3471object.
3472@end deffn
3473
3474Most non-register constraints should be defined with
3475@code{define_constraint}. The remaining two definition expressions
3476are only appropriate for constraints that should be handled specially
3477by @code{reload} if they fail to match.
3478
3479@deffn {MD Expression} define_memory_constraint name docstring exp
3480Use this expression for constraints that match a subset of all memory
3481operands: that is, @code{reload} can make them match by converting the
3482operand to the form @samp{@w{(mem (reg @var{X}))}}, where @var{X} is a
3483base register (from the register class specified by
3484@code{BASE_REG_CLASS}, @pxref{Register Classes}).
3485
3486For example, on the S/390, some instructions do not accept arbitrary
3487memory references, but only those that do not make use of an index
3488register. The constraint letter @samp{Q} is defined to represent a
3489memory address of this type. If @samp{Q} is defined with
3490@code{define_memory_constraint}, a @samp{Q} constraint can handle any
3491memory operand, because @code{reload} knows it can simply copy the
3492memory address into a base register if required. This is analogous to
e4ae5e77 3493the way an @samp{o} constraint can handle any memory operand.
f38840db
ZW
3494
3495The syntax and semantics are otherwise identical to
3496@code{define_constraint}.
3497@end deffn
3498
3499@deffn {MD Expression} define_address_constraint name docstring exp
3500Use this expression for constraints that match a subset of all address
3501operands: that is, @code{reload} can make the constraint match by
3502converting the operand to the form @samp{@w{(reg @var{X})}}, again
3503with @var{X} a base register.
3504
3505Constraints defined with @code{define_address_constraint} can only be
3506used with the @code{address_operand} predicate, or machine-specific
3507predicates that work the same way. They are treated analogously to
3508the generic @samp{p} constraint.
3509
3510The syntax and semantics are otherwise identical to
3511@code{define_constraint}.
3512@end deffn
3513
3514For historical reasons, names beginning with the letters @samp{G H}
3515are reserved for constraints that match only @code{const_double}s, and
3516names beginning with the letters @samp{I J K L M N O P} are reserved
3517for constraints that match only @code{const_int}s. This may change in
3518the future. For the time being, constraints with these names must be
3519written in a stylized form, so that @code{genpreds} can tell you did
3520it correctly:
3521
3522@smallexample
3523@group
3524(define_constraint "[@var{GHIJKLMNOP}]@dots{}"
3525 "@var{doc}@dots{}"
3526 (and (match_code "const_int") ; @r{@code{const_double} for G/H}
3527 @var{condition}@dots{})) ; @r{usually a @code{match_test}}
3528@end group
3529@end smallexample
3530@c the semicolons line up in the formatted manual
3531
3532It is fine to use names beginning with other letters for constraints
3533that match @code{const_double}s or @code{const_int}s.
3534
3535Each docstring in a constraint definition should be one or more complete
3536sentences, marked up in Texinfo format. @emph{They are currently unused.}
3537In the future they will be copied into the GCC manual, in @ref{Machine
3538Constraints}, replacing the hand-maintained tables currently found in
3539that section. Also, in the future the compiler may use this to give
3540more helpful diagnostics when poor choice of @code{asm} constraints
3541causes a reload failure.
3542
3543If you put the pseudo-Texinfo directive @samp{@@internal} at the
3544beginning of a docstring, then (in the future) it will appear only in
3545the internals manual's version of the machine-specific constraint tables.
3546Use this for constraints that should not appear in @code{asm} statements.
3547
3548@node C Constraint Interface
3549@subsection Testing constraints from C
3550@cindex testing constraints
3551@cindex constraints, testing
3552
3553It is occasionally useful to test a constraint from C code rather than
3554implicitly via the constraint string in a @code{match_operand}. The
3555generated file @file{tm_p.h} declares a few interfaces for working
3556with machine-specific constraints. None of these interfaces work with
3557the generic constraints described in @ref{Simple Constraints}. This
3558may change in the future.
3559
3560@strong{Warning:} @file{tm_p.h} may declare other functions that
3561operate on constraints, besides the ones documented here. Do not use
3562those functions from machine-dependent code. They exist to implement
3563the old constraint interface that machine-independent components of
3564the compiler still expect. They will change or disappear in the
3565future.
3566
3567Some valid constraint names are not valid C identifiers, so there is a
3568mangling scheme for referring to them from C@. Constraint names that
3569do not contain angle brackets or underscores are left unchanged.
3570Underscores are doubled, each @samp{<} is replaced with @samp{_l}, and
3571each @samp{>} with @samp{_g}. Here are some examples:
3572
3573@c the @c's prevent double blank lines in the printed manual.
3574@example
3575@multitable {Original} {Mangled}
cccb0908 3576@item @strong{Original} @tab @strong{Mangled} @c
f38840db
ZW
3577@item @code{x} @tab @code{x} @c
3578@item @code{P42x} @tab @code{P42x} @c
3579@item @code{P4_x} @tab @code{P4__x} @c
3580@item @code{P4>x} @tab @code{P4_gx} @c
3581@item @code{P4>>} @tab @code{P4_g_g} @c
3582@item @code{P4_g>} @tab @code{P4__g_g} @c
3583@end multitable
3584@end example
3585
3586Throughout this section, the variable @var{c} is either a constraint
3587in the abstract sense, or a constant from @code{enum constraint_num};
3588the variable @var{m} is a mangled constraint name (usually as part of
3589a larger identifier).
3590
3591@deftp Enum constraint_num
3592For each machine-specific constraint, there is a corresponding
3593enumeration constant: @samp{CONSTRAINT_} plus the mangled name of the
3594constraint. Functions that take an @code{enum constraint_num} as an
3595argument expect one of these constants.
3596
3597Machine-independent constraints do not have associated constants.
3598This may change in the future.
3599@end deftp
3600
3601@deftypefun {inline bool} satisfies_constraint_@var{m} (rtx @var{exp})
3602For each machine-specific, non-register constraint @var{m}, there is
3603one of these functions; it returns @code{true} if @var{exp} satisfies the
3604constraint. These functions are only visible if @file{rtl.h} was included
3605before @file{tm_p.h}.
3606@end deftypefun
3607
3608@deftypefun bool constraint_satisfied_p (rtx @var{exp}, enum constraint_num @var{c})
3609Like the @code{satisfies_constraint_@var{m}} functions, but the
3610constraint to test is given as an argument, @var{c}. If @var{c}
3611specifies a register constraint, this function will always return
3612@code{false}.
3613@end deftypefun
3614
3615@deftypefun {enum reg_class} regclass_for_constraint (enum constraint_num @var{c})
3616Returns the register class associated with @var{c}. If @var{c} is not
3617a register constraint, or those registers are not available for the
3618currently selected subtarget, returns @code{NO_REGS}.
3619@end deftypefun
3620
3621Here is an example use of @code{satisfies_constraint_@var{m}}. In
3622peephole optimizations (@pxref{Peephole Definitions}), operand
3623constraint strings are ignored, so if there are relevant constraints,
3624they must be tested in the C condition. In the example, the
3625optimization is applied if operand 2 does @emph{not} satisfy the
3626@samp{K} constraint. (This is a simplified version of a peephole
3627definition from the i386 machine description.)
3628
3629@smallexample
3630(define_peephole2
3631 [(match_scratch:SI 3 "r")
3632 (set (match_operand:SI 0 "register_operand" "")
6ccde948
RW
3633 (mult:SI (match_operand:SI 1 "memory_operand" "")
3634 (match_operand:SI 2 "immediate_operand" "")))]
f38840db
ZW
3635
3636 "!satisfies_constraint_K (operands[2])"
3637
3638 [(set (match_dup 3) (match_dup 1))
3639 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
3640
3641 "")
3642@end smallexample
3643
03dda8e3
RK
3644@node Standard Names
3645@section Standard Pattern Names For Generation
3646@cindex standard pattern names
3647@cindex pattern names
3648@cindex names, pattern
3649
3650Here is a table of the instruction names that are meaningful in the RTL
3651generation pass of the compiler. Giving one of these names to an
3652instruction pattern tells the RTL generation pass that it can use the
556e0f21 3653pattern to accomplish a certain task.
03dda8e3
RK
3654
3655@table @asis
3656@cindex @code{mov@var{m}} instruction pattern
3657@item @samp{mov@var{m}}
4bd0bee9 3658Here @var{m} stands for a two-letter machine mode name, in lowercase.
03dda8e3
RK
3659This instruction pattern moves data with that machine mode from operand
36601 to operand 0. For example, @samp{movsi} moves full-word data.
3661
3662If operand 0 is a @code{subreg} with mode @var{m} of a register whose
3663own mode is wider than @var{m}, the effect of this instruction is
3664to store the specified value in the part of the register that corresponds
8feb4e28
JL
3665to mode @var{m}. Bits outside of @var{m}, but which are within the
3666same target word as the @code{subreg} are undefined. Bits which are
3667outside the target word are left unchanged.
03dda8e3
RK
3668
3669This class of patterns is special in several ways. First of all, each
65945ec1
HPN
3670of these names up to and including full word size @emph{must} be defined,
3671because there is no other way to copy a datum from one place to another.
3672If there are patterns accepting operands in larger modes,
3673@samp{mov@var{m}} must be defined for integer modes of those sizes.
03dda8e3
RK
3674
3675Second, these patterns are not used solely in the RTL generation pass.
3676Even the reload pass can generate move insns to copy values from stack
3677slots into temporary registers. When it does so, one of the operands is
3678a hard register and the other is an operand that can need to be reloaded
3679into a register.
3680
3681@findex force_reg
3682Therefore, when given such a pair of operands, the pattern must generate
3683RTL which needs no reloading and needs no temporary registers---no
3684registers other than the operands. For example, if you support the
3685pattern with a @code{define_expand}, then in such a case the
3686@code{define_expand} mustn't call @code{force_reg} or any other such
3687function which might generate new pseudo registers.
3688
3689This requirement exists even for subword modes on a RISC machine where
3690fetching those modes from memory normally requires several insns and
39ed8974 3691some temporary registers.
03dda8e3
RK
3692
3693@findex change_address
3694During reload a memory reference with an invalid address may be passed
3695as an operand. Such an address will be replaced with a valid address
3696later in the reload pass. In this case, nothing may be done with the
3697address except to use it as it stands. If it is copied, it will not be
3698replaced with a valid address. No attempt should be made to make such
3699an address into a valid address and no routine (such as
3700@code{change_address}) that will do so may be called. Note that
3701@code{general_operand} will fail when applied to such an address.
3702
3703@findex reload_in_progress
3704The global variable @code{reload_in_progress} (which must be explicitly
3705declared if required) can be used to determine whether such special
3706handling is required.
3707
3708The variety of operands that have reloads depends on the rest of the
3709machine description, but typically on a RISC machine these can only be
3710pseudo registers that did not get hard registers, while on other
3711machines explicit memory references will get optional reloads.
3712
3713If a scratch register is required to move an object to or from memory,
f1db3576
JL
3714it can be allocated using @code{gen_reg_rtx} prior to life analysis.
3715
9c34dbbf 3716If there are cases which need scratch registers during or after reload,
8a99f6f9 3717you must provide an appropriate secondary_reload target hook.
03dda8e3 3718
ef4375b2
KZ
3719@findex can_create_pseudo_p
3720The macro @code{can_create_pseudo_p} can be used to determine if it
f1db3576
JL
3721is unsafe to create new pseudo registers. If this variable is nonzero, then
3722it is unsafe to call @code{gen_reg_rtx} to allocate a new pseudo.
3723
956d6950 3724The constraints on a @samp{mov@var{m}} must permit moving any hard
03dda8e3
RK
3725register to any other hard register provided that
3726@code{HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and
3727@code{REGISTER_MOVE_COST} applied to their classes returns a value of 2.
3728
956d6950 3729It is obligatory to support floating point @samp{mov@var{m}}
03dda8e3
RK
3730instructions into and out of any registers that can hold fixed point
3731values, because unions and structures (which have modes @code{SImode} or
3732@code{DImode}) can be in those registers and they may have floating
3733point members.
3734
956d6950 3735There may also be a need to support fixed point @samp{mov@var{m}}
03dda8e3
RK
3736instructions in and out of floating point registers. Unfortunately, I
3737have forgotten why this was so, and I don't know whether it is still
3738true. If @code{HARD_REGNO_MODE_OK} rejects fixed point values in
3739floating point registers, then the constraints of the fixed point
956d6950 3740@samp{mov@var{m}} instructions must be designed to avoid ever trying to
03dda8e3
RK
3741reload into a floating point register.
3742
3743@cindex @code{reload_in} instruction pattern
3744@cindex @code{reload_out} instruction pattern
3745@item @samp{reload_in@var{m}}
3746@itemx @samp{reload_out@var{m}}
8a99f6f9
R
3747These named patterns have been obsoleted by the target hook
3748@code{secondary_reload}.
3749
03dda8e3
RK
3750Like @samp{mov@var{m}}, but used when a scratch register is required to
3751move between operand 0 and operand 1. Operand 2 describes the scratch
3752register. See the discussion of the @code{SECONDARY_RELOAD_CLASS}
3753macro in @pxref{Register Classes}.
3754
d989f648 3755There are special restrictions on the form of the @code{match_operand}s
f282ffb3 3756used in these patterns. First, only the predicate for the reload
560dbedd
RH
3757operand is examined, i.e., @code{reload_in} examines operand 1, but not
3758the predicates for operand 0 or 2. Second, there may be only one
d989f648
RH
3759alternative in the constraints. Third, only a single register class
3760letter may be used for the constraint; subsequent constraint letters
3761are ignored. As a special exception, an empty constraint string
3762matches the @code{ALL_REGS} register class. This may relieve ports
3763of the burden of defining an @code{ALL_REGS} constraint letter just
3764for these patterns.
3765
03dda8e3
RK
3766@cindex @code{movstrict@var{m}} instruction pattern
3767@item @samp{movstrict@var{m}}
3768Like @samp{mov@var{m}} except that if operand 0 is a @code{subreg}
3769with mode @var{m} of a register whose natural mode is wider,
3770the @samp{movstrict@var{m}} instruction is guaranteed not to alter
3771any of the register except the part which belongs to mode @var{m}.
3772
1e0598e2
RH
3773@cindex @code{movmisalign@var{m}} instruction pattern
3774@item @samp{movmisalign@var{m}}
3775This variant of a move pattern is designed to load or store a value
3776from a memory address that is not naturally aligned for its mode.
3777For a store, the memory will be in operand 0; for a load, the memory
3778will be in operand 1. The other operand is guaranteed not to be a
3779memory, so that it's easy to tell whether this is a load or store.
3780
3781This pattern is used by the autovectorizer, and when expanding a
3782@code{MISALIGNED_INDIRECT_REF} expression.
3783
03dda8e3
RK
3784@cindex @code{load_multiple} instruction pattern
3785@item @samp{load_multiple}
3786Load several consecutive memory locations into consecutive registers.
3787Operand 0 is the first of the consecutive registers, operand 1
3788is the first memory location, and operand 2 is a constant: the
3789number of consecutive registers.
3790
3791Define this only if the target machine really has such an instruction;
3792do not define this if the most efficient way of loading consecutive
3793registers from memory is to do them one at a time.
3794
3795On some machines, there are restrictions as to which consecutive
3796registers can be stored into memory, such as particular starting or
3797ending register numbers or only a range of valid counts. For those
3798machines, use a @code{define_expand} (@pxref{Expander Definitions})
3799and make the pattern fail if the restrictions are not met.
3800
3801Write the generated insn as a @code{parallel} with elements being a
3802@code{set} of one register from the appropriate memory location (you may
3803also need @code{use} or @code{clobber} elements). Use a
3804@code{match_parallel} (@pxref{RTL Template}) to recognize the insn. See
c9693e96 3805@file{rs6000.md} for examples of the use of this insn pattern.
03dda8e3
RK
3806
3807@cindex @samp{store_multiple} instruction pattern
3808@item @samp{store_multiple}
3809Similar to @samp{load_multiple}, but store several consecutive registers
3810into consecutive memory locations. Operand 0 is the first of the
3811consecutive memory locations, operand 1 is the first register, and
3812operand 2 is a constant: the number of consecutive registers.
3813
ef1140a9
JH
3814@cindex @code{vec_set@var{m}} instruction pattern
3815@item @samp{vec_set@var{m}}
3816Set given field in the vector value. Operand 0 is the vector to modify,
3817operand 1 is new value of field and operand 2 specify the field index.
3818
3819@cindex @code{vec_extract@var{m}} instruction pattern
3820@item @samp{vec_extract@var{m}}
3821Extract given field from the vector value. Operand 1 is the vector, operand 2
3822specify field index and operand 0 place to store value into.
3823
98b44b0e
IR
3824@cindex @code{vec_extract_even@var{m}} instruction pattern
3825@item @samp{vec_extract_even@var{m}}
3826Extract even elements from the input vectors (operand 1 and operand 2).
3827The even elements of operand 2 are concatenated to the even elements of operand
38281 in their original order. The result is stored in operand 0.
3829The output and input vectors should have the same modes.
3830
3831@cindex @code{vec_extract_odd@var{m}} instruction pattern
3832@item @samp{vec_extract_odd@var{m}}
3833Extract odd elements from the input vectors (operand 1 and operand 2).
3834The odd elements of operand 2 are concatenated to the odd elements of operand
38351 in their original order. The result is stored in operand 0.
3836The output and input vectors should have the same modes.
3837
3838@cindex @code{vec_interleave_high@var{m}} instruction pattern
3839@item @samp{vec_interleave_high@var{m}}
3840Merge high elements of the two input vectors into the output vector. The output
3841and input vectors should have the same modes (@code{N} elements). The high
3842@code{N/2} elements of the first input vector are interleaved with the high
3843@code{N/2} elements of the second input vector.
3844
3845@cindex @code{vec_interleave_low@var{m}} instruction pattern
3846@item @samp{vec_interleave_low@var{m}}
3847Merge low elements of the two input vectors into the output vector. The output
3848and input vectors should have the same modes (@code{N} elements). The low
3849@code{N/2} elements of the first input vector are interleaved with the low
3850@code{N/2} elements of the second input vector.
3851
ef1140a9
JH
3852@cindex @code{vec_init@var{m}} instruction pattern
3853@item @samp{vec_init@var{m}}
425a2bde 3854Initialize the vector to given values. Operand 0 is the vector to initialize
ef1140a9
JH
3855and operand 1 is parallel containing values for individual fields.
3856
759915ca
EC
3857@cindex @code{push@var{m}1} instruction pattern
3858@item @samp{push@var{m}1}
299c5111 3859Output a push instruction. Operand 0 is value to push. Used only when
38f4324c
JH
3860@code{PUSH_ROUNDING} is defined. For historical reason, this pattern may be
3861missing and in such case an @code{mov} expander is used instead, with a
6e9aac46 3862@code{MEM} expression forming the push operation. The @code{mov} expander
38f4324c
JH
3863method is deprecated.
3864
03dda8e3
RK
3865@cindex @code{add@var{m}3} instruction pattern
3866@item @samp{add@var{m}3}
3867Add operand 2 and operand 1, storing the result in operand 0. All operands
3868must have mode @var{m}. This can be used even on two-address machines, by
3869means of constraints requiring operands 1 and 0 to be the same location.
3870
0f996086
CF
3871@cindex @code{ssadd@var{m}3} instruction pattern
3872@cindex @code{usadd@var{m}3} instruction pattern
03dda8e3 3873@cindex @code{sub@var{m}3} instruction pattern
0f996086
CF
3874@cindex @code{sssub@var{m}3} instruction pattern
3875@cindex @code{ussub@var{m}3} instruction pattern
03dda8e3 3876@cindex @code{mul@var{m}3} instruction pattern
0f996086
CF
3877@cindex @code{ssmul@var{m}3} instruction pattern
3878@cindex @code{usmul@var{m}3} instruction pattern
03dda8e3 3879@cindex @code{div@var{m}3} instruction pattern
0f996086 3880@cindex @code{ssdiv@var{m}3} instruction pattern
03dda8e3 3881@cindex @code{udiv@var{m}3} instruction pattern
0f996086 3882@cindex @code{usdiv@var{m}3} instruction pattern
03dda8e3
RK
3883@cindex @code{mod@var{m}3} instruction pattern
3884@cindex @code{umod@var{m}3} instruction pattern
03dda8e3
RK
3885@cindex @code{umin@var{m}3} instruction pattern
3886@cindex @code{umax@var{m}3} instruction pattern
3887@cindex @code{and@var{m}3} instruction pattern
3888@cindex @code{ior@var{m}3} instruction pattern
3889@cindex @code{xor@var{m}3} instruction pattern
0f996086
CF
3890@item @samp{ssadd@var{m}3}, @samp{usadd@var{m}3}
3891@item @samp{sub@var{m}3}, @samp{sssub@var{m}3}, @samp{ussub@var{m}3}
3892@item @samp{mul@var{m}3}, @samp{ssmul@var{m}3}, @samp{usmul@var{m}3}
3893@itemx @samp{div@var{m}3}, @samp{ssdiv@var{m}3}
3894@itemx @samp{udiv@var{m}3}, @samp{usdiv@var{m}3}
7ae4d8d4
RH
3895@itemx @samp{mod@var{m}3}, @samp{umod@var{m}3}
3896@itemx @samp{umin@var{m}3}, @samp{umax@var{m}3}
03dda8e3
RK
3897@itemx @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3}
3898Similar, for other arithmetic operations.
7ae4d8d4 3899
b71b019a
JH
3900@cindex @code{min@var{m}3} instruction pattern
3901@cindex @code{max@var{m}3} instruction pattern
7ae4d8d4
RH
3902@item @samp{smin@var{m}3}, @samp{smax@var{m}3}
3903Signed minimum and maximum operations. When used with floating point,
3904if both operands are zeros, or if either operand is @code{NaN}, then
3905it is unspecified which of the two operands is returned as the result.
03dda8e3 3906
61abee65
DN
3907@cindex @code{reduc_smin_@var{m}} instruction pattern
3908@cindex @code{reduc_smax_@var{m}} instruction pattern
3909@item @samp{reduc_smin_@var{m}}, @samp{reduc_smax_@var{m}}
3910Find the signed minimum/maximum of the elements of a vector. The vector is
759915ca
EC
3911operand 1, and the scalar result is stored in the least significant bits of
3912operand 0 (also a vector). The output and input vector should have the same
61abee65
DN
3913modes.
3914
3915@cindex @code{reduc_umin_@var{m}} instruction pattern
3916@cindex @code{reduc_umax_@var{m}} instruction pattern
3917@item @samp{reduc_umin_@var{m}}, @samp{reduc_umax_@var{m}}
3918Find the unsigned minimum/maximum of the elements of a vector. The vector is
759915ca
EC
3919operand 1, and the scalar result is stored in the least significant bits of
3920operand 0 (also a vector). The output and input vector should have the same
61abee65
DN
3921modes.
3922
3923@cindex @code{reduc_splus_@var{m}} instruction pattern
3924@item @samp{reduc_splus_@var{m}}
759915ca
EC
3925Compute the sum of the signed elements of a vector. The vector is operand 1,
3926and the scalar result is stored in the least significant bits of operand 0
61abee65
DN
3927(also a vector). The output and input vector should have the same modes.
3928
3929@cindex @code{reduc_uplus_@var{m}} instruction pattern
3930@item @samp{reduc_uplus_@var{m}}
759915ca
EC
3931Compute the sum of the unsigned elements of a vector. The vector is operand 1,
3932and the scalar result is stored in the least significant bits of operand 0
61abee65
DN
3933(also a vector). The output and input vector should have the same modes.
3934
20f06221
DN
3935@cindex @code{sdot_prod@var{m}} instruction pattern
3936@item @samp{sdot_prod@var{m}}
3937@cindex @code{udot_prod@var{m}} instruction pattern
3938@item @samp{udot_prod@var{m}}
3939Compute the sum of the products of two signed/unsigned elements.
3940Operand 1 and operand 2 are of the same mode. Their product, which is of a
3941wider mode, is computed and added to operand 3. Operand 3 is of a mode equal or
3942wider than the mode of the product. The result is placed in operand 0, which
3943is of the same mode as operand 3.
3944
3945@cindex @code{ssum_widen@var{m3}} instruction pattern
3946@item @samp{ssum_widen@var{m3}}
3947@cindex @code{usum_widen@var{m3}} instruction pattern
3948@item @samp{usum_widen@var{m3}}
3949Operands 0 and 2 are of the same mode, which is wider than the mode of
3950operand 1. Add operand 1 to operand 2 and place the widened result in
3951operand 0. (This is used express accumulation of elements into an accumulator
3952of a wider mode.)
3953
61abee65
DN
3954@cindex @code{vec_shl_@var{m}} instruction pattern
3955@cindex @code{vec_shr_@var{m}} instruction pattern
3956@item @samp{vec_shl_@var{m}}, @samp{vec_shr_@var{m}}
3957Whole vector left/right shift in bits.
3958Operand 1 is a vector to be shifted.
759915ca 3959Operand 2 is an integer shift amount in bits.
61abee65
DN
3960Operand 0 is where the resulting shifted vector is stored.
3961The output and input vectors should have the same modes.
3962
8115817b
UB
3963@cindex @code{vec_pack_trunc_@var{m}} instruction pattern
3964@item @samp{vec_pack_trunc_@var{m}}
3965Narrow (demote) and merge the elements of two vectors. Operands 1 and 2
3966are vectors of the same mode having N integral or floating point elements
0ee2ea09 3967of size S@. Operand 0 is the resulting vector in which 2*N elements of
8115817b
UB
3968size N/2 are concatenated after narrowing them down using truncation.
3969
89d67cca
DN
3970@cindex @code{vec_pack_ssat_@var{m}} instruction pattern
3971@cindex @code{vec_pack_usat_@var{m}} instruction pattern
8115817b
UB
3972@item @samp{vec_pack_ssat_@var{m}}, @samp{vec_pack_usat_@var{m}}
3973Narrow (demote) and merge the elements of two vectors. Operands 1 and 2
3974are vectors of the same mode having N integral elements of size S.
89d67cca 3975Operand 0 is the resulting vector in which the elements of the two input
8115817b
UB
3976vectors are concatenated after narrowing them down using signed/unsigned
3977saturating arithmetic.
89d67cca 3978
d9987fb4
UB
3979@cindex @code{vec_pack_sfix_trunc_@var{m}} instruction pattern
3980@cindex @code{vec_pack_ufix_trunc_@var{m}} instruction pattern
3981@item @samp{vec_pack_sfix_trunc_@var{m}}, @samp{vec_pack_ufix_trunc_@var{m}}
3982Narrow, convert to signed/unsigned integral type and merge the elements
3983of two vectors. Operands 1 and 2 are vectors of the same mode having N
0ee2ea09 3984floating point elements of size S@. Operand 0 is the resulting vector
d9987fb4
UB
3985in which 2*N elements of size N/2 are concatenated.
3986
89d67cca
DN
3987@cindex @code{vec_unpacks_hi_@var{m}} instruction pattern
3988@cindex @code{vec_unpacks_lo_@var{m}} instruction pattern
8115817b
UB
3989@item @samp{vec_unpacks_hi_@var{m}}, @samp{vec_unpacks_lo_@var{m}}
3990Extract and widen (promote) the high/low part of a vector of signed
3991integral or floating point elements. The input vector (operand 1) has N
0ee2ea09 3992elements of size S@. Widen (promote) the high/low elements of the vector
8115817b
UB
3993using signed or floating point extension and place the resulting N/2
3994values of size 2*S in the output vector (operand 0).
3995
89d67cca
DN
3996@cindex @code{vec_unpacku_hi_@var{m}} instruction pattern
3997@cindex @code{vec_unpacku_lo_@var{m}} instruction pattern
8115817b
UB
3998@item @samp{vec_unpacku_hi_@var{m}}, @samp{vec_unpacku_lo_@var{m}}
3999Extract and widen (promote) the high/low part of a vector of unsigned
4000integral elements. The input vector (operand 1) has N elements of size S.
4001Widen (promote) the high/low elements of the vector using zero extension and
4002place the resulting N/2 values of size 2*S in the output vector (operand 0).
89d67cca 4003
d9987fb4
UB
4004@cindex @code{vec_unpacks_float_hi_@var{m}} instruction pattern
4005@cindex @code{vec_unpacks_float_lo_@var{m}} instruction pattern
4006@cindex @code{vec_unpacku_float_hi_@var{m}} instruction pattern
4007@cindex @code{vec_unpacku_float_lo_@var{m}} instruction pattern
4008@item @samp{vec_unpacks_float_hi_@var{m}}, @samp{vec_unpacks_float_lo_@var{m}}
4009@itemx @samp{vec_unpacku_float_hi_@var{m}}, @samp{vec_unpacku_float_lo_@var{m}}
4010Extract, convert to floating point type and widen the high/low part of a
4011vector of signed/unsigned integral elements. The input vector (operand 1)
0ee2ea09 4012has N elements of size S@. Convert the high/low elements of the vector using
d9987fb4
UB
4013floating point conversion and place the resulting N/2 values of size 2*S in
4014the output vector (operand 0).
4015
89d67cca
DN
4016@cindex @code{vec_widen_umult_hi_@var{m}} instruction pattern
4017@cindex @code{vec_widen_umult_lo__@var{m}} instruction pattern
4018@cindex @code{vec_widen_smult_hi_@var{m}} instruction pattern
4019@cindex @code{vec_widen_smult_lo_@var{m}} instruction pattern
d9987fb4
UB
4020@item @samp{vec_widen_umult_hi_@var{m}}, @samp{vec_widen_umult_lo_@var{m}}
4021@itemx @samp{vec_widen_smult_hi_@var{m}}, @samp{vec_widen_smult_lo_@var{m}}
8115817b 4022Signed/Unsigned widening multiplication. The two inputs (operands 1 and 2)
0ee2ea09 4023are vectors with N signed/unsigned elements of size S@. Multiply the high/low
8115817b
UB
4024elements of the two vectors, and put the N/2 products of size 2*S in the
4025output vector (operand 0).
89d67cca 4026
03dda8e3
RK
4027@cindex @code{mulhisi3} instruction pattern
4028@item @samp{mulhisi3}
4029Multiply operands 1 and 2, which have mode @code{HImode}, and store
4030a @code{SImode} product in operand 0.
4031
4032@cindex @code{mulqihi3} instruction pattern
4033@cindex @code{mulsidi3} instruction pattern
4034@item @samp{mulqihi3}, @samp{mulsidi3}
4035Similar widening-multiplication instructions of other widths.
4036
4037@cindex @code{umulqihi3} instruction pattern
4038@cindex @code{umulhisi3} instruction pattern
4039@cindex @code{umulsidi3} instruction pattern
4040@item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3}
4041Similar widening-multiplication instructions that do unsigned
4042multiplication.
4043
8b44057d
BS
4044@cindex @code{usmulqihi3} instruction pattern
4045@cindex @code{usmulhisi3} instruction pattern
4046@cindex @code{usmulsidi3} instruction pattern
4047@item @samp{usmulqihi3}, @samp{usmulhisi3}, @samp{usmulsidi3}
4048Similar widening-multiplication instructions that interpret the first
4049operand as unsigned and the second operand as signed, then do a signed
4050multiplication.
4051
03dda8e3 4052@cindex @code{smul@var{m}3_highpart} instruction pattern
759c58af 4053@item @samp{smul@var{m}3_highpart}
03dda8e3
RK
4054Perform a signed multiplication of operands 1 and 2, which have mode
4055@var{m}, and store the most significant half of the product in operand 0.
4056The least significant half of the product is discarded.
4057
4058@cindex @code{umul@var{m}3_highpart} instruction pattern
4059@item @samp{umul@var{m}3_highpart}
4060Similar, but the multiplication is unsigned.
4061
7f9844ca
RS
4062@cindex @code{madd@var{m}@var{n}4} instruction pattern
4063@item @samp{madd@var{m}@var{n}4}
4064Multiply operands 1 and 2, sign-extend them to mode @var{n}, add
4065operand 3, and store the result in operand 0. Operands 1 and 2
4066have mode @var{m} and operands 0 and 3 have mode @var{n}.
0f996086 4067Both modes must be integer or fixed-point modes and @var{n} must be twice
7f9844ca
RS
4068the size of @var{m}.
4069
4070In other words, @code{madd@var{m}@var{n}4} is like
4071@code{mul@var{m}@var{n}3} except that it also adds operand 3.
4072
4073These instructions are not allowed to @code{FAIL}.
4074
4075@cindex @code{umadd@var{m}@var{n}4} instruction pattern
4076@item @samp{umadd@var{m}@var{n}4}
4077Like @code{madd@var{m}@var{n}4}, but zero-extend the multiplication
4078operands instead of sign-extending them.
4079
0f996086
CF
4080@cindex @code{ssmadd@var{m}@var{n}4} instruction pattern
4081@item @samp{ssmadd@var{m}@var{n}4}
4082Like @code{madd@var{m}@var{n}4}, but all involved operations must be
4083signed-saturating.
4084
4085@cindex @code{usmadd@var{m}@var{n}4} instruction pattern
4086@item @samp{usmadd@var{m}@var{n}4}
4087Like @code{umadd@var{m}@var{n}4}, but all involved operations must be
4088unsigned-saturating.
4089
14661f36
CF
4090@cindex @code{msub@var{m}@var{n}4} instruction pattern
4091@item @samp{msub@var{m}@var{n}4}
4092Multiply operands 1 and 2, sign-extend them to mode @var{n}, subtract the
4093result from operand 3, and store the result in operand 0. Operands 1 and 2
4094have mode @var{m} and operands 0 and 3 have mode @var{n}.
0f996086 4095Both modes must be integer or fixed-point modes and @var{n} must be twice
14661f36
CF
4096the size of @var{m}.
4097
4098In other words, @code{msub@var{m}@var{n}4} is like
4099@code{mul@var{m}@var{n}3} except that it also subtracts the result
4100from operand 3.
4101
4102These instructions are not allowed to @code{FAIL}.
4103
4104@cindex @code{umsub@var{m}@var{n}4} instruction pattern
4105@item @samp{umsub@var{m}@var{n}4}
4106Like @code{msub@var{m}@var{n}4}, but zero-extend the multiplication
4107operands instead of sign-extending them.
4108
0f996086
CF
4109@cindex @code{ssmsub@var{m}@var{n}4} instruction pattern
4110@item @samp{ssmsub@var{m}@var{n}4}
4111Like @code{msub@var{m}@var{n}4}, but all involved operations must be
4112signed-saturating.
4113
4114@cindex @code{usmsub@var{m}@var{n}4} instruction pattern
4115@item @samp{usmsub@var{m}@var{n}4}
4116Like @code{umsub@var{m}@var{n}4}, but all involved operations must be
4117unsigned-saturating.
4118
03dda8e3
RK
4119@cindex @code{divmod@var{m}4} instruction pattern
4120@item @samp{divmod@var{m}4}
4121Signed division that produces both a quotient and a remainder.
4122Operand 1 is divided by operand 2 to produce a quotient stored
4123in operand 0 and a remainder stored in operand 3.
4124
4125For machines with an instruction that produces both a quotient and a
4126remainder, provide a pattern for @samp{divmod@var{m}4} but do not
4127provide patterns for @samp{div@var{m}3} and @samp{mod@var{m}3}. This
4128allows optimization in the relatively common case when both the quotient
4129and remainder are computed.
4130
4131If an instruction that just produces a quotient or just a remainder
4132exists and is more efficient than the instruction that produces both,
4133write the output routine of @samp{divmod@var{m}4} to call
4134@code{find_reg_note} and look for a @code{REG_UNUSED} note on the
4135quotient or remainder and generate the appropriate instruction.
4136
4137@cindex @code{udivmod@var{m}4} instruction pattern
4138@item @samp{udivmod@var{m}4}
4139Similar, but does unsigned division.
4140
273a2526 4141@anchor{shift patterns}
03dda8e3 4142@cindex @code{ashl@var{m}3} instruction pattern
0f996086
CF
4143@cindex @code{ssashl@var{m}3} instruction pattern
4144@cindex @code{usashl@var{m}3} instruction pattern
4145@item @samp{ashl@var{m}3}, @samp{ssashl@var{m}3}, @samp{usashl@var{m}3}
03dda8e3
RK
4146Arithmetic-shift operand 1 left by a number of bits specified by operand
41472, and store the result in operand 0. Here @var{m} is the mode of
4148operand 0 and operand 1; operand 2's mode is specified by the
4149instruction pattern, and the compiler will convert the operand to that
273a2526
RS
4150mode before generating the instruction. The meaning of out-of-range shift
4151counts can optionally be specified by @code{TARGET_SHIFT_TRUNCATION_MASK}.
71d46ca5 4152@xref{TARGET_SHIFT_TRUNCATION_MASK}. Operand 2 is always a scalar type.
03dda8e3
RK
4153
4154@cindex @code{ashr@var{m}3} instruction pattern
4155@cindex @code{lshr@var{m}3} instruction pattern
4156@cindex @code{rotl@var{m}3} instruction pattern
4157@cindex @code{rotr@var{m}3} instruction pattern
4158@item @samp{ashr@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3}
4159Other shift and rotate instructions, analogous to the
71d46ca5
MM
4160@code{ashl@var{m}3} instructions. Operand 2 is always a scalar type.
4161
4162@cindex @code{vashl@var{m}3} instruction pattern
4163@cindex @code{vashr@var{m}3} instruction pattern
4164@cindex @code{vlshr@var{m}3} instruction pattern
4165@cindex @code{vrotl@var{m}3} instruction pattern
4166@cindex @code{vrotr@var{m}3} instruction pattern
4167@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}
4168Vector shift and rotate instructions that take vectors as operand 2
4169instead of a scalar type.
03dda8e3
RK
4170
4171@cindex @code{neg@var{m}2} instruction pattern
0f996086
CF
4172@cindex @code{ssneg@var{m}2} instruction pattern
4173@cindex @code{usneg@var{m}2} instruction pattern
4174@item @samp{neg@var{m}2}, @samp{ssneg@var{m}2}, @samp{usneg@var{m}2}
03dda8e3
RK
4175Negate operand 1 and store the result in operand 0.
4176
4177@cindex @code{abs@var{m}2} instruction pattern
4178@item @samp{abs@var{m}2}
4179Store the absolute value of operand 1 into operand 0.
4180
4181@cindex @code{sqrt@var{m}2} instruction pattern
4182@item @samp{sqrt@var{m}2}
4183Store the square root of operand 1 into operand 0.
4184
4185The @code{sqrt} built-in function of C always uses the mode which
e7b489c8
RS
4186corresponds to the C data type @code{double} and the @code{sqrtf}
4187built-in function uses the mode which corresponds to the C data
4188type @code{float}.
4189
17b98269
UB
4190@cindex @code{fmod@var{m}3} instruction pattern
4191@item @samp{fmod@var{m}3}
4192Store the remainder of dividing operand 1 by operand 2 into
4193operand 0, rounded towards zero to an integer.
4194
4195The @code{fmod} built-in function of C always uses the mode which
4196corresponds to the C data type @code{double} and the @code{fmodf}
4197built-in function uses the mode which corresponds to the C data
4198type @code{float}.
4199
4200@cindex @code{remainder@var{m}3} instruction pattern
4201@item @samp{remainder@var{m}3}
4202Store the remainder of dividing operand 1 by operand 2 into
4203operand 0, rounded to the nearest integer.
4204
4205The @code{remainder} built-in function of C always uses the mode
4206which corresponds to the C data type @code{double} and the
4207@code{remainderf} built-in function uses the mode which corresponds
4208to the C data type @code{float}.
4209
e7b489c8
RS
4210@cindex @code{cos@var{m}2} instruction pattern
4211@item @samp{cos@var{m}2}
4212Store the cosine of operand 1 into operand 0.
4213
4214The @code{cos} built-in function of C always uses the mode which
4215corresponds to the C data type @code{double} and the @code{cosf}
4216built-in function uses the mode which corresponds to the C data
4217type @code{float}.
4218
4219@cindex @code{sin@var{m}2} instruction pattern
4220@item @samp{sin@var{m}2}
4221Store the sine of operand 1 into operand 0.
4222
4223The @code{sin} built-in function of C always uses the mode which
4224corresponds to the C data type @code{double} and the @code{sinf}
4225built-in function uses the mode which corresponds to the C data
4226type @code{float}.
4227
4228@cindex @code{exp@var{m}2} instruction pattern
4229@item @samp{exp@var{m}2}
4230Store the exponential of operand 1 into operand 0.
4231
4232The @code{exp} built-in function of C always uses the mode which
4233corresponds to the C data type @code{double} and the @code{expf}
4234built-in function uses the mode which corresponds to the C data
4235type @code{float}.
4236
4237@cindex @code{log@var{m}2} instruction pattern
4238@item @samp{log@var{m}2}
4239Store the natural logarithm of operand 1 into operand 0.
4240
4241The @code{log} built-in function of C always uses the mode which
4242corresponds to the C data type @code{double} and the @code{logf}
4243built-in function uses the mode which corresponds to the C data
4244type @code{float}.
03dda8e3 4245
b5e01d4b
RS
4246@cindex @code{pow@var{m}3} instruction pattern
4247@item @samp{pow@var{m}3}
4248Store the value of operand 1 raised to the exponent operand 2
4249into operand 0.
4250
4251The @code{pow} built-in function of C always uses the mode which
4252corresponds to the C data type @code{double} and the @code{powf}
4253built-in function uses the mode which corresponds to the C data
4254type @code{float}.
4255
4256@cindex @code{atan2@var{m}3} instruction pattern
4257@item @samp{atan2@var{m}3}
4258Store the arc tangent (inverse tangent) of operand 1 divided by
4259operand 2 into operand 0, using the signs of both arguments to
4260determine the quadrant of the result.
4261
4262The @code{atan2} built-in function of C always uses the mode which
4263corresponds to the C data type @code{double} and the @code{atan2f}
4264built-in function uses the mode which corresponds to the C data
4265type @code{float}.
4266
4977bab6
ZW
4267@cindex @code{floor@var{m}2} instruction pattern
4268@item @samp{floor@var{m}2}
4269Store the largest integral value not greater than argument.
4270
4271The @code{floor} built-in function of C always uses the mode which
4272corresponds to the C data type @code{double} and the @code{floorf}
4273built-in function uses the mode which corresponds to the C data
4274type @code{float}.
4275
10553f10
UB
4276@cindex @code{btrunc@var{m}2} instruction pattern
4277@item @samp{btrunc@var{m}2}
4977bab6
ZW
4278Store the argument rounded to integer towards zero.
4279
4280The @code{trunc} built-in function of C always uses the mode which
4281corresponds to the C data type @code{double} and the @code{truncf}
4282built-in function uses the mode which corresponds to the C data
4283type @code{float}.
4284
4285@cindex @code{round@var{m}2} instruction pattern
4286@item @samp{round@var{m}2}
4287Store the argument rounded to integer away from zero.
4288
4289The @code{round} built-in function of C always uses the mode which
4290corresponds to the C data type @code{double} and the @code{roundf}
4291built-in function uses the mode which corresponds to the C data
4292type @code{float}.
4293
4294@cindex @code{ceil@var{m}2} instruction pattern
4295@item @samp{ceil@var{m}2}
4296Store the argument rounded to integer away from zero.
4297
4298The @code{ceil} built-in function of C always uses the mode which
4299corresponds to the C data type @code{double} and the @code{ceilf}
4300built-in function uses the mode which corresponds to the C data
4301type @code{float}.
4302
4303@cindex @code{nearbyint@var{m}2} instruction pattern
4304@item @samp{nearbyint@var{m}2}
4305Store the argument rounded according to the default rounding mode
4306
4307The @code{nearbyint} built-in function of C always uses the mode which
4308corresponds to the C data type @code{double} and the @code{nearbyintf}
4309built-in function uses the mode which corresponds to the C data
4310type @code{float}.
4311
10553f10
UB
4312@cindex @code{rint@var{m}2} instruction pattern
4313@item @samp{rint@var{m}2}
4314Store the argument rounded according to the default rounding mode and
4315raise the inexact exception when the result differs in value from
4316the argument
4317
4318The @code{rint} built-in function of C always uses the mode which
4319corresponds to the C data type @code{double} and the @code{rintf}
4320built-in function uses the mode which corresponds to the C data
4321type @code{float}.
4322
bb7f0423
RG
4323@cindex @code{lrint@var{m}@var{n}2}
4324@item @samp{lrint@var{m}@var{n}2}
4325Convert operand 1 (valid for floating point mode @var{m}) to fixed
4326point mode @var{n} as a signed number according to the current
4327rounding mode and store in operand 0 (which has mode @var{n}).
4328
4d81bf84
RG
4329@cindex @code{lround@var{m}@var{n}2}
4330@item @samp{lround@var{m}2}
4331Convert operand 1 (valid for floating point mode @var{m}) to fixed
4332point mode @var{n} as a signed number rounding to nearest and away
4333from zero and store in operand 0 (which has mode @var{n}).
4334
c3a4177f
RG
4335@cindex @code{lfloor@var{m}@var{n}2}
4336@item @samp{lfloor@var{m}2}
4337Convert operand 1 (valid for floating point mode @var{m}) to fixed
4338point mode @var{n} as a signed number rounding down and store in
4339operand 0 (which has mode @var{n}).
4340
4341@cindex @code{lceil@var{m}@var{n}2}
4342@item @samp{lceil@var{m}2}
4343Convert operand 1 (valid for floating point mode @var{m}) to fixed
4344point mode @var{n} as a signed number rounding up and store in
4345operand 0 (which has mode @var{n}).
4346
d35a40fc
DE
4347@cindex @code{copysign@var{m}3} instruction pattern
4348@item @samp{copysign@var{m}3}
4349Store a value with the magnitude of operand 1 and the sign of operand
43502 into operand 0.
4351
4352The @code{copysign} built-in function of C always uses the mode which
4353corresponds to the C data type @code{double} and the @code{copysignf}
4354built-in function uses the mode which corresponds to the C data
4355type @code{float}.
4356
03dda8e3
RK
4357@cindex @code{ffs@var{m}2} instruction pattern
4358@item @samp{ffs@var{m}2}
4359Store into operand 0 one plus the index of the least significant 1-bit
4360of operand 1. If operand 1 is zero, store zero. @var{m} is the mode
4361of operand 0; operand 1's mode is specified by the instruction
4362pattern, and the compiler will convert the operand to that mode before
4363generating the instruction.
4364
4365The @code{ffs} built-in function of C always uses the mode which
4366corresponds to the C data type @code{int}.
4367
2928cd7a
RH
4368@cindex @code{clz@var{m}2} instruction pattern
4369@item @samp{clz@var{m}2}
4370Store into operand 0 the number of leading 0-bits in @var{x}, starting
2a6627c2
JN
4371at the most significant bit position. If @var{x} is 0, the
4372@code{CLZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}) macro defines if
4373the result is undefined or has a useful value.
4374@var{m} is the mode of operand 0; operand 1's mode is
2928cd7a
RH
4375specified by the instruction pattern, and the compiler will convert the
4376operand to that mode before generating the instruction.
4377
4378@cindex @code{ctz@var{m}2} instruction pattern
4379@item @samp{ctz@var{m}2}
4380Store into operand 0 the number of trailing 0-bits in @var{x}, starting
2a6627c2
JN
4381at the least significant bit position. If @var{x} is 0, the
4382@code{CTZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}) macro defines if
4383the result is undefined or has a useful value.
4384@var{m} is the mode of operand 0; operand 1's mode is
2928cd7a
RH
4385specified by the instruction pattern, and the compiler will convert the
4386operand to that mode before generating the instruction.
4387
4388@cindex @code{popcount@var{m}2} instruction pattern
4389@item @samp{popcount@var{m}2}
4390Store into operand 0 the number of 1-bits in @var{x}. @var{m} is the
4391mode of operand 0; operand 1's mode is specified by the instruction
4392pattern, and the compiler will convert the operand to that mode before
4393generating the instruction.
4394
4395@cindex @code{parity@var{m}2} instruction pattern
4396@item @samp{parity@var{m}2}
8a36672b 4397Store into operand 0 the parity of @var{x}, i.e.@: the number of 1-bits
2928cd7a
RH
4398in @var{x} modulo 2. @var{m} is the mode of operand 0; operand 1's mode
4399is specified by the instruction pattern, and the compiler will convert
4400the operand to that mode before generating the instruction.
4401
03dda8e3
RK
4402@cindex @code{one_cmpl@var{m}2} instruction pattern
4403@item @samp{one_cmpl@var{m}2}
4404Store the bitwise-complement of operand 1 into operand 0.
4405
70128ad9
AO
4406@cindex @code{movmem@var{m}} instruction pattern
4407@item @samp{movmem@var{m}}
beed8fc0
AO
4408Block move instruction. The destination and source blocks of memory
4409are the first two operands, and both are @code{mem:BLK}s with an
4410address in mode @code{Pmode}.
e5e809f4 4411
03dda8e3 4412The number of bytes to move is the third operand, in mode @var{m}.
e5e809f4
JL
4413Usually, you specify @code{word_mode} for @var{m}. However, if you can
4414generate better code knowing the range of valid lengths is smaller than
4415those representable in a full word, you should provide a pattern with a
4416mode corresponding to the range of values you can handle efficiently
4417(e.g., @code{QImode} for values in the range 0--127; note we avoid numbers
4418that appear negative) and also a pattern with @code{word_mode}.
03dda8e3
RK
4419
4420The fourth operand is the known shared alignment of the source and
4421destination, in the form of a @code{const_int} rtx. Thus, if the
4422compiler knows that both source and destination are word-aligned,
4423it may provide the value 4 for this operand.
4424
079a182e
JH
4425Optional operands 5 and 6 specify expected alignment and size of block
4426respectively. The expected alignment differs from alignment in operand 4
4427in a way that the blocks are not required to be aligned according to it in
9946ca2d
RA
4428all cases. This expected alignment is also in bytes, just like operand 4.
4429Expected size, when unknown, is set to @code{(const_int -1)}.
079a182e 4430
70128ad9 4431Descriptions of multiple @code{movmem@var{m}} patterns can only be
4693911f 4432beneficial if the patterns for smaller modes have fewer restrictions
8c01d9b6 4433on their first, second and fourth operands. Note that the mode @var{m}
70128ad9 4434in @code{movmem@var{m}} does not impose any restriction on the mode of
8c01d9b6
JL
4435individually moved data units in the block.
4436
03dda8e3
RK
4437These patterns need not give special consideration to the possibility
4438that the source and destination strings might overlap.
4439
beed8fc0
AO
4440@cindex @code{movstr} instruction pattern
4441@item @samp{movstr}
4442String copy instruction, with @code{stpcpy} semantics. Operand 0 is
4443an output operand in mode @code{Pmode}. The addresses of the
4444destination and source strings are operands 1 and 2, and both are
4445@code{mem:BLK}s with addresses in mode @code{Pmode}. The execution of
4446the expansion of this pattern should store in operand 0 the address in
4447which the @code{NUL} terminator was stored in the destination string.
4448
57e84f18
AS
4449@cindex @code{setmem@var{m}} instruction pattern
4450@item @samp{setmem@var{m}}
4451Block set instruction. The destination string is the first operand,
beed8fc0 4452given as a @code{mem:BLK} whose address is in mode @code{Pmode}. The
57e84f18
AS
4453number of bytes to set is the second operand, in mode @var{m}. The value to
4454initialize the memory with is the third operand. Targets that only support the
4455clearing of memory should reject any value that is not the constant 0. See
beed8fc0 4456@samp{movmem@var{m}} for a discussion of the choice of mode.
03dda8e3 4457
57e84f18 4458The fourth operand is the known alignment of the destination, in the form
03dda8e3
RK
4459of a @code{const_int} rtx. Thus, if the compiler knows that the
4460destination is word-aligned, it may provide the value 4 for this
4461operand.
4462
079a182e
JH
4463Optional operands 5 and 6 specify expected alignment and size of block
4464respectively. The expected alignment differs from alignment in operand 4
4465in a way that the blocks are not required to be aligned according to it in
9946ca2d
RA
4466all cases. This expected alignment is also in bytes, just like operand 4.
4467Expected size, when unknown, is set to @code{(const_int -1)}.
079a182e 4468
57e84f18 4469The use for multiple @code{setmem@var{m}} is as for @code{movmem@var{m}}.
8c01d9b6 4470
40c1d5f8
AS
4471@cindex @code{cmpstrn@var{m}} instruction pattern
4472@item @samp{cmpstrn@var{m}}
358b8f01 4473String compare instruction, with five operands. Operand 0 is the output;
03dda8e3 4474it has mode @var{m}. The remaining four operands are like the operands
70128ad9 4475of @samp{movmem@var{m}}. The two memory blocks specified are compared
5cc2f4f3
KG
4476byte by byte in lexicographic order starting at the beginning of each
4477string. The instruction is not allowed to prefetch more than one byte
4478at a time since either string may end in the first byte and reading past
4479that may access an invalid page or segment and cause a fault. The
4480effect of the instruction is to store a value in operand 0 whose sign
4481indicates the result of the comparison.
03dda8e3 4482
40c1d5f8
AS
4483@cindex @code{cmpstr@var{m}} instruction pattern
4484@item @samp{cmpstr@var{m}}
4485String compare instruction, without known maximum length. Operand 0 is the
4486output; it has mode @var{m}. The second and third operand are the blocks of
4487memory to be compared; both are @code{mem:BLK} with an address in mode
4488@code{Pmode}.
4489
4490The fourth operand is the known shared alignment of the source and
4491destination, in the form of a @code{const_int} rtx. Thus, if the
4492compiler knows that both source and destination are word-aligned,
4493it may provide the value 4 for this operand.
4494
4495The two memory blocks specified are compared byte by byte in lexicographic
4496order starting at the beginning of each string. The instruction is not allowed
4497to prefetch more than one byte at a time since either string may end in the
4498first byte and reading past that may access an invalid page or segment and
4499cause a fault. The effect of the instruction is to store a value in operand 0
4500whose sign indicates the result of the comparison.
4501
358b8f01
JJ
4502@cindex @code{cmpmem@var{m}} instruction pattern
4503@item @samp{cmpmem@var{m}}
4504Block compare instruction, with five operands like the operands
4505of @samp{cmpstr@var{m}}. The two memory blocks specified are compared
4506byte by byte in lexicographic order starting at the beginning of each
4507block. Unlike @samp{cmpstr@var{m}} the instruction can prefetch
4508any bytes in the two memory blocks. The effect of the instruction is
4509to store a value in operand 0 whose sign indicates the result of the
4510comparison.
4511
03dda8e3
RK
4512@cindex @code{strlen@var{m}} instruction pattern
4513@item @samp{strlen@var{m}}
4514Compute the length of a string, with three operands.
4515Operand 0 is the result (of mode @var{m}), operand 1 is
4516a @code{mem} referring to the first character of the string,
4517operand 2 is the character to search for (normally zero),
4518and operand 3 is a constant describing the known alignment
4519of the beginning of the string.
4520
4521@cindex @code{float@var{mn}2} instruction pattern
4522@item @samp{float@var{m}@var{n}2}
4523Convert signed integer operand 1 (valid for fixed point mode @var{m}) to
4524floating point mode @var{n} and store in operand 0 (which has mode
4525@var{n}).
4526
4527@cindex @code{floatuns@var{mn}2} instruction pattern
4528@item @samp{floatuns@var{m}@var{n}2}
4529Convert unsigned integer operand 1 (valid for fixed point mode @var{m})
4530to floating point mode @var{n} and store in operand 0 (which has mode
4531@var{n}).
4532
4533@cindex @code{fix@var{mn}2} instruction pattern
4534@item @samp{fix@var{m}@var{n}2}
4535Convert operand 1 (valid for floating point mode @var{m}) to fixed
4536point mode @var{n} as a signed number and store in operand 0 (which
4537has mode @var{n}). This instruction's result is defined only when
4538the value of operand 1 is an integer.
4539
0e1d7f32
AH
4540If the machine description defines this pattern, it also needs to
4541define the @code{ftrunc} pattern.
4542
03dda8e3
RK
4543@cindex @code{fixuns@var{mn}2} instruction pattern
4544@item @samp{fixuns@var{m}@var{n}2}
4545Convert operand 1 (valid for floating point mode @var{m}) to fixed
4546point mode @var{n} as an unsigned number and store in operand 0 (which
4547has mode @var{n}). This instruction's result is defined only when the
4548value of operand 1 is an integer.
4549
4550@cindex @code{ftrunc@var{m}2} instruction pattern
4551@item @samp{ftrunc@var{m}2}
4552Convert operand 1 (valid for floating point mode @var{m}) to an
4553integer value, still represented in floating point mode @var{m}, and
4554store it in operand 0 (valid for floating point mode @var{m}).
4555
4556@cindex @code{fix_trunc@var{mn}2} instruction pattern
4557@item @samp{fix_trunc@var{m}@var{n}2}
4558Like @samp{fix@var{m}@var{n}2} but works for any floating point value
4559of mode @var{m} by converting the value to an integer.
4560
4561@cindex @code{fixuns_trunc@var{mn}2} instruction pattern
4562@item @samp{fixuns_trunc@var{m}@var{n}2}
4563Like @samp{fixuns@var{m}@var{n}2} but works for any floating point
4564value of mode @var{m} by converting the value to an integer.
4565
4566@cindex @code{trunc@var{mn}2} instruction pattern
4567@item @samp{trunc@var{m}@var{n}2}
4568Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and
4569store in operand 0 (which has mode @var{n}). Both modes must be fixed
4570point or both floating point.
4571
4572@cindex @code{extend@var{mn}2} instruction pattern
4573@item @samp{extend@var{m}@var{n}2}
4574Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
4575store in operand 0 (which has mode @var{n}). Both modes must be fixed
4576point or both floating point.
4577
4578@cindex @code{zero_extend@var{mn}2} instruction pattern
4579@item @samp{zero_extend@var{m}@var{n}2}
4580Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
4581store in operand 0 (which has mode @var{n}). Both modes must be fixed
4582point.
4583
0f996086
CF
4584@cindex @code{fract@var{mn}2} instruction pattern
4585@item @samp{fract@var{m}@var{n}2}
4586Convert operand 1 of mode @var{m} to mode @var{n} and store in
4587operand 0 (which has mode @var{n}). Mode @var{m} and mode @var{n}
4588could be fixed-point to fixed-point, signed integer to fixed-point,
4589fixed-point to signed integer, floating-point to fixed-point,
4590or fixed-point to floating-point.
4591When overflows or underflows happen, the results are undefined.
4592
4593@cindex @code{satfract@var{mn}2} instruction pattern
4594@item @samp{satfract@var{m}@var{n}2}
4595Convert operand 1 of mode @var{m} to mode @var{n} and store in
4596operand 0 (which has mode @var{n}). Mode @var{m} and mode @var{n}
4597could be fixed-point to fixed-point, signed integer to fixed-point,
4598or floating-point to fixed-point.
4599When overflows or underflows happen, the instruction saturates the
4600results to the maximum or the minimum.
4601
4602@cindex @code{fractuns@var{mn}2} instruction pattern
4603@item @samp{fractuns@var{m}@var{n}2}
4604Convert operand 1 of mode @var{m} to mode @var{n} and store in
4605operand 0 (which has mode @var{n}). Mode @var{m} and mode @var{n}
4606could be unsigned integer to fixed-point, or
4607fixed-point to unsigned integer.
4608When overflows or underflows happen, the results are undefined.
4609
4610@cindex @code{satfractuns@var{mn}2} instruction pattern
4611@item @samp{satfractuns@var{m}@var{n}2}
4612Convert unsigned integer operand 1 of mode @var{m} to fixed-point mode
4613@var{n} and store in operand 0 (which has mode @var{n}).
4614When overflows or underflows happen, the instruction saturates the
4615results to the maximum or the minimum.
4616
03dda8e3
RK
4617@cindex @code{extv} instruction pattern
4618@item @samp{extv}
c771326b 4619Extract a bit-field from operand 1 (a register or memory operand), where
03dda8e3
RK
4620operand 2 specifies the width in bits and operand 3 the starting bit,
4621and store it in operand 0. Operand 0 must have mode @code{word_mode}.
4622Operand 1 may have mode @code{byte_mode} or @code{word_mode}; often
4623@code{word_mode} is allowed only for registers. Operands 2 and 3 must
4624be valid for @code{word_mode}.
4625
4626The RTL generation pass generates this instruction only with constants
3ab997e8 4627for operands 2 and 3 and the constant is never zero for operand 2.
03dda8e3
RK
4628
4629The bit-field value is sign-extended to a full word integer
4630before it is stored in operand 0.
4631
4632@cindex @code{extzv} instruction pattern
4633@item @samp{extzv}
4634Like @samp{extv} except that the bit-field value is zero-extended.
4635
4636@cindex @code{insv} instruction pattern
4637@item @samp{insv}
c771326b
JM
4638Store operand 3 (which must be valid for @code{word_mode}) into a
4639bit-field in operand 0, where operand 1 specifies the width in bits and
03dda8e3
RK
4640operand 2 the starting bit. Operand 0 may have mode @code{byte_mode} or
4641@code{word_mode}; often @code{word_mode} is allowed only for registers.
4642Operands 1 and 2 must be valid for @code{word_mode}.
4643
4644The RTL generation pass generates this instruction only with constants
3ab997e8 4645for operands 1 and 2 and the constant is never zero for operand 1.
03dda8e3
RK
4646
4647@cindex @code{mov@var{mode}cc} instruction pattern
4648@item @samp{mov@var{mode}cc}
4649Conditionally move operand 2 or operand 3 into operand 0 according to the
4650comparison in operand 1. If the comparison is true, operand 2 is moved
4651into operand 0, otherwise operand 3 is moved.
4652
4653The mode of the operands being compared need not be the same as the operands
4654being moved. Some machines, sparc64 for example, have instructions that
4655conditionally move an integer value based on the floating point condition
4656codes and vice versa.
4657
4658If the machine does not have conditional move instructions, do not
4659define these patterns.
4660
068f5dea 4661@cindex @code{add@var{mode}cc} instruction pattern
4b5cc2b3 4662@item @samp{add@var{mode}cc}
068f5dea
JH
4663Similar to @samp{mov@var{mode}cc} but for conditional addition. Conditionally
4664move operand 2 or (operands 2 + operand 3) into operand 0 according to the
4665comparison in operand 1. If the comparison is true, operand 2 is moved into
4b5cc2b3 4666operand 0, otherwise (operand 2 + operand 3) is moved.
068f5dea 4667
f90b7a5a
PB
4668@cindex @code{cstore@var{mode}4} instruction pattern
4669@item @samp{cstore@var{mode}4}
4670Store zero or nonzero in operand 0 according to whether a comparison
4671is true. Operand 1 is a comparison operator. Operand 2 and operand 3
4672are the first and second operand of the comparison, respectively.
4673You specify the mode that operand 0 must have when you write the
4674@code{match_operand} expression. The compiler automatically sees which
4675mode you have used and supplies an operand of that mode.
03dda8e3
RK
4676
4677The value stored for a true condition must have 1 as its low bit, or
4678else must be negative. Otherwise the instruction is not suitable and
4679you should omit it from the machine description. You describe to the
4680compiler exactly which value is stored by defining the macro
4681@code{STORE_FLAG_VALUE} (@pxref{Misc}). If a description cannot be
4682found that can be used for all the @samp{s@var{cond}} patterns, you
4683should omit those operations from the machine description.
4684
4685These operations may fail, but should do so only in relatively
4686uncommon cases; if they would fail for common cases involving
4687integer comparisons, it is best to omit these patterns.
4688
4689If these operations are omitted, the compiler will usually generate code
4690that copies the constant one to the target and branches around an
4691assignment of zero to the target. If this code is more efficient than
f90b7a5a 4692the potential instructions used for the @samp{cstore@var{mode}4} pattern
03dda8e3 4693followed by those required to convert the result into a 1 or a zero in
f90b7a5a 4694@code{SImode}, you should omit the @samp{cstore@var{mode}4} operations from
03dda8e3
RK
4695the machine description.
4696
66c87bae
KH
4697@cindex @code{cbranch@var{mode}4} instruction pattern
4698@item @samp{cbranch@var{mode}4}
4699Conditional branch instruction combined with a compare instruction.
4700Operand 0 is a comparison operator. Operand 1 and operand 2 are the
4701first and second operands of the comparison, respectively. Operand 3
4702is a @code{label_ref} that refers to the label to jump to.
4703
d26eedb6
HPN
4704@cindex @code{jump} instruction pattern
4705@item @samp{jump}
4706A jump inside a function; an unconditional branch. Operand 0 is the
4707@code{label_ref} of the label to jump to. This pattern name is mandatory
4708on all machines.
4709
03dda8e3
RK
4710@cindex @code{call} instruction pattern
4711@item @samp{call}
4712Subroutine call instruction returning no value. Operand 0 is the
4713function to call; operand 1 is the number of bytes of arguments pushed
f5963e61
JL
4714as a @code{const_int}; operand 2 is the number of registers used as
4715operands.
03dda8e3
RK
4716
4717On most machines, operand 2 is not actually stored into the RTL
4718pattern. It is supplied for the sake of some RISC machines which need
4719to put this information into the assembler code; they can put it in
4720the RTL instead of operand 1.
4721
4722Operand 0 should be a @code{mem} RTX whose address is the address of the
4723function. Note, however, that this address can be a @code{symbol_ref}
4724expression even if it would not be a legitimate memory address on the
4725target machine. If it is also not a valid argument for a call
4726instruction, the pattern for this operation should be a
4727@code{define_expand} (@pxref{Expander Definitions}) that places the
4728address into a register and uses that register in the call instruction.
4729
4730@cindex @code{call_value} instruction pattern
4731@item @samp{call_value}
4732Subroutine call instruction returning a value. Operand 0 is the hard
4733register in which the value is returned. There are three more
4734operands, the same as the three operands of the @samp{call}
4735instruction (but with numbers increased by one).
4736
4737Subroutines that return @code{BLKmode} objects use the @samp{call}
4738insn.
4739
4740@cindex @code{call_pop} instruction pattern
4741@cindex @code{call_value_pop} instruction pattern
4742@item @samp{call_pop}, @samp{call_value_pop}
4743Similar to @samp{call} and @samp{call_value}, except used if defined and
df2a54e9 4744if @code{RETURN_POPS_ARGS} is nonzero. They should emit a @code{parallel}
03dda8e3
RK
4745that contains both the function call and a @code{set} to indicate the
4746adjustment made to the frame pointer.
4747
df2a54e9 4748For machines where @code{RETURN_POPS_ARGS} can be nonzero, the use of these
03dda8e3
RK
4749patterns increases the number of functions for which the frame pointer
4750can be eliminated, if desired.
4751
4752@cindex @code{untyped_call} instruction pattern
4753@item @samp{untyped_call}
4754Subroutine call instruction returning a value of any type. Operand 0 is
4755the function to call; operand 1 is a memory location where the result of
4756calling the function is to be stored; operand 2 is a @code{parallel}
4757expression where each element is a @code{set} expression that indicates
4758the saving of a function return value into the result block.
4759
4760This instruction pattern should be defined to support
4761@code{__builtin_apply} on machines where special instructions are needed
4762to call a subroutine with arbitrary arguments or to save the value
4763returned. This instruction pattern is required on machines that have
e979f9e8
JM
4764multiple registers that can hold a return value
4765(i.e.@: @code{FUNCTION_VALUE_REGNO_P} is true for more than one register).
03dda8e3
RK
4766
4767@cindex @code{return} instruction pattern
4768@item @samp{return}
4769Subroutine return instruction. This instruction pattern name should be
4770defined only if a single instruction can do all the work of returning
4771from a function.
4772
4773Like the @samp{mov@var{m}} patterns, this pattern is also used after the
4774RTL generation phase. In this case it is to support machines where
4775multiple instructions are usually needed to return from a function, but
4776some class of functions only requires one instruction to implement a
4777return. Normally, the applicable functions are those which do not need
4778to save any registers or allocate stack space.
4779
4780@findex reload_completed
4781@findex leaf_function_p
4782For such machines, the condition specified in this pattern should only
df2a54e9 4783be true when @code{reload_completed} is nonzero and the function's
03dda8e3
RK
4784epilogue would only be a single instruction. For machines with register
4785windows, the routine @code{leaf_function_p} may be used to determine if
4786a register window push is required.
4787
4788Machines that have conditional return instructions should define patterns
4789such as
4790
4791@smallexample
4792(define_insn ""
4793 [(set (pc)
4794 (if_then_else (match_operator
4795 0 "comparison_operator"
4796 [(cc0) (const_int 0)])
4797 (return)
4798 (pc)))]
4799 "@var{condition}"
4800 "@dots{}")
4801@end smallexample
4802
4803where @var{condition} would normally be the same condition specified on the
4804named @samp{return} pattern.
4805
4806@cindex @code{untyped_return} instruction pattern
4807@item @samp{untyped_return}
4808Untyped subroutine return instruction. This instruction pattern should
4809be defined to support @code{__builtin_return} on machines where special
4810instructions are needed to return a value of any type.
4811
4812Operand 0 is a memory location where the result of calling a function
4813with @code{__builtin_apply} is stored; operand 1 is a @code{parallel}
4814expression where each element is a @code{set} expression that indicates
4815the restoring of a function return value from the result block.
4816
4817@cindex @code{nop} instruction pattern
4818@item @samp{nop}
4819No-op instruction. This instruction pattern name should always be defined
4820to output a no-op in assembler code. @code{(const_int 0)} will do as an
4821RTL pattern.
4822
4823@cindex @code{indirect_jump} instruction pattern
4824@item @samp{indirect_jump}
4825An instruction to jump to an address which is operand zero.
4826This pattern name is mandatory on all machines.
4827
4828@cindex @code{casesi} instruction pattern
4829@item @samp{casesi}
4830Instruction to jump through a dispatch table, including bounds checking.
4831This instruction takes five operands:
4832
4833@enumerate
4834@item
4835The index to dispatch on, which has mode @code{SImode}.
4836
4837@item
4838The lower bound for indices in the table, an integer constant.
4839
4840@item
4841The total range of indices in the table---the largest index
4842minus the smallest one (both inclusive).
4843
4844@item
4845A label that precedes the table itself.
4846
4847@item
4848A label to jump to if the index has a value outside the bounds.
03dda8e3
RK
4849@end enumerate
4850
e4ae5e77 4851The table is an @code{addr_vec} or @code{addr_diff_vec} inside of a
03dda8e3
RK
4852@code{jump_insn}. The number of elements in the table is one plus the
4853difference between the upper bound and the lower bound.
4854
4855@cindex @code{tablejump} instruction pattern
4856@item @samp{tablejump}
4857Instruction to jump to a variable address. This is a low-level
4858capability which can be used to implement a dispatch table when there
4859is no @samp{casesi} pattern.
4860
4861This pattern requires two operands: the address or offset, and a label
4862which should immediately precede the jump table. If the macro
f1f5f142
JL
4863@code{CASE_VECTOR_PC_RELATIVE} evaluates to a nonzero value then the first
4864operand is an offset which counts from the address of the table; otherwise,
4865it is an absolute address to jump to. In either case, the first operand has
03dda8e3
RK
4866mode @code{Pmode}.
4867
4868The @samp{tablejump} insn is always the last insn before the jump
4869table it uses. Its assembler code normally has no need to use the
4870second operand, but you should incorporate it in the RTL pattern so
4871that the jump optimizer will not delete the table as unreachable code.
4872
6e4fcc95
MH
4873
4874@cindex @code{decrement_and_branch_until_zero} instruction pattern
4875@item @samp{decrement_and_branch_until_zero}
4876Conditional branch instruction that decrements a register and
df2a54e9 4877jumps if the register is nonzero. Operand 0 is the register to
6e4fcc95 4878decrement and test; operand 1 is the label to jump to if the
df2a54e9 4879register is nonzero. @xref{Looping Patterns}.
6e4fcc95
MH
4880
4881This optional instruction pattern is only used by the combiner,
4882typically for loops reversed by the loop optimizer when strength
4883reduction is enabled.
4884
4885@cindex @code{doloop_end} instruction pattern
4886@item @samp{doloop_end}
4887Conditional branch instruction that decrements a register and jumps if
df2a54e9 4888the register is nonzero. This instruction takes five operands: Operand
6e4fcc95
MH
48890 is the register to decrement and test; operand 1 is the number of loop
4890iterations as a @code{const_int} or @code{const0_rtx} if this cannot be
4891determined until run-time; operand 2 is the actual or estimated maximum
4892number of iterations as a @code{const_int}; operand 3 is the number of
4893enclosed loops as a @code{const_int} (an innermost loop has a value of
df2a54e9 48941); operand 4 is the label to jump to if the register is nonzero.
5c25e11d 4895@xref{Looping Patterns}.
6e4fcc95
MH
4896
4897This optional instruction pattern should be defined for machines with
4898low-overhead looping instructions as the loop optimizer will try to
4899modify suitable loops to utilize it. If nested low-overhead looping is
4900not supported, use a @code{define_expand} (@pxref{Expander Definitions})
4901and make the pattern fail if operand 3 is not @code{const1_rtx}.
4902Similarly, if the actual or estimated maximum number of iterations is
4903too large for this instruction, make it fail.
4904
4905@cindex @code{doloop_begin} instruction pattern
4906@item @samp{doloop_begin}
4907Companion instruction to @code{doloop_end} required for machines that
c21cd8b1
JM
4908need to perform some initialization, such as loading special registers
4909used by a low-overhead looping instruction. If initialization insns do
6e4fcc95
MH
4910not always need to be emitted, use a @code{define_expand}
4911(@pxref{Expander Definitions}) and make it fail.
4912
4913
03dda8e3
RK
4914@cindex @code{canonicalize_funcptr_for_compare} instruction pattern
4915@item @samp{canonicalize_funcptr_for_compare}
4916Canonicalize the function pointer in operand 1 and store the result
4917into operand 0.
4918
4919Operand 0 is always a @code{reg} and has mode @code{Pmode}; operand 1
4920may be a @code{reg}, @code{mem}, @code{symbol_ref}, @code{const_int}, etc
4921and also has mode @code{Pmode}.
4922
4923Canonicalization of a function pointer usually involves computing
4924the address of the function which would be called if the function
4925pointer were used in an indirect call.
4926
4927Only define this pattern if function pointers on the target machine
4928can have different values but still call the same function when
4929used in an indirect call.
4930
4931@cindex @code{save_stack_block} instruction pattern
4932@cindex @code{save_stack_function} instruction pattern
4933@cindex @code{save_stack_nonlocal} instruction pattern
4934@cindex @code{restore_stack_block} instruction pattern
4935@cindex @code{restore_stack_function} instruction pattern
4936@cindex @code{restore_stack_nonlocal} instruction pattern
4937@item @samp{save_stack_block}
4938@itemx @samp{save_stack_function}
4939@itemx @samp{save_stack_nonlocal}
4940@itemx @samp{restore_stack_block}
4941@itemx @samp{restore_stack_function}
4942@itemx @samp{restore_stack_nonlocal}
4943Most machines save and restore the stack pointer by copying it to or
4944from an object of mode @code{Pmode}. Do not define these patterns on
4945such machines.
4946
4947Some machines require special handling for stack pointer saves and
4948restores. On those machines, define the patterns corresponding to the
4949non-standard cases by using a @code{define_expand} (@pxref{Expander
4950Definitions}) that produces the required insns. The three types of
4951saves and restores are:
4952
4953@enumerate
4954@item
4955@samp{save_stack_block} saves the stack pointer at the start of a block
4956that allocates a variable-sized object, and @samp{restore_stack_block}
4957restores the stack pointer when the block is exited.
4958
4959@item
4960@samp{save_stack_function} and @samp{restore_stack_function} do a
4961similar job for the outermost block of a function and are used when the
4962function allocates variable-sized objects or calls @code{alloca}. Only
4963the epilogue uses the restored stack pointer, allowing a simpler save or
4964restore sequence on some machines.
4965
4966@item
4967@samp{save_stack_nonlocal} is used in functions that contain labels
4968branched to by nested functions. It saves the stack pointer in such a
4969way that the inner function can use @samp{restore_stack_nonlocal} to
4970restore the stack pointer. The compiler generates code to restore the
4971frame and argument pointer registers, but some machines require saving
4972and restoring additional data such as register window information or
4973stack backchains. Place insns in these patterns to save and restore any
4974such required data.
4975@end enumerate
4976
4977When saving the stack pointer, operand 0 is the save area and operand 1
73c8090f
DE
4978is the stack pointer. The mode used to allocate the save area defaults
4979to @code{Pmode} but you can override that choice by defining the
7e390c9d 4980@code{STACK_SAVEAREA_MODE} macro (@pxref{Storage Layout}). You must
73c8090f
DE
4981specify an integral mode, or @code{VOIDmode} if no save area is needed
4982for a particular type of save (either because no save is needed or
4983because a machine-specific save area can be used). Operand 0 is the
4984stack pointer and operand 1 is the save area for restore operations. If
4985@samp{save_stack_block} is defined, operand 0 must not be
4986@code{VOIDmode} since these saves can be arbitrarily nested.
03dda8e3
RK
4987
4988A save area is a @code{mem} that is at a constant offset from
4989@code{virtual_stack_vars_rtx} when the stack pointer is saved for use by
4990nonlocal gotos and a @code{reg} in the other two cases.
4991
4992@cindex @code{allocate_stack} instruction pattern
4993@item @samp{allocate_stack}
72938a4c 4994Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 1 from
03dda8e3
RK
4995the stack pointer to create space for dynamically allocated data.
4996
72938a4c
MM
4997Store the resultant pointer to this space into operand 0. If you
4998are allocating space from the main stack, do this by emitting a
4999move insn to copy @code{virtual_stack_dynamic_rtx} to operand 0.
5000If you are allocating the space elsewhere, generate code to copy the
5001location of the space to operand 0. In the latter case, you must
956d6950 5002ensure this space gets freed when the corresponding space on the main
72938a4c
MM
5003stack is free.
5004
03dda8e3
RK
5005Do not define this pattern if all that must be done is the subtraction.
5006Some machines require other operations such as stack probes or
5007maintaining the back chain. Define this pattern to emit those
5008operations in addition to updating the stack pointer.
5009
861bb6c1
JL
5010@cindex @code{check_stack} instruction pattern
5011@item @samp{check_stack}
5012If stack checking cannot be done on your system by probing the stack with
5013a load or store instruction (@pxref{Stack Checking}), define this pattern
5014to perform the needed check and signaling an error if the stack
5015has overflowed. The single operand is the location in the stack furthest
5016from the current stack pointer that you need to validate. Normally,
5017on machines where this pattern is needed, you would obtain the stack
5018limit from a global or thread-specific variable or register.
5019
03dda8e3
RK
5020@cindex @code{nonlocal_goto} instruction pattern
5021@item @samp{nonlocal_goto}
5022Emit code to generate a non-local goto, e.g., a jump from one function
5023to a label in an outer function. This pattern has four arguments,
5024each representing a value to be used in the jump. The first
45bb86fd 5025argument is to be loaded into the frame pointer, the second is
03dda8e3
RK
5026the address to branch to (code to dispatch to the actual label),
5027the third is the address of a location where the stack is saved,
5028and the last is the address of the label, to be placed in the
5029location for the incoming static chain.
5030
f0523f02 5031On most machines you need not define this pattern, since GCC will
03dda8e3
RK
5032already generate the correct code, which is to load the frame pointer
5033and static chain, restore the stack (using the
5034@samp{restore_stack_nonlocal} pattern, if defined), and jump indirectly
5035to the dispatcher. You need only define this pattern if this code will
5036not work on your machine.
5037
5038@cindex @code{nonlocal_goto_receiver} instruction pattern
5039@item @samp{nonlocal_goto_receiver}
5040This pattern, if defined, contains code needed at the target of a
161d7b59 5041nonlocal goto after the code already generated by GCC@. You will not
03dda8e3
RK
5042normally need to define this pattern. A typical reason why you might
5043need this pattern is if some value, such as a pointer to a global table,
c30ddbc9 5044must be restored when the frame pointer is restored. Note that a nonlocal
89bcce1b 5045goto only occurs within a unit-of-translation, so a global table pointer
c30ddbc9
RH
5046that is shared by all functions of a given module need not be restored.
5047There are no arguments.
861bb6c1
JL
5048
5049@cindex @code{exception_receiver} instruction pattern
5050@item @samp{exception_receiver}
5051This pattern, if defined, contains code needed at the site of an
5052exception handler that isn't needed at the site of a nonlocal goto. You
5053will not normally need to define this pattern. A typical reason why you
5054might need this pattern is if some value, such as a pointer to a global
5055table, must be restored after control flow is branched to the handler of
5056an exception. There are no arguments.
c85f7c16 5057
c30ddbc9
RH
5058@cindex @code{builtin_setjmp_setup} instruction pattern
5059@item @samp{builtin_setjmp_setup}
5060This pattern, if defined, contains additional code needed to initialize
5061the @code{jmp_buf}. You will not normally need to define this pattern.
5062A typical reason why you might need this pattern is if some value, such
5063as a pointer to a global table, must be restored. Though it is
5064preferred that the pointer value be recalculated if possible (given the
5065address of a label for instance). The single argument is a pointer to
5066the @code{jmp_buf}. Note that the buffer is five words long and that
5067the first three are normally used by the generic mechanism.
5068
c85f7c16
JL
5069@cindex @code{builtin_setjmp_receiver} instruction pattern
5070@item @samp{builtin_setjmp_receiver}
e4ae5e77 5071This pattern, if defined, contains code needed at the site of a
c771326b 5072built-in setjmp that isn't needed at the site of a nonlocal goto. You
c85f7c16
JL
5073will not normally need to define this pattern. A typical reason why you
5074might need this pattern is if some value, such as a pointer to a global
c30ddbc9
RH
5075table, must be restored. It takes one argument, which is the label
5076to which builtin_longjmp transfered control; this pattern may be emitted
5077at a small offset from that label.
5078
5079@cindex @code{builtin_longjmp} instruction pattern
5080@item @samp{builtin_longjmp}
5081This pattern, if defined, performs the entire action of the longjmp.
5082You will not normally need to define this pattern unless you also define
5083@code{builtin_setjmp_setup}. The single argument is a pointer to the
5084@code{jmp_buf}.
f69864aa 5085
52a11cbf
RH
5086@cindex @code{eh_return} instruction pattern
5087@item @samp{eh_return}
f69864aa 5088This pattern, if defined, affects the way @code{__builtin_eh_return},
52a11cbf
RH
5089and thence the call frame exception handling library routines, are
5090built. It is intended to handle non-trivial actions needed along
5091the abnormal return path.
5092
34dc173c 5093The address of the exception handler to which the function should return
daf2f129 5094is passed as operand to this pattern. It will normally need to copied by
34dc173c
UW
5095the pattern to some special register or memory location.
5096If the pattern needs to determine the location of the target call
5097frame in order to do so, it may use @code{EH_RETURN_STACKADJ_RTX},
5098if defined; it will have already been assigned.
5099
5100If this pattern is not defined, the default action will be to simply
5101copy the return address to @code{EH_RETURN_HANDLER_RTX}. Either
5102that macro or this pattern needs to be defined if call frame exception
5103handling is to be used.
0b433de6
JL
5104
5105@cindex @code{prologue} instruction pattern
17b53c33 5106@anchor{prologue instruction pattern}
0b433de6
JL
5107@item @samp{prologue}
5108This pattern, if defined, emits RTL for entry to a function. The function
b192711e 5109entry is responsible for setting up the stack frame, initializing the frame
0b433de6
JL
5110pointer register, saving callee saved registers, etc.
5111
5112Using a prologue pattern is generally preferred over defining
17b53c33 5113@code{TARGET_ASM_FUNCTION_PROLOGUE} to emit assembly code for the prologue.
0b433de6
JL
5114
5115The @code{prologue} pattern is particularly useful for targets which perform
5116instruction scheduling.
5117
5118@cindex @code{epilogue} instruction pattern
17b53c33 5119@anchor{epilogue instruction pattern}
0b433de6 5120@item @samp{epilogue}
396ad517 5121This pattern emits RTL for exit from a function. The function
b192711e 5122exit is responsible for deallocating the stack frame, restoring callee saved
0b433de6
JL
5123registers and emitting the return instruction.
5124
5125Using an epilogue pattern is generally preferred over defining
17b53c33 5126@code{TARGET_ASM_FUNCTION_EPILOGUE} to emit assembly code for the epilogue.
0b433de6
JL
5127
5128The @code{epilogue} pattern is particularly useful for targets which perform
5129instruction scheduling or which have delay slots for their return instruction.
5130
5131@cindex @code{sibcall_epilogue} instruction pattern
5132@item @samp{sibcall_epilogue}
5133This pattern, if defined, emits RTL for exit from a function without the final
5134branch back to the calling function. This pattern will be emitted before any
5135sibling call (aka tail call) sites.
5136
5137The @code{sibcall_epilogue} pattern must not clobber any arguments used for
5138parameter passing or any stack slots for arguments passed to the current
ebb48a4d 5139function.
a157febd
GK
5140
5141@cindex @code{trap} instruction pattern
5142@item @samp{trap}
5143This pattern, if defined, signals an error, typically by causing some
5144kind of signal to be raised. Among other places, it is used by the Java
c771326b 5145front end to signal `invalid array index' exceptions.
a157febd 5146
f90b7a5a
PB
5147@cindex @code{ctrap@var{MM}4} instruction pattern
5148@item @samp{ctrap@var{MM}4}
a157febd 5149Conditional trap instruction. Operand 0 is a piece of RTL which
f90b7a5a
PB
5150performs a comparison, and operands 1 and 2 are the arms of the
5151comparison. Operand 3 is the trap code, an integer.
a157febd 5152
f90b7a5a 5153A typical @code{ctrap} pattern looks like
a157febd
GK
5154
5155@smallexample
f90b7a5a 5156(define_insn "ctrapsi4"
ebb48a4d 5157 [(trap_if (match_operator 0 "trap_operator"
f90b7a5a
PB
5158 [(match_operand 1 "register_operand")
5159 (match_operand 2 "immediate_operand")])
5160 (match_operand 3 "const_int_operand" "i"))]
a157febd
GK
5161 ""
5162 "@dots{}")
5163@end smallexample
5164
e83d297b
JJ
5165@cindex @code{prefetch} instruction pattern
5166@item @samp{prefetch}
5167
5168This pattern, if defined, emits code for a non-faulting data prefetch
5169instruction. Operand 0 is the address of the memory to prefetch. Operand 1
5170is a constant 1 if the prefetch is preparing for a write to the memory
5171address, or a constant 0 otherwise. Operand 2 is the expected degree of
5172temporal locality of the data and is a value between 0 and 3, inclusive; 0
5173means that the data has no temporal locality, so it need not be left in the
5174cache after the access; 3 means that the data has a high degree of temporal
5175locality and should be left in all levels of cache possible; 1 and 2 mean,
5176respectively, a low or moderate degree of temporal locality.
5177
5178Targets that do not support write prefetches or locality hints can ignore
5179the values of operands 1 and 2.
5180
b6bd3371
DE
5181@cindex @code{blockage} instruction pattern
5182@item @samp{blockage}
5183
5184This pattern defines a pseudo insn that prevents the instruction
5185scheduler from moving instructions across the boundary defined by the
5186blockage insn. Normally an UNSPEC_VOLATILE pattern.
5187
48ae6c13
RH
5188@cindex @code{memory_barrier} instruction pattern
5189@item @samp{memory_barrier}
5190
5191If the target memory model is not fully synchronous, then this pattern
5192should be defined to an instruction that orders both loads and stores
5193before the instruction with respect to loads and stores after the instruction.
5194This pattern has no operands.
5195
5196@cindex @code{sync_compare_and_swap@var{mode}} instruction pattern
5197@item @samp{sync_compare_and_swap@var{mode}}
5198
5199This pattern, if defined, emits code for an atomic compare-and-swap
5200operation. Operand 1 is the memory on which the atomic operation is
5201performed. Operand 2 is the ``old'' value to be compared against the
5202current contents of the memory location. Operand 3 is the ``new'' value
5203to store in the memory if the compare succeeds. Operand 0 is the result
915167f5
GK
5204of the operation; it should contain the contents of the memory
5205before the operation. If the compare succeeds, this should obviously be
5206a copy of operand 2.
48ae6c13
RH
5207
5208This pattern must show that both operand 0 and operand 1 are modified.
5209
915167f5
GK
5210This pattern must issue any memory barrier instructions such that all
5211memory operations before the atomic operation occur before the atomic
5212operation and all memory operations after the atomic operation occur
5213after the atomic operation.
48ae6c13 5214
4a77c72b 5215For targets where the success or failure of the compare-and-swap
f90b7a5a
PB
5216operation is available via the status flags, it is possible to
5217avoid a separate compare operation and issue the subsequent
5218branch or store-flag operation immediately after the compare-and-swap.
5219To this end, GCC will look for a @code{MODE_CC} set in the
5220output of @code{sync_compare_and_swap@var{mode}}; if the machine
5221description includes such a set, the target should also define special
5222@code{cbranchcc4} and/or @code{cstorecc4} instructions. GCC will then
5223be able to take the destination of the @code{MODE_CC} set and pass it
5224to the @code{cbranchcc4} or @code{cstorecc4} pattern as the first
5225operand of the comparison (the second will be @code{(const_int 0)}).
48ae6c13
RH
5226
5227@cindex @code{sync_add@var{mode}} instruction pattern
5228@cindex @code{sync_sub@var{mode}} instruction pattern
5229@cindex @code{sync_ior@var{mode}} instruction pattern
5230@cindex @code{sync_and@var{mode}} instruction pattern
5231@cindex @code{sync_xor@var{mode}} instruction pattern
5232@cindex @code{sync_nand@var{mode}} instruction pattern
5233@item @samp{sync_add@var{mode}}, @samp{sync_sub@var{mode}}
5234@itemx @samp{sync_ior@var{mode}}, @samp{sync_and@var{mode}}
5235@itemx @samp{sync_xor@var{mode}}, @samp{sync_nand@var{mode}}
5236
5237These patterns emit code for an atomic operation on memory.
5238Operand 0 is the memory on which the atomic operation is performed.
5239Operand 1 is the second operand to the binary operator.
5240
915167f5
GK
5241This pattern must issue any memory barrier instructions such that all
5242memory operations before the atomic operation occur before the atomic
5243operation and all memory operations after the atomic operation occur
5244after the atomic operation.
48ae6c13
RH
5245
5246If these patterns are not defined, the operation will be constructed
5247from a compare-and-swap operation, if defined.
5248
5249@cindex @code{sync_old_add@var{mode}} instruction pattern
5250@cindex @code{sync_old_sub@var{mode}} instruction pattern
5251@cindex @code{sync_old_ior@var{mode}} instruction pattern
5252@cindex @code{sync_old_and@var{mode}} instruction pattern
5253@cindex @code{sync_old_xor@var{mode}} instruction pattern
5254@cindex @code{sync_old_nand@var{mode}} instruction pattern
5255@item @samp{sync_old_add@var{mode}}, @samp{sync_old_sub@var{mode}}
5256@itemx @samp{sync_old_ior@var{mode}}, @samp{sync_old_and@var{mode}}
5257@itemx @samp{sync_old_xor@var{mode}}, @samp{sync_old_nand@var{mode}}
5258
5259These patterns are emit code for an atomic operation on memory,
5260and return the value that the memory contained before the operation.
5261Operand 0 is the result value, operand 1 is the memory on which the
5262atomic operation is performed, and operand 2 is the second operand
5263to the binary operator.
5264
915167f5
GK
5265This pattern must issue any memory barrier instructions such that all
5266memory operations before the atomic operation occur before the atomic
5267operation and all memory operations after the atomic operation occur
5268after the atomic operation.
48ae6c13
RH
5269
5270If these patterns are not defined, the operation will be constructed
5271from a compare-and-swap operation, if defined.
5272
5273@cindex @code{sync_new_add@var{mode}} instruction pattern
5274@cindex @code{sync_new_sub@var{mode}} instruction pattern
5275@cindex @code{sync_new_ior@var{mode}} instruction pattern
5276@cindex @code{sync_new_and@var{mode}} instruction pattern
5277@cindex @code{sync_new_xor@var{mode}} instruction pattern
5278@cindex @code{sync_new_nand@var{mode}} instruction pattern
5279@item @samp{sync_new_add@var{mode}}, @samp{sync_new_sub@var{mode}}
5280@itemx @samp{sync_new_ior@var{mode}}, @samp{sync_new_and@var{mode}}
5281@itemx @samp{sync_new_xor@var{mode}}, @samp{sync_new_nand@var{mode}}
5282
5283These patterns are like their @code{sync_old_@var{op}} counterparts,
5284except that they return the value that exists in the memory location
5285after the operation, rather than before the operation.
5286
5287@cindex @code{sync_lock_test_and_set@var{mode}} instruction pattern
5288@item @samp{sync_lock_test_and_set@var{mode}}
5289
5290This pattern takes two forms, based on the capabilities of the target.
5291In either case, operand 0 is the result of the operand, operand 1 is
5292the memory on which the atomic operation is performed, and operand 2
5293is the value to set in the lock.
5294
5295In the ideal case, this operation is an atomic exchange operation, in
5296which the previous value in memory operand is copied into the result
5297operand, and the value operand is stored in the memory operand.
5298
5299For less capable targets, any value operand that is not the constant 1
5300should be rejected with @code{FAIL}. In this case the target may use
5301an atomic test-and-set bit operation. The result operand should contain
53021 if the bit was previously set and 0 if the bit was previously clear.
5303The true contents of the memory operand are implementation defined.
5304
5305This pattern must issue any memory barrier instructions such that the
915167f5
GK
5306pattern as a whole acts as an acquire barrier, that is all memory
5307operations after the pattern do not occur until the lock is acquired.
48ae6c13
RH
5308
5309If this pattern is not defined, the operation will be constructed from
5310a compare-and-swap operation, if defined.
5311
5312@cindex @code{sync_lock_release@var{mode}} instruction pattern
5313@item @samp{sync_lock_release@var{mode}}
5314
5315This pattern, if defined, releases a lock set by
5316@code{sync_lock_test_and_set@var{mode}}. Operand 0 is the memory
8635a919
GK
5317that contains the lock; operand 1 is the value to store in the lock.
5318
5319If the target doesn't implement full semantics for
5320@code{sync_lock_test_and_set@var{mode}}, any value operand which is not
5321the constant 0 should be rejected with @code{FAIL}, and the true contents
5322of the memory operand are implementation defined.
48ae6c13
RH
5323
5324This pattern must issue any memory barrier instructions such that the
915167f5
GK
5325pattern as a whole acts as a release barrier, that is the lock is
5326released only after all previous memory operations have completed.
48ae6c13
RH
5327
5328If this pattern is not defined, then a @code{memory_barrier} pattern
8635a919 5329will be emitted, followed by a store of the value to the memory operand.
48ae6c13 5330
7d69de61
RH
5331@cindex @code{stack_protect_set} instruction pattern
5332@item @samp{stack_protect_set}
5333
5334This pattern, if defined, moves a @code{Pmode} value from the memory
5335in operand 1 to the memory in operand 0 without leaving the value in
5336a register afterward. This is to avoid leaking the value some place
759915ca 5337that an attacker might use to rewrite the stack guard slot after
7d69de61
RH
5338having clobbered it.
5339
5340If this pattern is not defined, then a plain move pattern is generated.
5341
5342@cindex @code{stack_protect_test} instruction pattern
5343@item @samp{stack_protect_test}
5344
5345This pattern, if defined, compares a @code{Pmode} value from the
5346memory in operand 1 with the memory in operand 0 without leaving the
3aebbe5f
JJ
5347value in a register afterward and branches to operand 2 if the values
5348weren't equal.
7d69de61 5349
3aebbe5f
JJ
5350If this pattern is not defined, then a plain compare pattern and
5351conditional branch pattern is used.
7d69de61 5352
677feb77
DD
5353@cindex @code{clear_cache} instruction pattern
5354@item @samp{clear_cache}
5355
5356This pattern, if defined, flushes the instruction cache for a region of
5357memory. The region is bounded to by the Pmode pointers in operand 0
5358inclusive and operand 1 exclusive.
5359
5360If this pattern is not defined, a call to the library function
5361@code{__clear_cache} is used.
5362
03dda8e3
RK
5363@end table
5364
a5249a21
HPN
5365@end ifset
5366@c Each of the following nodes are wrapped in separate
5367@c "@ifset INTERNALS" to work around memory limits for the default
5368@c configuration in older tetex distributions. Known to not work:
5369@c tetex-1.0.7, known to work: tetex-2.0.2.
5370@ifset INTERNALS
03dda8e3
RK
5371@node Pattern Ordering
5372@section When the Order of Patterns Matters
5373@cindex Pattern Ordering
5374@cindex Ordering of Patterns
5375
5376Sometimes an insn can match more than one instruction pattern. Then the
5377pattern that appears first in the machine description is the one used.
5378Therefore, more specific patterns (patterns that will match fewer things)
5379and faster instructions (those that will produce better code when they
5380do match) should usually go first in the description.
5381
5382In some cases the effect of ordering the patterns can be used to hide
5383a pattern when it is not valid. For example, the 68000 has an
5384instruction for converting a fullword to floating point and another
5385for converting a byte to floating point. An instruction converting
5386an integer to floating point could match either one. We put the
5387pattern to convert the fullword first to make sure that one will
5388be used rather than the other. (Otherwise a large integer might
5389be generated as a single-byte immediate quantity, which would not work.)
5390Instead of using this pattern ordering it would be possible to make the
5391pattern for convert-a-byte smart enough to deal properly with any
5392constant value.
5393
a5249a21
HPN
5394@end ifset
5395@ifset INTERNALS
03dda8e3
RK
5396@node Dependent Patterns
5397@section Interdependence of Patterns
5398@cindex Dependent Patterns
5399@cindex Interdependence of Patterns
5400
03dda8e3
RK
5401In some cases machines support instructions identical except for the
5402machine mode of one or more operands. For example, there may be
5403``sign-extend halfword'' and ``sign-extend byte'' instructions whose
5404patterns are
5405
3ab51846 5406@smallexample
03dda8e3
RK
5407(set (match_operand:SI 0 @dots{})
5408 (extend:SI (match_operand:HI 1 @dots{})))
5409
5410(set (match_operand:SI 0 @dots{})
5411 (extend:SI (match_operand:QI 1 @dots{})))
3ab51846 5412@end smallexample
03dda8e3
RK
5413
5414@noindent
5415Constant integers do not specify a machine mode, so an instruction to
5416extend a constant value could match either pattern. The pattern it
5417actually will match is the one that appears first in the file. For correct
5418results, this must be the one for the widest possible mode (@code{HImode},
5419here). If the pattern matches the @code{QImode} instruction, the results
5420will be incorrect if the constant value does not actually fit that mode.
5421
5422Such instructions to extend constants are rarely generated because they are
5423optimized away, but they do occasionally happen in nonoptimized
5424compilations.
5425
5426If a constraint in a pattern allows a constant, the reload pass may
5427replace a register with a constant permitted by the constraint in some
5428cases. Similarly for memory references. Because of this substitution,
5429you should not provide separate patterns for increment and decrement
5430instructions. Instead, they should be generated from the same pattern
5431that supports register-register add insns by examining the operands and
5432generating the appropriate machine instruction.
5433
a5249a21
HPN
5434@end ifset
5435@ifset INTERNALS
03dda8e3
RK
5436@node Jump Patterns
5437@section Defining Jump Instruction Patterns
5438@cindex jump instruction patterns
5439@cindex defining jump instruction patterns
5440
f90b7a5a
PB
5441GCC does not assume anything about how the machine realizes jumps.
5442The machine description should define a single pattern, usually
5443a @code{define_expand}, which expands to all the required insns.
5444
5445Usually, this would be a comparison insn to set the condition code
5446and a separate branch insn testing the condition code and branching
5447or not according to its value. For many machines, however,
5448separating compares and branches is limiting, which is why the
5449more flexible approach with one @code{define_expand} is used in GCC.
5450The machine description becomes clearer for architectures that
5451have compare-and-branch instructions but no condition code. It also
5452works better when different sets of comparison operators are supported
5453by different kinds of conditional branches (e.g. integer vs. floating-point),
5454or by conditional branches with respect to conditional stores.
5455
5456Two separate insns are always used if the machine description represents
5457a condition code register using the legacy RTL expression @code{(cc0)},
5458and on most machines that use a separate condition code register
5459(@pxref{Condition Code}). For machines that use @code{(cc0)}, in
5460fact, the set and use of the condition code must be separate and
5461adjacent@footnote{@code{note} insns can separate them, though.}, thus
5462allowing flags in @code{cc_status} to be used (@pxref{Condition Code}) and
5463so that the comparison and branch insns could be located from each other
5464by using the functions @code{prev_cc0_setter} and @code{next_cc0_user}.
5465
5466Even in this case having a single entry point for conditional branches
5467is advantageous, because it handles equally well the case where a single
5468comparison instruction records the results of both signed and unsigned
5469comparison of the given operands (with the branch insns coming in distinct
5470signed and unsigned flavors) as in the x86 or SPARC, and the case where
5471there are distinct signed and unsigned compare instructions and only
5472one set of conditional branch instructions as in the PowerPC.
03dda8e3 5473
a5249a21
HPN
5474@end ifset
5475@ifset INTERNALS
6e4fcc95
MH
5476@node Looping Patterns
5477@section Defining Looping Instruction Patterns
5478@cindex looping instruction patterns
5479@cindex defining looping instruction patterns
5480
05713b80 5481Some machines have special jump instructions that can be utilized to
6e4fcc95
MH
5482make loops more efficient. A common example is the 68000 @samp{dbra}
5483instruction which performs a decrement of a register and a branch if the
5484result was greater than zero. Other machines, in particular digital
5485signal processors (DSPs), have special block repeat instructions to
5486provide low-overhead loop support. For example, the TI TMS320C3x/C4x
5487DSPs have a block repeat instruction that loads special registers to
5488mark the top and end of a loop and to count the number of loop
5489iterations. This avoids the need for fetching and executing a
c771326b 5490@samp{dbra}-like instruction and avoids pipeline stalls associated with
6e4fcc95
MH
5491the jump.
5492
9c34dbbf
ZW
5493GCC has three special named patterns to support low overhead looping.
5494They are @samp{decrement_and_branch_until_zero}, @samp{doloop_begin},
5495and @samp{doloop_end}. The first pattern,
6e4fcc95
MH
5496@samp{decrement_and_branch_until_zero}, is not emitted during RTL
5497generation but may be emitted during the instruction combination phase.
5498This requires the assistance of the loop optimizer, using information
5499collected during strength reduction, to reverse a loop to count down to
5500zero. Some targets also require the loop optimizer to add a
5501@code{REG_NONNEG} note to indicate that the iteration count is always
5502positive. This is needed if the target performs a signed loop
5503termination test. For example, the 68000 uses a pattern similar to the
5504following for its @code{dbra} instruction:
5505
5506@smallexample
5507@group
5508(define_insn "decrement_and_branch_until_zero"
5509 [(set (pc)
6ccde948
RW
5510 (if_then_else
5511 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
5512 (const_int -1))
5513 (const_int 0))
5514 (label_ref (match_operand 1 "" ""))
5515 (pc)))
6e4fcc95 5516 (set (match_dup 0)
6ccde948
RW
5517 (plus:SI (match_dup 0)
5518 (const_int -1)))]
6e4fcc95 5519 "find_reg_note (insn, REG_NONNEG, 0)"
630d3d5a 5520 "@dots{}")
6e4fcc95
MH
5521@end group
5522@end smallexample
5523
5524Note that since the insn is both a jump insn and has an output, it must
5525deal with its own reloads, hence the `m' constraints. Also note that
5526since this insn is generated by the instruction combination phase
5527combining two sequential insns together into an implicit parallel insn,
5528the iteration counter needs to be biased by the same amount as the
630d3d5a 5529decrement operation, in this case @minus{}1. Note that the following similar
6e4fcc95
MH
5530pattern will not be matched by the combiner.
5531
5532@smallexample
5533@group
5534(define_insn "decrement_and_branch_until_zero"
5535 [(set (pc)
6ccde948
RW
5536 (if_then_else
5537 (ge (match_operand:SI 0 "general_operand" "+d*am")
5538 (const_int 1))
5539 (label_ref (match_operand 1 "" ""))
5540 (pc)))
6e4fcc95 5541 (set (match_dup 0)
6ccde948
RW
5542 (plus:SI (match_dup 0)
5543 (const_int -1)))]
6e4fcc95 5544 "find_reg_note (insn, REG_NONNEG, 0)"
630d3d5a 5545 "@dots{}")
6e4fcc95
MH
5546@end group
5547@end smallexample
5548
5549The other two special looping patterns, @samp{doloop_begin} and
c21cd8b1 5550@samp{doloop_end}, are emitted by the loop optimizer for certain
6e4fcc95 5551well-behaved loops with a finite number of loop iterations using
ebb48a4d 5552information collected during strength reduction.
6e4fcc95
MH
5553
5554The @samp{doloop_end} pattern describes the actual looping instruction
5555(or the implicit looping operation) and the @samp{doloop_begin} pattern
c21cd8b1 5556is an optional companion pattern that can be used for initialization
6e4fcc95
MH
5557needed for some low-overhead looping instructions.
5558
5559Note that some machines require the actual looping instruction to be
5560emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting
5561the true RTL for a looping instruction at the top of the loop can cause
5562problems with flow analysis. So instead, a dummy @code{doloop} insn is
5563emitted at the end of the loop. The machine dependent reorg pass checks
5564for the presence of this @code{doloop} insn and then searches back to
5565the top of the loop, where it inserts the true looping insn (provided
5566there are no instructions in the loop which would cause problems). Any
5567additional labels can be emitted at this point. In addition, if the
5568desired special iteration counter register was not allocated, this
5569machine dependent reorg pass could emit a traditional compare and jump
5570instruction pair.
5571
5572The essential difference between the
5573@samp{decrement_and_branch_until_zero} and the @samp{doloop_end}
5574patterns is that the loop optimizer allocates an additional pseudo
5575register for the latter as an iteration counter. This pseudo register
5576cannot be used within the loop (i.e., general induction variables cannot
5577be derived from it), however, in many cases the loop induction variable
5578may become redundant and removed by the flow pass.
5579
5580
a5249a21
HPN
5581@end ifset
5582@ifset INTERNALS
03dda8e3
RK
5583@node Insn Canonicalizations
5584@section Canonicalization of Instructions
5585@cindex canonicalization of instructions
5586@cindex insn canonicalization
5587
5588There are often cases where multiple RTL expressions could represent an
5589operation performed by a single machine instruction. This situation is
5590most commonly encountered with logical, branch, and multiply-accumulate
5591instructions. In such cases, the compiler attempts to convert these
5592multiple RTL expressions into a single canonical form to reduce the
5593number of insn patterns required.
5594
5595In addition to algebraic simplifications, following canonicalizations
5596are performed:
5597
5598@itemize @bullet
5599@item
5600For commutative and comparison operators, a constant is always made the
5601second operand. If a machine only supports a constant as the second
5602operand, only patterns that match a constant in the second operand need
5603be supplied.
5604
e3d6e740
GK
5605@item
5606For associative operators, a sequence of operators will always chain
5607to the left; for instance, only the left operand of an integer @code{plus}
5608can itself be a @code{plus}. @code{and}, @code{ior}, @code{xor},
5609@code{plus}, @code{mult}, @code{smin}, @code{smax}, @code{umin}, and
5610@code{umax} are associative when applied to integers, and sometimes to
5611floating-point.
5612
5613@item
03dda8e3
RK
5614@cindex @code{neg}, canonicalization of
5615@cindex @code{not}, canonicalization of
5616@cindex @code{mult}, canonicalization of
5617@cindex @code{plus}, canonicalization of
5618@cindex @code{minus}, canonicalization of
5619For these operators, if only one operand is a @code{neg}, @code{not},
5620@code{mult}, @code{plus}, or @code{minus} expression, it will be the
5621first operand.
5622
16823694
GK
5623@item
5624In combinations of @code{neg}, @code{mult}, @code{plus}, and
5625@code{minus}, the @code{neg} operations (if any) will be moved inside
daf2f129 5626the operations as far as possible. For instance,
16823694 5627@code{(neg (mult A B))} is canonicalized as @code{(mult (neg A) B)}, but
9302a061 5628@code{(plus (mult (neg B) C) A)} is canonicalized as
16823694
GK
5629@code{(minus A (mult B C))}.
5630
03dda8e3
RK
5631@cindex @code{compare}, canonicalization of
5632@item
5633For the @code{compare} operator, a constant is always the second operand
f90b7a5a 5634if the first argument is a condition code register or @code{(cc0)}.
03dda8e3 5635
f90b7a5a 5636@item
03dda8e3
RK
5637An operand of @code{neg}, @code{not}, @code{mult}, @code{plus}, or
5638@code{minus} is made the first operand under the same conditions as
5639above.
5640
921c4418
RIL
5641@item
5642@code{(ltu (plus @var{a} @var{b}) @var{b})} is converted to
5643@code{(ltu (plus @var{a} @var{b}) @var{a})}. Likewise with @code{geu} instead
5644of @code{ltu}.
5645
03dda8e3
RK
5646@item
5647@code{(minus @var{x} (const_int @var{n}))} is converted to
5648@code{(plus @var{x} (const_int @var{-n}))}.
5649
5650@item
5651Within address computations (i.e., inside @code{mem}), a left shift is
5652converted into the appropriate multiplication by a power of two.
5653
5654@cindex @code{ior}, canonicalization of
5655@cindex @code{and}, canonicalization of
5656@cindex De Morgan's law
72938a4c 5657@item
090359d6 5658De Morgan's Law is used to move bitwise negation inside a bitwise
03dda8e3
RK
5659logical-and or logical-or operation. If this results in only one
5660operand being a @code{not} expression, it will be the first one.
5661
5662A machine that has an instruction that performs a bitwise logical-and of one
5663operand with the bitwise negation of the other should specify the pattern
5664for that instruction as
5665
3ab51846 5666@smallexample
03dda8e3
RK
5667(define_insn ""
5668 [(set (match_operand:@var{m} 0 @dots{})
5669 (and:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
5670 (match_operand:@var{m} 2 @dots{})))]
5671 "@dots{}"
5672 "@dots{}")
3ab51846 5673@end smallexample
03dda8e3
RK
5674
5675@noindent
5676Similarly, a pattern for a ``NAND'' instruction should be written
5677
3ab51846 5678@smallexample
03dda8e3
RK
5679(define_insn ""
5680 [(set (match_operand:@var{m} 0 @dots{})
5681 (ior:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
5682 (not:@var{m} (match_operand:@var{m} 2 @dots{}))))]
5683 "@dots{}"
5684 "@dots{}")
3ab51846 5685@end smallexample
03dda8e3
RK
5686
5687In both cases, it is not necessary to include patterns for the many
5688logically equivalent RTL expressions.
5689
5690@cindex @code{xor}, canonicalization of
5691@item
5692The only possible RTL expressions involving both bitwise exclusive-or
5693and bitwise negation are @code{(xor:@var{m} @var{x} @var{y})}
bd819a4a 5694and @code{(not:@var{m} (xor:@var{m} @var{x} @var{y}))}.
03dda8e3
RK
5695
5696@item
5697The sum of three items, one of which is a constant, will only appear in
5698the form
5699
3ab51846 5700@smallexample
03dda8e3 5701(plus:@var{m} (plus:@var{m} @var{x} @var{y}) @var{constant})
3ab51846 5702@end smallexample
03dda8e3 5703
03dda8e3
RK
5704@cindex @code{zero_extract}, canonicalization of
5705@cindex @code{sign_extract}, canonicalization of
5706@item
5707Equality comparisons of a group of bits (usually a single bit) with zero
5708will be written using @code{zero_extract} rather than the equivalent
5709@code{and} or @code{sign_extract} operations.
5710
5711@end itemize
5712
cd16503a
HPN
5713Further canonicalization rules are defined in the function
5714@code{commutative_operand_precedence} in @file{gcc/rtlanal.c}.
5715
a5249a21
HPN
5716@end ifset
5717@ifset INTERNALS
03dda8e3
RK
5718@node Expander Definitions
5719@section Defining RTL Sequences for Code Generation
5720@cindex expander definitions
5721@cindex code generation RTL sequences
5722@cindex defining RTL sequences for code generation
5723
5724On some target machines, some standard pattern names for RTL generation
5725cannot be handled with single insn, but a sequence of RTL insns can
5726represent them. For these target machines, you can write a
161d7b59 5727@code{define_expand} to specify how to generate the sequence of RTL@.
03dda8e3
RK
5728
5729@findex define_expand
5730A @code{define_expand} is an RTL expression that looks almost like a
5731@code{define_insn}; but, unlike the latter, a @code{define_expand} is used
5732only for RTL generation and it can produce more than one RTL insn.
5733
5734A @code{define_expand} RTX has four operands:
5735
5736@itemize @bullet
5737@item
5738The name. Each @code{define_expand} must have a name, since the only
5739use for it is to refer to it by name.
5740
03dda8e3 5741@item
f3a3d0d3
RH
5742The RTL template. This is a vector of RTL expressions representing
5743a sequence of separate instructions. Unlike @code{define_insn}, there
5744is no implicit surrounding @code{PARALLEL}.
03dda8e3
RK
5745
5746@item
5747The condition, a string containing a C expression. This expression is
5748used to express how the availability of this pattern depends on
f0523f02
JM
5749subclasses of target machine, selected by command-line options when GCC
5750is run. This is just like the condition of a @code{define_insn} that
03dda8e3
RK
5751has a standard name. Therefore, the condition (if present) may not
5752depend on the data in the insn being matched, but only the
5753target-machine-type flags. The compiler needs to test these conditions
5754during initialization in order to learn exactly which named instructions
5755are available in a particular run.
5756
5757@item
5758The preparation statements, a string containing zero or more C
5759statements which are to be executed before RTL code is generated from
5760the RTL template.
5761
5762Usually these statements prepare temporary registers for use as
5763internal operands in the RTL template, but they can also generate RTL
5764insns directly by calling routines such as @code{emit_insn}, etc.
5765Any such insns precede the ones that come from the RTL template.
5766@end itemize
5767
5768Every RTL insn emitted by a @code{define_expand} must match some
5769@code{define_insn} in the machine description. Otherwise, the compiler
5770will crash when trying to generate code for the insn or trying to optimize
5771it.
5772
5773The RTL template, in addition to controlling generation of RTL insns,
5774also describes the operands that need to be specified when this pattern
5775is used. In particular, it gives a predicate for each operand.
5776
5777A true operand, which needs to be specified in order to generate RTL from
5778the pattern, should be described with a @code{match_operand} in its first
5779occurrence in the RTL template. This enters information on the operand's
f0523f02 5780predicate into the tables that record such things. GCC uses the
03dda8e3
RK
5781information to preload the operand into a register if that is required for
5782valid RTL code. If the operand is referred to more than once, subsequent
5783references should use @code{match_dup}.
5784
5785The RTL template may also refer to internal ``operands'' which are
5786temporary registers or labels used only within the sequence made by the
5787@code{define_expand}. Internal operands are substituted into the RTL
5788template with @code{match_dup}, never with @code{match_operand}. The
5789values of the internal operands are not passed in as arguments by the
5790compiler when it requests use of this pattern. Instead, they are computed
5791within the pattern, in the preparation statements. These statements
5792compute the values and store them into the appropriate elements of
5793@code{operands} so that @code{match_dup} can find them.
5794
5795There are two special macros defined for use in the preparation statements:
5796@code{DONE} and @code{FAIL}. Use them with a following semicolon,
5797as a statement.
5798
5799@table @code
5800
5801@findex DONE
5802@item DONE
5803Use the @code{DONE} macro to end RTL generation for the pattern. The
5804only RTL insns resulting from the pattern on this occasion will be
5805those already emitted by explicit calls to @code{emit_insn} within the
5806preparation statements; the RTL template will not be generated.
5807
5808@findex FAIL
5809@item FAIL
5810Make the pattern fail on this occasion. When a pattern fails, it means
5811that the pattern was not truly available. The calling routines in the
5812compiler will try other strategies for code generation using other patterns.
5813
5814Failure is currently supported only for binary (addition, multiplication,
c771326b 5815shifting, etc.) and bit-field (@code{extv}, @code{extzv}, and @code{insv})
03dda8e3
RK
5816operations.
5817@end table
5818
55e4756f
DD
5819If the preparation falls through (invokes neither @code{DONE} nor
5820@code{FAIL}), then the @code{define_expand} acts like a
5821@code{define_insn} in that the RTL template is used to generate the
5822insn.
5823
5824The RTL template is not used for matching, only for generating the
5825initial insn list. If the preparation statement always invokes
5826@code{DONE} or @code{FAIL}, the RTL template may be reduced to a simple
5827list of operands, such as this example:
5828
5829@smallexample
5830@group
5831(define_expand "addsi3"
5832 [(match_operand:SI 0 "register_operand" "")
5833 (match_operand:SI 1 "register_operand" "")
5834 (match_operand:SI 2 "register_operand" "")]
5835@end group
5836@group
5837 ""
5838 "
58097133 5839@{
55e4756f
DD
5840 handle_add (operands[0], operands[1], operands[2]);
5841 DONE;
58097133 5842@}")
55e4756f
DD
5843@end group
5844@end smallexample
5845
03dda8e3
RK
5846Here is an example, the definition of left-shift for the SPUR chip:
5847
5848@smallexample
5849@group
5850(define_expand "ashlsi3"
5851 [(set (match_operand:SI 0 "register_operand" "")
5852 (ashift:SI
5853@end group
5854@group
5855 (match_operand:SI 1 "register_operand" "")
5856 (match_operand:SI 2 "nonmemory_operand" "")))]
5857 ""
5858 "
5859@end group
5860@end smallexample
5861
5862@smallexample
5863@group
5864@{
5865 if (GET_CODE (operands[2]) != CONST_INT
5866 || (unsigned) INTVAL (operands[2]) > 3)
5867 FAIL;
5868@}")
5869@end group
5870@end smallexample
5871
5872@noindent
5873This example uses @code{define_expand} so that it can generate an RTL insn
5874for shifting when the shift-count is in the supported range of 0 to 3 but
5875fail in other cases where machine insns aren't available. When it fails,
5876the compiler tries another strategy using different patterns (such as, a
5877library call).
5878
5879If the compiler were able to handle nontrivial condition-strings in
5880patterns with names, then it would be possible to use a
5881@code{define_insn} in that case. Here is another case (zero-extension
5882on the 68000) which makes more use of the power of @code{define_expand}:
5883
5884@smallexample
5885(define_expand "zero_extendhisi2"
5886 [(set (match_operand:SI 0 "general_operand" "")
5887 (const_int 0))
5888 (set (strict_low_part
5889 (subreg:HI
5890 (match_dup 0)
5891 0))
5892 (match_operand:HI 1 "general_operand" ""))]
5893 ""
5894 "operands[1] = make_safe_from (operands[1], operands[0]);")
5895@end smallexample
5896
5897@noindent
5898@findex make_safe_from
5899Here two RTL insns are generated, one to clear the entire output operand
5900and the other to copy the input operand into its low half. This sequence
5901is incorrect if the input operand refers to [the old value of] the output
5902operand, so the preparation statement makes sure this isn't so. The
5903function @code{make_safe_from} copies the @code{operands[1]} into a
5904temporary register if it refers to @code{operands[0]}. It does this
5905by emitting another RTL insn.
5906
5907Finally, a third example shows the use of an internal operand.
5908Zero-extension on the SPUR chip is done by @code{and}-ing the result
5909against a halfword mask. But this mask cannot be represented by a
5910@code{const_int} because the constant value is too large to be legitimate
5911on this machine. So it must be copied into a register with
5912@code{force_reg} and then the register used in the @code{and}.
5913
5914@smallexample
5915(define_expand "zero_extendhisi2"
5916 [(set (match_operand:SI 0 "register_operand" "")
5917 (and:SI (subreg:SI
5918 (match_operand:HI 1 "register_operand" "")
5919 0)
5920 (match_dup 2)))]
5921 ""
5922 "operands[2]
3a598fbe 5923 = force_reg (SImode, GEN_INT (65535)); ")
03dda8e3
RK
5924@end smallexample
5925
f4559287 5926@emph{Note:} If the @code{define_expand} is used to serve a
c771326b 5927standard binary or unary arithmetic operation or a bit-field operation,
03dda8e3
RK
5928then the last insn it generates must not be a @code{code_label},
5929@code{barrier} or @code{note}. It must be an @code{insn},
5930@code{jump_insn} or @code{call_insn}. If you don't need a real insn
5931at the end, emit an insn to copy the result of the operation into
5932itself. Such an insn will generate no code, but it can avoid problems
bd819a4a 5933in the compiler.
03dda8e3 5934
a5249a21
HPN
5935@end ifset
5936@ifset INTERNALS
03dda8e3
RK
5937@node Insn Splitting
5938@section Defining How to Split Instructions
5939@cindex insn splitting
5940@cindex instruction splitting
5941@cindex splitting instructions
5942
fae15c93
VM
5943There are two cases where you should specify how to split a pattern
5944into multiple insns. On machines that have instructions requiring
5945delay slots (@pxref{Delay Slots}) or that have instructions whose
5946output is not available for multiple cycles (@pxref{Processor pipeline
5947description}), the compiler phases that optimize these cases need to
5948be able to move insns into one-instruction delay slots. However, some
5949insns may generate more than one machine instruction. These insns
5950cannot be placed into a delay slot.
03dda8e3
RK
5951
5952Often you can rewrite the single insn as a list of individual insns,
5953each corresponding to one machine instruction. The disadvantage of
5954doing so is that it will cause the compilation to be slower and require
5955more space. If the resulting insns are too complex, it may also
5956suppress some optimizations. The compiler splits the insn if there is a
5957reason to believe that it might improve instruction or delay slot
5958scheduling.
5959
5960The insn combiner phase also splits putative insns. If three insns are
5961merged into one insn with a complex expression that cannot be matched by
5962some @code{define_insn} pattern, the combiner phase attempts to split
5963the complex pattern into two insns that are recognized. Usually it can
5964break the complex pattern into two patterns by splitting out some
5965subexpression. However, in some other cases, such as performing an
5966addition of a large constant in two insns on a RISC machine, the way to
5967split the addition into two insns is machine-dependent.
5968
f3a3d0d3 5969@findex define_split
03dda8e3
RK
5970The @code{define_split} definition tells the compiler how to split a
5971complex insn into several simpler insns. It looks like this:
5972
5973@smallexample
5974(define_split
5975 [@var{insn-pattern}]
5976 "@var{condition}"
5977 [@var{new-insn-pattern-1}
5978 @var{new-insn-pattern-2}
5979 @dots{}]
630d3d5a 5980 "@var{preparation-statements}")
03dda8e3
RK
5981@end smallexample
5982
5983@var{insn-pattern} is a pattern that needs to be split and
5984@var{condition} is the final condition to be tested, as in a
5985@code{define_insn}. When an insn matching @var{insn-pattern} and
5986satisfying @var{condition} is found, it is replaced in the insn list
5987with the insns given by @var{new-insn-pattern-1},
5988@var{new-insn-pattern-2}, etc.
5989
630d3d5a 5990The @var{preparation-statements} are similar to those statements that
03dda8e3
RK
5991are specified for @code{define_expand} (@pxref{Expander Definitions})
5992and are executed before the new RTL is generated to prepare for the
5993generated code or emit some insns whose pattern is not fixed. Unlike
5994those in @code{define_expand}, however, these statements must not
5995generate any new pseudo-registers. Once reload has completed, they also
5996must not allocate any space in the stack frame.
5997
5998Patterns are matched against @var{insn-pattern} in two different
5999circumstances. If an insn needs to be split for delay slot scheduling
6000or insn scheduling, the insn is already known to be valid, which means
6001that it must have been matched by some @code{define_insn} and, if
df2a54e9 6002@code{reload_completed} is nonzero, is known to satisfy the constraints
03dda8e3
RK
6003of that @code{define_insn}. In that case, the new insn patterns must
6004also be insns that are matched by some @code{define_insn} and, if
df2a54e9 6005@code{reload_completed} is nonzero, must also satisfy the constraints
03dda8e3
RK
6006of those definitions.
6007
6008As an example of this usage of @code{define_split}, consider the following
6009example from @file{a29k.md}, which splits a @code{sign_extend} from
6010@code{HImode} to @code{SImode} into a pair of shift insns:
6011
6012@smallexample
6013(define_split
6014 [(set (match_operand:SI 0 "gen_reg_operand" "")
6015 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
6016 ""
6017 [(set (match_dup 0)
6018 (ashift:SI (match_dup 1)
6019 (const_int 16)))
6020 (set (match_dup 0)
6021 (ashiftrt:SI (match_dup 0)
6022 (const_int 16)))]
6023 "
6024@{ operands[1] = gen_lowpart (SImode, operands[1]); @}")
6025@end smallexample
6026
6027When the combiner phase tries to split an insn pattern, it is always the
6028case that the pattern is @emph{not} matched by any @code{define_insn}.
6029The combiner pass first tries to split a single @code{set} expression
6030and then the same @code{set} expression inside a @code{parallel}, but
6031followed by a @code{clobber} of a pseudo-reg to use as a scratch
6032register. In these cases, the combiner expects exactly two new insn
6033patterns to be generated. It will verify that these patterns match some
6034@code{define_insn} definitions, so you need not do this test in the
6035@code{define_split} (of course, there is no point in writing a
6036@code{define_split} that will never produce insns that match).
6037
6038Here is an example of this use of @code{define_split}, taken from
6039@file{rs6000.md}:
6040
6041@smallexample
6042(define_split
6043 [(set (match_operand:SI 0 "gen_reg_operand" "")
6044 (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
6045 (match_operand:SI 2 "non_add_cint_operand" "")))]
6046 ""
6047 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
6048 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
6049"
6050@{
6051 int low = INTVAL (operands[2]) & 0xffff;
6052 int high = (unsigned) INTVAL (operands[2]) >> 16;
6053
6054 if (low & 0x8000)
6055 high++, low |= 0xffff0000;
6056
3a598fbe
JL
6057 operands[3] = GEN_INT (high << 16);
6058 operands[4] = GEN_INT (low);
03dda8e3
RK
6059@}")
6060@end smallexample
6061
6062Here the predicate @code{non_add_cint_operand} matches any
6063@code{const_int} that is @emph{not} a valid operand of a single add
6064insn. The add with the smaller displacement is written so that it
6065can be substituted into the address of a subsequent operation.
6066
6067An example that uses a scratch register, from the same file, generates
6068an equality comparison of a register and a large constant:
6069
6070@smallexample
6071(define_split
6072 [(set (match_operand:CC 0 "cc_reg_operand" "")
6073 (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
6074 (match_operand:SI 2 "non_short_cint_operand" "")))
6075 (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
6076 "find_single_use (operands[0], insn, 0)
6077 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
6078 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
6079 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
6080 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
6081 "
6082@{
12bcfaa1 6083 /* @r{Get the constant we are comparing against, C, and see what it
03dda8e3 6084 looks like sign-extended to 16 bits. Then see what constant
12bcfaa1 6085 could be XOR'ed with C to get the sign-extended value.} */
03dda8e3
RK
6086
6087 int c = INTVAL (operands[2]);
6088 int sextc = (c << 16) >> 16;
6089 int xorv = c ^ sextc;
6090
3a598fbe
JL
6091 operands[4] = GEN_INT (xorv);
6092 operands[5] = GEN_INT (sextc);
03dda8e3
RK
6093@}")
6094@end smallexample
6095
6096To avoid confusion, don't write a single @code{define_split} that
6097accepts some insns that match some @code{define_insn} as well as some
6098insns that don't. Instead, write two separate @code{define_split}
6099definitions, one for the insns that are valid and one for the insns that
6100are not valid.
6101
6b24c259
JH
6102The splitter is allowed to split jump instructions into sequence of
6103jumps or create new jumps in while splitting non-jump instructions. As
6104the central flowgraph and branch prediction information needs to be updated,
f282ffb3 6105several restriction apply.
6b24c259
JH
6106
6107Splitting of jump instruction into sequence that over by another jump
c21cd8b1 6108instruction is always valid, as compiler expect identical behavior of new
6b24c259
JH
6109jump. When new sequence contains multiple jump instructions or new labels,
6110more assistance is needed. Splitter is required to create only unconditional
6111jumps, or simple conditional jump instructions. Additionally it must attach a
63519d23 6112@code{REG_BR_PROB} note to each conditional jump. A global variable
addd6f64 6113@code{split_branch_probability} holds the probability of the original branch in case
e4ae5e77 6114it was a simple conditional jump, @minus{}1 otherwise. To simplify
addd6f64 6115recomputing of edge frequencies, the new sequence is required to have only
6b24c259
JH
6116forward jumps to the newly created labels.
6117
fae81b38 6118@findex define_insn_and_split
c88c0d42
CP
6119For the common case where the pattern of a define_split exactly matches the
6120pattern of a define_insn, use @code{define_insn_and_split}. It looks like
6121this:
6122
6123@smallexample
6124(define_insn_and_split
6125 [@var{insn-pattern}]
6126 "@var{condition}"
6127 "@var{output-template}"
6128 "@var{split-condition}"
6129 [@var{new-insn-pattern-1}
6130 @var{new-insn-pattern-2}
6131 @dots{}]
630d3d5a 6132 "@var{preparation-statements}"
c88c0d42
CP
6133 [@var{insn-attributes}])
6134
6135@end smallexample
6136
6137@var{insn-pattern}, @var{condition}, @var{output-template}, and
6138@var{insn-attributes} are used as in @code{define_insn}. The
6139@var{new-insn-pattern} vector and the @var{preparation-statements} are used as
6140in a @code{define_split}. The @var{split-condition} is also used as in
6141@code{define_split}, with the additional behavior that if the condition starts
6142with @samp{&&}, the condition used for the split will be the constructed as a
d7d9c429 6143logical ``and'' of the split condition with the insn condition. For example,
c88c0d42
CP
6144from i386.md:
6145
6146@smallexample
6147(define_insn_and_split "zero_extendhisi2_and"
6148 [(set (match_operand:SI 0 "register_operand" "=r")
6149 (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
6150 (clobber (reg:CC 17))]
6151 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
6152 "#"
6153 "&& reload_completed"
f282ffb3 6154 [(parallel [(set (match_dup 0)
9c34dbbf 6155 (and:SI (match_dup 0) (const_int 65535)))
6ccde948 6156 (clobber (reg:CC 17))])]
c88c0d42
CP
6157 ""
6158 [(set_attr "type" "alu1")])
6159
6160@end smallexample
6161
ebb48a4d 6162In this case, the actual split condition will be
aee96fe9 6163@samp{TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed}.
c88c0d42
CP
6164
6165The @code{define_insn_and_split} construction provides exactly the same
6166functionality as two separate @code{define_insn} and @code{define_split}
6167patterns. It exists for compactness, and as a maintenance tool to prevent
6168having to ensure the two patterns' templates match.
6169
a5249a21
HPN
6170@end ifset
6171@ifset INTERNALS
04d8aa70
AM
6172@node Including Patterns
6173@section Including Patterns in Machine Descriptions.
6174@cindex insn includes
6175
6176@findex include
6177The @code{include} pattern tells the compiler tools where to
6178look for patterns that are in files other than in the file
8a36672b 6179@file{.md}. This is used only at build time and there is no preprocessing allowed.
04d8aa70
AM
6180
6181It looks like:
6182
6183@smallexample
6184
6185(include
6186 @var{pathname})
6187@end smallexample
6188
6189For example:
6190
6191@smallexample
6192
f282ffb3 6193(include "filestuff")
04d8aa70
AM
6194
6195@end smallexample
6196
27d30956 6197Where @var{pathname} is a string that specifies the location of the file,
8a36672b 6198specifies the include file to be in @file{gcc/config/target/filestuff}. The
04d8aa70
AM
6199directory @file{gcc/config/target} is regarded as the default directory.
6200
6201
f282ffb3
JM
6202Machine descriptions may be split up into smaller more manageable subsections
6203and placed into subdirectories.
04d8aa70
AM
6204
6205By specifying:
6206
6207@smallexample
6208
f282ffb3 6209(include "BOGUS/filestuff")
04d8aa70
AM
6210
6211@end smallexample
6212
6213the include file is specified to be in @file{gcc/config/@var{target}/BOGUS/filestuff}.
6214
6215Specifying an absolute path for the include file such as;
6216@smallexample
6217
f282ffb3 6218(include "/u2/BOGUS/filestuff")
04d8aa70
AM
6219
6220@end smallexample
f282ffb3 6221is permitted but is not encouraged.
04d8aa70
AM
6222
6223@subsection RTL Generation Tool Options for Directory Search
6224@cindex directory options .md
6225@cindex options, directory search
6226@cindex search options
6227
6228The @option{-I@var{dir}} option specifies directories to search for machine descriptions.
6229For example:
6230
6231@smallexample
6232
6233genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
6234
6235@end smallexample
6236
6237
6238Add the directory @var{dir} to the head of the list of directories to be
6239searched for header files. This can be used to override a system machine definition
6240file, substituting your own version, since these directories are
6241searched before the default machine description file directories. If you use more than
6242one @option{-I} option, the directories are scanned in left-to-right
6243order; the standard default directory come after.
6244
6245
a5249a21
HPN
6246@end ifset
6247@ifset INTERNALS
f3a3d0d3
RH
6248@node Peephole Definitions
6249@section Machine-Specific Peephole Optimizers
6250@cindex peephole optimizer definitions
6251@cindex defining peephole optimizers
6252
6253In addition to instruction patterns the @file{md} file may contain
6254definitions of machine-specific peephole optimizations.
6255
6256The combiner does not notice certain peephole optimizations when the data
6257flow in the program does not suggest that it should try them. For example,
6258sometimes two consecutive insns related in purpose can be combined even
6259though the second one does not appear to use a register computed in the
6260first one. A machine-specific peephole optimizer can detect such
6261opportunities.
6262
6263There are two forms of peephole definitions that may be used. The
6264original @code{define_peephole} is run at assembly output time to
6265match insns and substitute assembly text. Use of @code{define_peephole}
6266is deprecated.
6267
6268A newer @code{define_peephole2} matches insns and substitutes new
6269insns. The @code{peephole2} pass is run after register allocation
ebb48a4d 6270but before scheduling, which may result in much better code for
f3a3d0d3
RH
6271targets that do scheduling.
6272
6273@menu
6274* define_peephole:: RTL to Text Peephole Optimizers
6275* define_peephole2:: RTL to RTL Peephole Optimizers
6276@end menu
6277
a5249a21
HPN
6278@end ifset
6279@ifset INTERNALS
f3a3d0d3
RH
6280@node define_peephole
6281@subsection RTL to Text Peephole Optimizers
6282@findex define_peephole
6283
6284@need 1000
6285A definition looks like this:
6286
6287@smallexample
6288(define_peephole
6289 [@var{insn-pattern-1}
6290 @var{insn-pattern-2}
6291 @dots{}]
6292 "@var{condition}"
6293 "@var{template}"
630d3d5a 6294 "@var{optional-insn-attributes}")
f3a3d0d3
RH
6295@end smallexample
6296
6297@noindent
6298The last string operand may be omitted if you are not using any
6299machine-specific information in this machine description. If present,
6300it must obey the same rules as in a @code{define_insn}.
6301
6302In this skeleton, @var{insn-pattern-1} and so on are patterns to match
6303consecutive insns. The optimization applies to a sequence of insns when
6304@var{insn-pattern-1} matches the first one, @var{insn-pattern-2} matches
bd819a4a 6305the next, and so on.
f3a3d0d3
RH
6306
6307Each of the insns matched by a peephole must also match a
6308@code{define_insn}. Peepholes are checked only at the last stage just
6309before code generation, and only optionally. Therefore, any insn which
6310would match a peephole but no @code{define_insn} will cause a crash in code
6311generation in an unoptimized compilation, or at various optimization
6312stages.
6313
6314The operands of the insns are matched with @code{match_operands},
6315@code{match_operator}, and @code{match_dup}, as usual. What is not
6316usual is that the operand numbers apply to all the insn patterns in the
6317definition. So, you can check for identical operands in two insns by
6318using @code{match_operand} in one insn and @code{match_dup} in the
6319other.
6320
6321The operand constraints used in @code{match_operand} patterns do not have
6322any direct effect on the applicability of the peephole, but they will
6323be validated afterward, so make sure your constraints are general enough
6324to apply whenever the peephole matches. If the peephole matches
6325but the constraints are not satisfied, the compiler will crash.
6326
6327It is safe to omit constraints in all the operands of the peephole; or
6328you can write constraints which serve as a double-check on the criteria
6329previously tested.
6330
6331Once a sequence of insns matches the patterns, the @var{condition} is
6332checked. This is a C expression which makes the final decision whether to
6333perform the optimization (we do so if the expression is nonzero). If
6334@var{condition} is omitted (in other words, the string is empty) then the
6335optimization is applied to every sequence of insns that matches the
6336patterns.
6337
6338The defined peephole optimizations are applied after register allocation
6339is complete. Therefore, the peephole definition can check which
6340operands have ended up in which kinds of registers, just by looking at
6341the operands.
6342
6343@findex prev_active_insn
6344The way to refer to the operands in @var{condition} is to write
6345@code{operands[@var{i}]} for operand number @var{i} (as matched by
6346@code{(match_operand @var{i} @dots{})}). Use the variable @code{insn}
6347to refer to the last of the insns being matched; use
6348@code{prev_active_insn} to find the preceding insns.
6349
6350@findex dead_or_set_p
6351When optimizing computations with intermediate results, you can use
6352@var{condition} to match only when the intermediate results are not used
6353elsewhere. Use the C expression @code{dead_or_set_p (@var{insn},
6354@var{op})}, where @var{insn} is the insn in which you expect the value
6355to be used for the last time (from the value of @code{insn}, together
6356with use of @code{prev_nonnote_insn}), and @var{op} is the intermediate
bd819a4a 6357value (from @code{operands[@var{i}]}).
f3a3d0d3
RH
6358
6359Applying the optimization means replacing the sequence of insns with one
6360new insn. The @var{template} controls ultimate output of assembler code
6361for this combined insn. It works exactly like the template of a
6362@code{define_insn}. Operand numbers in this template are the same ones
6363used in matching the original sequence of insns.
6364
6365The result of a defined peephole optimizer does not need to match any of
6366the insn patterns in the machine description; it does not even have an
6367opportunity to match them. The peephole optimizer definition itself serves
6368as the insn pattern to control how the insn is output.
6369
6370Defined peephole optimizers are run as assembler code is being output,
6371so the insns they produce are never combined or rearranged in any way.
6372
6373Here is an example, taken from the 68000 machine description:
6374
6375@smallexample
6376(define_peephole
6377 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
6378 (set (match_operand:DF 0 "register_operand" "=f")
6379 (match_operand:DF 1 "register_operand" "ad"))]
6380 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
f3a3d0d3
RH
6381@{
6382 rtx xoperands[2];
a2a8cc44 6383 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
f3a3d0d3 6384#ifdef MOTOROLA
0f40f9f7
ZW
6385 output_asm_insn ("move.l %1,(sp)", xoperands);
6386 output_asm_insn ("move.l %1,-(sp)", operands);
6387 return "fmove.d (sp)+,%0";
f3a3d0d3 6388#else
0f40f9f7
ZW
6389 output_asm_insn ("movel %1,sp@@", xoperands);
6390 output_asm_insn ("movel %1,sp@@-", operands);
6391 return "fmoved sp@@+,%0";
f3a3d0d3 6392#endif
0f40f9f7 6393@})
f3a3d0d3
RH
6394@end smallexample
6395
6396@need 1000
6397The effect of this optimization is to change
6398
6399@smallexample
6400@group
6401jbsr _foobar
6402addql #4,sp
6403movel d1,sp@@-
6404movel d0,sp@@-
6405fmoved sp@@+,fp0
6406@end group
6407@end smallexample
6408
6409@noindent
6410into
6411
6412@smallexample
6413@group
6414jbsr _foobar
6415movel d1,sp@@
6416movel d0,sp@@-
6417fmoved sp@@+,fp0
6418@end group
6419@end smallexample
6420
6421@ignore
6422@findex CC_REVERSED
6423If a peephole matches a sequence including one or more jump insns, you must
6424take account of the flags such as @code{CC_REVERSED} which specify that the
6425condition codes are represented in an unusual manner. The compiler
6426automatically alters any ordinary conditional jumps which occur in such
6427situations, but the compiler cannot alter jumps which have been replaced by
6428peephole optimizations. So it is up to you to alter the assembler code
6429that the peephole produces. Supply C code to write the assembler output,
6430and in this C code check the condition code status flags and change the
6431assembler code as appropriate.
6432@end ignore
6433
6434@var{insn-pattern-1} and so on look @emph{almost} like the second
6435operand of @code{define_insn}. There is one important difference: the
6436second operand of @code{define_insn} consists of one or more RTX's
6437enclosed in square brackets. Usually, there is only one: then the same
6438action can be written as an element of a @code{define_peephole}. But
6439when there are multiple actions in a @code{define_insn}, they are
6440implicitly enclosed in a @code{parallel}. Then you must explicitly
6441write the @code{parallel}, and the square brackets within it, in the
6442@code{define_peephole}. Thus, if an insn pattern looks like this,
6443
6444@smallexample
6445(define_insn "divmodsi4"
6446 [(set (match_operand:SI 0 "general_operand" "=d")
6447 (div:SI (match_operand:SI 1 "general_operand" "0")
6448 (match_operand:SI 2 "general_operand" "dmsK")))
6449 (set (match_operand:SI 3 "general_operand" "=d")
6450 (mod:SI (match_dup 1) (match_dup 2)))]
6451 "TARGET_68020"
6452 "divsl%.l %2,%3:%0")
6453@end smallexample
6454
6455@noindent
6456then the way to mention this insn in a peephole is as follows:
6457
6458@smallexample
6459(define_peephole
6460 [@dots{}
6461 (parallel
6462 [(set (match_operand:SI 0 "general_operand" "=d")
6463 (div:SI (match_operand:SI 1 "general_operand" "0")
6464 (match_operand:SI 2 "general_operand" "dmsK")))
6465 (set (match_operand:SI 3 "general_operand" "=d")
6466 (mod:SI (match_dup 1) (match_dup 2)))])
6467 @dots{}]
6468 @dots{})
6469@end smallexample
6470
a5249a21
HPN
6471@end ifset
6472@ifset INTERNALS
f3a3d0d3
RH
6473@node define_peephole2
6474@subsection RTL to RTL Peephole Optimizers
6475@findex define_peephole2
6476
6477The @code{define_peephole2} definition tells the compiler how to
ebb48a4d 6478substitute one sequence of instructions for another sequence,
f3a3d0d3
RH
6479what additional scratch registers may be needed and what their
6480lifetimes must be.
6481
6482@smallexample
6483(define_peephole2
6484 [@var{insn-pattern-1}
6485 @var{insn-pattern-2}
6486 @dots{}]
6487 "@var{condition}"
6488 [@var{new-insn-pattern-1}
6489 @var{new-insn-pattern-2}
6490 @dots{}]
630d3d5a 6491 "@var{preparation-statements}")
f3a3d0d3
RH
6492@end smallexample
6493
6494The definition is almost identical to @code{define_split}
6495(@pxref{Insn Splitting}) except that the pattern to match is not a
6496single instruction, but a sequence of instructions.
6497
6498It is possible to request additional scratch registers for use in the
6499output template. If appropriate registers are not free, the pattern
6500will simply not match.
6501
6502@findex match_scratch
6503@findex match_dup
6504Scratch registers are requested with a @code{match_scratch} pattern at
6505the top level of the input pattern. The allocated register (initially) will
6506be dead at the point requested within the original sequence. If the scratch
6507is used at more than a single point, a @code{match_dup} pattern at the
6508top level of the input pattern marks the last position in the input sequence
6509at which the register must be available.
6510
6511Here is an example from the IA-32 machine description:
6512
6513@smallexample
6514(define_peephole2
6515 [(match_scratch:SI 2 "r")
6516 (parallel [(set (match_operand:SI 0 "register_operand" "")
6517 (match_operator:SI 3 "arith_or_logical_operator"
6518 [(match_dup 0)
6519 (match_operand:SI 1 "memory_operand" "")]))
6520 (clobber (reg:CC 17))])]
6521 "! optimize_size && ! TARGET_READ_MODIFY"
6522 [(set (match_dup 2) (match_dup 1))
6523 (parallel [(set (match_dup 0)
6524 (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
6525 (clobber (reg:CC 17))])]
6526 "")
6527@end smallexample
6528
6529@noindent
6530This pattern tries to split a load from its use in the hopes that we'll be
6531able to schedule around the memory load latency. It allocates a single
6532@code{SImode} register of class @code{GENERAL_REGS} (@code{"r"}) that needs
6533to be live only at the point just before the arithmetic.
6534
b192711e 6535A real example requiring extended scratch lifetimes is harder to come by,
f3a3d0d3
RH
6536so here's a silly made-up example:
6537
6538@smallexample
6539(define_peephole2
6540 [(match_scratch:SI 4 "r")
6541 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
6542 (set (match_operand:SI 2 "" "") (match_dup 1))
6543 (match_dup 4)
6544 (set (match_operand:SI 3 "" "") (match_dup 1))]
630d3d5a 6545 "/* @r{determine 1 does not overlap 0 and 2} */"
f3a3d0d3
RH
6546 [(set (match_dup 4) (match_dup 1))
6547 (set (match_dup 0) (match_dup 4))
6548 (set (match_dup 2) (match_dup 4))]
6549 (set (match_dup 3) (match_dup 4))]
6550 "")
6551@end smallexample
6552
6553@noindent
a628d195
RH
6554If we had not added the @code{(match_dup 4)} in the middle of the input
6555sequence, it might have been the case that the register we chose at the
6556beginning of the sequence is killed by the first or second @code{set}.
f3a3d0d3 6557
a5249a21
HPN
6558@end ifset
6559@ifset INTERNALS
03dda8e3
RK
6560@node Insn Attributes
6561@section Instruction Attributes
6562@cindex insn attributes
6563@cindex instruction attributes
6564
6565In addition to describing the instruction supported by the target machine,
6566the @file{md} file also defines a group of @dfn{attributes} and a set of
6567values for each. Every generated insn is assigned a value for each attribute.
6568One possible attribute would be the effect that the insn has on the machine's
6569condition code. This attribute can then be used by @code{NOTICE_UPDATE_CC}
6570to track the condition codes.
6571
6572@menu
6573* Defining Attributes:: Specifying attributes and their values.
6574* Expressions:: Valid expressions for attribute values.
6575* Tagging Insns:: Assigning attribute values to insns.
6576* Attr Example:: An example of assigning attributes.
6577* Insn Lengths:: Computing the length of insns.
6578* Constant Attributes:: Defining attributes that are constant.
6579* Delay Slots:: Defining delay slots required for a machine.
fae15c93 6580* Processor pipeline description:: Specifying information for insn scheduling.
03dda8e3
RK
6581@end menu
6582
a5249a21
HPN
6583@end ifset
6584@ifset INTERNALS
03dda8e3
RK
6585@node Defining Attributes
6586@subsection Defining Attributes and their Values
6587@cindex defining attributes and their values
6588@cindex attributes, defining
6589
6590@findex define_attr
6591The @code{define_attr} expression is used to define each attribute required
6592by the target machine. It looks like:
6593
6594@smallexample
6595(define_attr @var{name} @var{list-of-values} @var{default})
6596@end smallexample
6597
6598@var{name} is a string specifying the name of the attribute being defined.
6599
6600@var{list-of-values} is either a string that specifies a comma-separated
6601list of values that can be assigned to the attribute, or a null string to
6602indicate that the attribute takes numeric values.
6603
6604@var{default} is an attribute expression that gives the value of this
6605attribute for insns that match patterns whose definition does not include
6606an explicit value for this attribute. @xref{Attr Example}, for more
6607information on the handling of defaults. @xref{Constant Attributes},
6608for information on attributes that do not depend on any particular insn.
6609
6610@findex insn-attr.h
6611For each defined attribute, a number of definitions are written to the
6612@file{insn-attr.h} file. For cases where an explicit set of values is
6613specified for an attribute, the following are defined:
6614
6615@itemize @bullet
6616@item
6617A @samp{#define} is written for the symbol @samp{HAVE_ATTR_@var{name}}.
6618
6619@item
2eac577f 6620An enumerated class is defined for @samp{attr_@var{name}} with
03dda8e3 6621elements of the form @samp{@var{upper-name}_@var{upper-value}} where
4bd0bee9 6622the attribute name and value are first converted to uppercase.
03dda8e3
RK
6623
6624@item
6625A function @samp{get_attr_@var{name}} is defined that is passed an insn and
6626returns the attribute value for that insn.
6627@end itemize
6628
6629For example, if the following is present in the @file{md} file:
6630
6631@smallexample
6632(define_attr "type" "branch,fp,load,store,arith" @dots{})
6633@end smallexample
6634
6635@noindent
6636the following lines will be written to the file @file{insn-attr.h}.
6637
6638@smallexample
6639#define HAVE_ATTR_type
6640enum attr_type @{TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
6641 TYPE_STORE, TYPE_ARITH@};
6642extern enum attr_type get_attr_type ();
6643@end smallexample
6644
6645If the attribute takes numeric values, no @code{enum} type will be
6646defined and the function to obtain the attribute's value will return
6647@code{int}.
6648
7ac28727
AK
6649There are attributes which are tied to a specific meaning. These
6650attributes are not free to use for other purposes:
6651
6652@table @code
6653@item length
6654The @code{length} attribute is used to calculate the length of emitted
6655code chunks. This is especially important when verifying branch
6656distances. @xref{Insn Lengths}.
6657
6658@item enabled
6659The @code{enabled} attribute can be defined to prevent certain
6660alternatives of an insn definition from being used during code
6661generation. @xref{Disable Insn Alternatives}.
6662
6663@end table
6664
a5249a21
HPN
6665@end ifset
6666@ifset INTERNALS
03dda8e3
RK
6667@node Expressions
6668@subsection Attribute Expressions
6669@cindex attribute expressions
6670
6671RTL expressions used to define attributes use the codes described above
6672plus a few specific to attribute definitions, to be discussed below.
6673Attribute value expressions must have one of the following forms:
6674
6675@table @code
6676@cindex @code{const_int} and attributes
6677@item (const_int @var{i})
6678The integer @var{i} specifies the value of a numeric attribute. @var{i}
6679must be non-negative.
6680
6681The value of a numeric attribute can be specified either with a
00bc45c1
RH
6682@code{const_int}, or as an integer represented as a string in
6683@code{const_string}, @code{eq_attr} (see below), @code{attr},
6684@code{symbol_ref}, simple arithmetic expressions, and @code{set_attr}
6685overrides on specific instructions (@pxref{Tagging Insns}).
03dda8e3
RK
6686
6687@cindex @code{const_string} and attributes
6688@item (const_string @var{value})
6689The string @var{value} specifies a constant attribute value.
6690If @var{value} is specified as @samp{"*"}, it means that the default value of
6691the attribute is to be used for the insn containing this expression.
6692@samp{"*"} obviously cannot be used in the @var{default} expression
bd819a4a 6693of a @code{define_attr}.
03dda8e3
RK
6694
6695If the attribute whose value is being specified is numeric, @var{value}
6696must be a string containing a non-negative integer (normally
6697@code{const_int} would be used in this case). Otherwise, it must
6698contain one of the valid values for the attribute.
6699
6700@cindex @code{if_then_else} and attributes
6701@item (if_then_else @var{test} @var{true-value} @var{false-value})
6702@var{test} specifies an attribute test, whose format is defined below.
6703The value of this expression is @var{true-value} if @var{test} is true,
6704otherwise it is @var{false-value}.
6705
6706@cindex @code{cond} and attributes
6707@item (cond [@var{test1} @var{value1} @dots{}] @var{default})
6708The first operand of this expression is a vector containing an even
6709number of expressions and consisting of pairs of @var{test} and @var{value}
6710expressions. The value of the @code{cond} expression is that of the
6711@var{value} corresponding to the first true @var{test} expression. If
6712none of the @var{test} expressions are true, the value of the @code{cond}
6713expression is that of the @var{default} expression.
6714@end table
6715
6716@var{test} expressions can have one of the following forms:
6717
6718@table @code
6719@cindex @code{const_int} and attribute tests
6720@item (const_int @var{i})
df2a54e9 6721This test is true if @var{i} is nonzero and false otherwise.
03dda8e3
RK
6722
6723@cindex @code{not} and attributes
6724@cindex @code{ior} and attributes
6725@cindex @code{and} and attributes
6726@item (not @var{test})
6727@itemx (ior @var{test1} @var{test2})
6728@itemx (and @var{test1} @var{test2})
6729These tests are true if the indicated logical function is true.
6730
6731@cindex @code{match_operand} and attributes
6732@item (match_operand:@var{m} @var{n} @var{pred} @var{constraints})
6733This test is true if operand @var{n} of the insn whose attribute value
6734is being determined has mode @var{m} (this part of the test is ignored
6735if @var{m} is @code{VOIDmode}) and the function specified by the string
df2a54e9 6736@var{pred} returns a nonzero value when passed operand @var{n} and mode
03dda8e3
RK
6737@var{m} (this part of the test is ignored if @var{pred} is the null
6738string).
6739
6740The @var{constraints} operand is ignored and should be the null string.
6741
6742@cindex @code{le} and attributes
6743@cindex @code{leu} and attributes
6744@cindex @code{lt} and attributes
6745@cindex @code{gt} and attributes
6746@cindex @code{gtu} and attributes
6747@cindex @code{ge} and attributes
6748@cindex @code{geu} and attributes
6749@cindex @code{ne} and attributes
6750@cindex @code{eq} and attributes
6751@cindex @code{plus} and attributes
6752@cindex @code{minus} and attributes
6753@cindex @code{mult} and attributes
6754@cindex @code{div} and attributes
6755@cindex @code{mod} and attributes
6756@cindex @code{abs} and attributes
6757@cindex @code{neg} and attributes
6758@cindex @code{ashift} and attributes
6759@cindex @code{lshiftrt} and attributes
6760@cindex @code{ashiftrt} and attributes
6761@item (le @var{arith1} @var{arith2})
6762@itemx (leu @var{arith1} @var{arith2})
6763@itemx (lt @var{arith1} @var{arith2})
6764@itemx (ltu @var{arith1} @var{arith2})
6765@itemx (gt @var{arith1} @var{arith2})
6766@itemx (gtu @var{arith1} @var{arith2})
6767@itemx (ge @var{arith1} @var{arith2})
6768@itemx (geu @var{arith1} @var{arith2})
6769@itemx (ne @var{arith1} @var{arith2})
6770@itemx (eq @var{arith1} @var{arith2})
6771These tests are true if the indicated comparison of the two arithmetic
6772expressions is true. Arithmetic expressions are formed with
6773@code{plus}, @code{minus}, @code{mult}, @code{div}, @code{mod},
6774@code{abs}, @code{neg}, @code{and}, @code{ior}, @code{xor}, @code{not},
bd819a4a 6775@code{ashift}, @code{lshiftrt}, and @code{ashiftrt} expressions.
03dda8e3
RK
6776
6777@findex get_attr
6778@code{const_int} and @code{symbol_ref} are always valid terms (@pxref{Insn
6779Lengths},for additional forms). @code{symbol_ref} is a string
6780denoting a C expression that yields an @code{int} when evaluated by the
6781@samp{get_attr_@dots{}} routine. It should normally be a global
bd819a4a 6782variable.
03dda8e3
RK
6783
6784@findex eq_attr
6785@item (eq_attr @var{name} @var{value})
6786@var{name} is a string specifying the name of an attribute.
6787
6788@var{value} is a string that is either a valid value for attribute
6789@var{name}, a comma-separated list of values, or @samp{!} followed by a
6790value or list. If @var{value} does not begin with a @samp{!}, this
6791test is true if the value of the @var{name} attribute of the current
6792insn is in the list specified by @var{value}. If @var{value} begins
6793with a @samp{!}, this test is true if the attribute's value is
6794@emph{not} in the specified list.
6795
6796For example,
6797
6798@smallexample
6799(eq_attr "type" "load,store")
6800@end smallexample
6801
6802@noindent
6803is equivalent to
6804
6805@smallexample
6806(ior (eq_attr "type" "load") (eq_attr "type" "store"))
6807@end smallexample
6808
6809If @var{name} specifies an attribute of @samp{alternative}, it refers to the
6810value of the compiler variable @code{which_alternative}
6811(@pxref{Output Statement}) and the values must be small integers. For
bd819a4a 6812example,
03dda8e3
RK
6813
6814@smallexample
6815(eq_attr "alternative" "2,3")
6816@end smallexample
6817
6818@noindent
6819is equivalent to
6820
6821@smallexample
6822(ior (eq (symbol_ref "which_alternative") (const_int 2))
6823 (eq (symbol_ref "which_alternative") (const_int 3)))
6824@end smallexample
6825
6826Note that, for most attributes, an @code{eq_attr} test is simplified in cases
6827where the value of the attribute being tested is known for all insns matching
bd819a4a 6828a particular pattern. This is by far the most common case.
03dda8e3
RK
6829
6830@findex attr_flag
6831@item (attr_flag @var{name})
6832The value of an @code{attr_flag} expression is true if the flag
6833specified by @var{name} is true for the @code{insn} currently being
6834scheduled.
6835
6836@var{name} is a string specifying one of a fixed set of flags to test.
6837Test the flags @code{forward} and @code{backward} to determine the
6838direction of a conditional branch. Test the flags @code{very_likely},
6839@code{likely}, @code{very_unlikely}, and @code{unlikely} to determine
6840if a conditional branch is expected to be taken.
6841
6842If the @code{very_likely} flag is true, then the @code{likely} flag is also
6843true. Likewise for the @code{very_unlikely} and @code{unlikely} flags.
6844
6845This example describes a conditional branch delay slot which
6846can be nullified for forward branches that are taken (annul-true) or
6847for backward branches which are not taken (annul-false).
6848
6849@smallexample
6850(define_delay (eq_attr "type" "cbranch")
6851 [(eq_attr "in_branch_delay" "true")
6852 (and (eq_attr "in_branch_delay" "true")
6853 (attr_flag "forward"))
6854 (and (eq_attr "in_branch_delay" "true")
6855 (attr_flag "backward"))])
6856@end smallexample
6857
6858The @code{forward} and @code{backward} flags are false if the current
6859@code{insn} being scheduled is not a conditional branch.
6860
6861The @code{very_likely} and @code{likely} flags are true if the
6862@code{insn} being scheduled is not a conditional branch.
6863The @code{very_unlikely} and @code{unlikely} flags are false if the
6864@code{insn} being scheduled is not a conditional branch.
6865
6866@code{attr_flag} is only used during delay slot scheduling and has no
6867meaning to other passes of the compiler.
00bc45c1
RH
6868
6869@findex attr
6870@item (attr @var{name})
6871The value of another attribute is returned. This is most useful
6872for numeric attributes, as @code{eq_attr} and @code{attr_flag}
6873produce more efficient code for non-numeric attributes.
03dda8e3
RK
6874@end table
6875
a5249a21
HPN
6876@end ifset
6877@ifset INTERNALS
03dda8e3
RK
6878@node Tagging Insns
6879@subsection Assigning Attribute Values to Insns
6880@cindex tagging insns
6881@cindex assigning attribute values to insns
6882
6883The value assigned to an attribute of an insn is primarily determined by
6884which pattern is matched by that insn (or which @code{define_peephole}
6885generated it). Every @code{define_insn} and @code{define_peephole} can
6886have an optional last argument to specify the values of attributes for
6887matching insns. The value of any attribute not specified in a particular
6888insn is set to the default value for that attribute, as specified in its
6889@code{define_attr}. Extensive use of default values for attributes
6890permits the specification of the values for only one or two attributes
6891in the definition of most insn patterns, as seen in the example in the
bd819a4a 6892next section.
03dda8e3
RK
6893
6894The optional last argument of @code{define_insn} and
6895@code{define_peephole} is a vector of expressions, each of which defines
6896the value for a single attribute. The most general way of assigning an
6897attribute's value is to use a @code{set} expression whose first operand is an
6898@code{attr} expression giving the name of the attribute being set. The
6899second operand of the @code{set} is an attribute expression
bd819a4a 6900(@pxref{Expressions}) giving the value of the attribute.
03dda8e3
RK
6901
6902When the attribute value depends on the @samp{alternative} attribute
6903(i.e., which is the applicable alternative in the constraint of the
6904insn), the @code{set_attr_alternative} expression can be used. It
6905allows the specification of a vector of attribute expressions, one for
6906each alternative.
6907
6908@findex set_attr
6909When the generality of arbitrary attribute expressions is not required,
6910the simpler @code{set_attr} expression can be used, which allows
6911specifying a string giving either a single attribute value or a list
6912of attribute values, one for each alternative.
6913
6914The form of each of the above specifications is shown below. In each case,
6915@var{name} is a string specifying the attribute to be set.
6916
6917@table @code
6918@item (set_attr @var{name} @var{value-string})
6919@var{value-string} is either a string giving the desired attribute value,
6920or a string containing a comma-separated list giving the values for
6921succeeding alternatives. The number of elements must match the number
6922of alternatives in the constraint of the insn pattern.
6923
6924Note that it may be useful to specify @samp{*} for some alternative, in
6925which case the attribute will assume its default value for insns matching
6926that alternative.
6927
6928@findex set_attr_alternative
6929@item (set_attr_alternative @var{name} [@var{value1} @var{value2} @dots{}])
6930Depending on the alternative of the insn, the value will be one of the
6931specified values. This is a shorthand for using a @code{cond} with
6932tests on the @samp{alternative} attribute.
6933
6934@findex attr
6935@item (set (attr @var{name}) @var{value})
6936The first operand of this @code{set} must be the special RTL expression
6937@code{attr}, whose sole operand is a string giving the name of the
6938attribute being set. @var{value} is the value of the attribute.
6939@end table
6940
6941The following shows three different ways of representing the same
6942attribute value specification:
6943
6944@smallexample
6945(set_attr "type" "load,store,arith")
6946
6947(set_attr_alternative "type"
6948 [(const_string "load") (const_string "store")
6949 (const_string "arith")])
6950
6951(set (attr "type")
6952 (cond [(eq_attr "alternative" "1") (const_string "load")
6953 (eq_attr "alternative" "2") (const_string "store")]
6954 (const_string "arith")))
6955@end smallexample
6956
6957@need 1000
6958@findex define_asm_attributes
6959The @code{define_asm_attributes} expression provides a mechanism to
6960specify the attributes assigned to insns produced from an @code{asm}
6961statement. It has the form:
6962
6963@smallexample
6964(define_asm_attributes [@var{attr-sets}])
6965@end smallexample
6966
6967@noindent
6968where @var{attr-sets} is specified the same as for both the
6969@code{define_insn} and the @code{define_peephole} expressions.
6970
6971These values will typically be the ``worst case'' attribute values. For
6972example, they might indicate that the condition code will be clobbered.
6973
6974A specification for a @code{length} attribute is handled specially. The
6975way to compute the length of an @code{asm} insn is to multiply the
6976length specified in the expression @code{define_asm_attributes} by the
6977number of machine instructions specified in the @code{asm} statement,
6978determined by counting the number of semicolons and newlines in the
6979string. Therefore, the value of the @code{length} attribute specified
6980in a @code{define_asm_attributes} should be the maximum possible length
6981of a single machine instruction.
6982
a5249a21
HPN
6983@end ifset
6984@ifset INTERNALS
03dda8e3
RK
6985@node Attr Example
6986@subsection Example of Attribute Specifications
6987@cindex attribute specifications example
6988@cindex attribute specifications
6989
6990The judicious use of defaulting is important in the efficient use of
6991insn attributes. Typically, insns are divided into @dfn{types} and an
6992attribute, customarily called @code{type}, is used to represent this
6993value. This attribute is normally used only to define the default value
6994for other attributes. An example will clarify this usage.
6995
6996Assume we have a RISC machine with a condition code and in which only
6997full-word operations are performed in registers. Let us assume that we
6998can divide all insns into loads, stores, (integer) arithmetic
6999operations, floating point operations, and branches.
7000
7001Here we will concern ourselves with determining the effect of an insn on
7002the condition code and will limit ourselves to the following possible
7003effects: The condition code can be set unpredictably (clobbered), not
7004be changed, be set to agree with the results of the operation, or only
7005changed if the item previously set into the condition code has been
7006modified.
7007
7008Here is part of a sample @file{md} file for such a machine:
7009
7010@smallexample
7011(define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
7012
7013(define_attr "cc" "clobber,unchanged,set,change0"
7014 (cond [(eq_attr "type" "load")
7015 (const_string "change0")
7016 (eq_attr "type" "store,branch")
7017 (const_string "unchanged")
7018 (eq_attr "type" "arith")
7019 (if_then_else (match_operand:SI 0 "" "")
7020 (const_string "set")
7021 (const_string "clobber"))]
7022 (const_string "clobber")))
7023
7024(define_insn ""
7025 [(set (match_operand:SI 0 "general_operand" "=r,r,m")
7026 (match_operand:SI 1 "general_operand" "r,m,r"))]
7027 ""
7028 "@@
7029 move %0,%1
7030 load %0,%1
7031 store %0,%1"
7032 [(set_attr "type" "arith,load,store")])
7033@end smallexample
7034
7035Note that we assume in the above example that arithmetic operations
7036performed on quantities smaller than a machine word clobber the condition
7037code since they will set the condition code to a value corresponding to the
7038full-word result.
7039
a5249a21
HPN
7040@end ifset
7041@ifset INTERNALS
03dda8e3
RK
7042@node Insn Lengths
7043@subsection Computing the Length of an Insn
7044@cindex insn lengths, computing
7045@cindex computing the length of an insn
7046
7047For many machines, multiple types of branch instructions are provided, each
7048for different length branch displacements. In most cases, the assembler
7049will choose the correct instruction to use. However, when the assembler
b49900cc 7050cannot do so, GCC can when a special attribute, the @code{length}
03dda8e3
RK
7051attribute, is defined. This attribute must be defined to have numeric
7052values by specifying a null string in its @code{define_attr}.
7053
b49900cc 7054In the case of the @code{length} attribute, two additional forms of
03dda8e3
RK
7055arithmetic terms are allowed in test expressions:
7056
7057@table @code
7058@cindex @code{match_dup} and attributes
7059@item (match_dup @var{n})
7060This refers to the address of operand @var{n} of the current insn, which
7061must be a @code{label_ref}.
7062
7063@cindex @code{pc} and attributes
7064@item (pc)
7065This refers to the address of the @emph{current} insn. It might have
7066been more consistent with other usage to make this the address of the
7067@emph{next} insn but this would be confusing because the length of the
7068current insn is to be computed.
7069@end table
7070
7071@cindex @code{addr_vec}, length of
7072@cindex @code{addr_diff_vec}, length of
7073For normal insns, the length will be determined by value of the
b49900cc 7074@code{length} attribute. In the case of @code{addr_vec} and
03dda8e3
RK
7075@code{addr_diff_vec} insn patterns, the length is computed as
7076the number of vectors multiplied by the size of each vector.
7077
7078Lengths are measured in addressable storage units (bytes).
7079
7080The following macros can be used to refine the length computation:
7081
7082@table @code
03dda8e3
RK
7083@findex ADJUST_INSN_LENGTH
7084@item ADJUST_INSN_LENGTH (@var{insn}, @var{length})
7085If defined, modifies the length assigned to instruction @var{insn} as a
7086function of the context in which it is used. @var{length} is an lvalue
7087that contains the initially computed length of the insn and should be
a8aa4e0b 7088updated with the correct length of the insn.
03dda8e3
RK
7089
7090This macro will normally not be required. A case in which it is
161d7b59 7091required is the ROMP@. On this machine, the size of an @code{addr_vec}
03dda8e3
RK
7092insn must be increased by two to compensate for the fact that alignment
7093may be required.
7094@end table
7095
7096@findex get_attr_length
7097The routine that returns @code{get_attr_length} (the value of the
7098@code{length} attribute) can be used by the output routine to
7099determine the form of the branch instruction to be written, as the
7100example below illustrates.
7101
7102As an example of the specification of variable-length branches, consider
7103the IBM 360. If we adopt the convention that a register will be set to
7104the starting address of a function, we can jump to labels within 4k of
7105the start using a four-byte instruction. Otherwise, we need a six-byte
7106sequence to load the address from memory and then branch to it.
7107
7108On such a machine, a pattern for a branch instruction might be specified
7109as follows:
7110
7111@smallexample
7112(define_insn "jump"
7113 [(set (pc)
7114 (label_ref (match_operand 0 "" "")))]
7115 ""
03dda8e3
RK
7116@{
7117 return (get_attr_length (insn) == 4
0f40f9f7
ZW
7118 ? "b %l0" : "l r15,=a(%l0); br r15");
7119@}
9c34dbbf
ZW
7120 [(set (attr "length")
7121 (if_then_else (lt (match_dup 0) (const_int 4096))
7122 (const_int 4)
7123 (const_int 6)))])
03dda8e3
RK
7124@end smallexample
7125
a5249a21
HPN
7126@end ifset
7127@ifset INTERNALS
03dda8e3
RK
7128@node Constant Attributes
7129@subsection Constant Attributes
7130@cindex constant attributes
7131
7132A special form of @code{define_attr}, where the expression for the
7133default value is a @code{const} expression, indicates an attribute that
7134is constant for a given run of the compiler. Constant attributes may be
7135used to specify which variety of processor is used. For example,
7136
7137@smallexample
7138(define_attr "cpu" "m88100,m88110,m88000"
7139 (const
7140 (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
7141 (symbol_ref "TARGET_88110") (const_string "m88110")]
7142 (const_string "m88000"))))
7143
7144(define_attr "memory" "fast,slow"
7145 (const
7146 (if_then_else (symbol_ref "TARGET_FAST_MEM")
7147 (const_string "fast")
7148 (const_string "slow"))))
7149@end smallexample
7150
7151The routine generated for constant attributes has no parameters as it
7152does not depend on any particular insn. RTL expressions used to define
7153the value of a constant attribute may use the @code{symbol_ref} form,
7154but may not use either the @code{match_operand} form or @code{eq_attr}
7155forms involving insn attributes.
7156
a5249a21
HPN
7157@end ifset
7158@ifset INTERNALS
03dda8e3
RK
7159@node Delay Slots
7160@subsection Delay Slot Scheduling
7161@cindex delay slots, defining
7162
7163The insn attribute mechanism can be used to specify the requirements for
7164delay slots, if any, on a target machine. An instruction is said to
7165require a @dfn{delay slot} if some instructions that are physically
7166after the instruction are executed as if they were located before it.
7167Classic examples are branch and call instructions, which often execute
7168the following instruction before the branch or call is performed.
7169
7170On some machines, conditional branch instructions can optionally
7171@dfn{annul} instructions in the delay slot. This means that the
7172instruction will not be executed for certain branch outcomes. Both
7173instructions that annul if the branch is true and instructions that
7174annul if the branch is false are supported.
7175
7176Delay slot scheduling differs from instruction scheduling in that
7177determining whether an instruction needs a delay slot is dependent only
7178on the type of instruction being generated, not on data flow between the
7179instructions. See the next section for a discussion of data-dependent
7180instruction scheduling.
7181
7182@findex define_delay
7183The requirement of an insn needing one or more delay slots is indicated
7184via the @code{define_delay} expression. It has the following form:
7185
7186@smallexample
7187(define_delay @var{test}
7188 [@var{delay-1} @var{annul-true-1} @var{annul-false-1}
7189 @var{delay-2} @var{annul-true-2} @var{annul-false-2}
7190 @dots{}])
7191@end smallexample
7192
7193@var{test} is an attribute test that indicates whether this
7194@code{define_delay} applies to a particular insn. If so, the number of
7195required delay slots is determined by the length of the vector specified
7196as the second argument. An insn placed in delay slot @var{n} must
7197satisfy attribute test @var{delay-n}. @var{annul-true-n} is an
7198attribute test that specifies which insns may be annulled if the branch
7199is true. Similarly, @var{annul-false-n} specifies which insns in the
7200delay slot may be annulled if the branch is false. If annulling is not
bd819a4a 7201supported for that delay slot, @code{(nil)} should be coded.
03dda8e3
RK
7202
7203For example, in the common case where branch and call insns require
7204a single delay slot, which may contain any insn other than a branch or
7205call, the following would be placed in the @file{md} file:
7206
7207@smallexample
7208(define_delay (eq_attr "type" "branch,call")
7209 [(eq_attr "type" "!branch,call") (nil) (nil)])
7210@end smallexample
7211
7212Multiple @code{define_delay} expressions may be specified. In this
7213case, each such expression specifies different delay slot requirements
7214and there must be no insn for which tests in two @code{define_delay}
7215expressions are both true.
7216
7217For example, if we have a machine that requires one delay slot for branches
7218but two for calls, no delay slot can contain a branch or call insn,
7219and any valid insn in the delay slot for the branch can be annulled if the
7220branch is true, we might represent this as follows:
7221
7222@smallexample
7223(define_delay (eq_attr "type" "branch")
7224 [(eq_attr "type" "!branch,call")
7225 (eq_attr "type" "!branch,call")
7226 (nil)])
7227
7228(define_delay (eq_attr "type" "call")
7229 [(eq_attr "type" "!branch,call") (nil) (nil)
7230 (eq_attr "type" "!branch,call") (nil) (nil)])
7231@end smallexample
7232@c the above is *still* too long. --mew 4feb93
7233
a5249a21
HPN
7234@end ifset
7235@ifset INTERNALS
fae15c93
VM
7236@node Processor pipeline description
7237@subsection Specifying processor pipeline description
7238@cindex processor pipeline description
7239@cindex processor functional units
7240@cindex instruction latency time
7241@cindex interlock delays
7242@cindex data dependence delays
7243@cindex reservation delays
7244@cindex pipeline hazard recognizer
7245@cindex automaton based pipeline description
7246@cindex regular expressions
7247@cindex deterministic finite state automaton
7248@cindex automaton based scheduler
7249@cindex RISC
7250@cindex VLIW
7251
ef261fee 7252To achieve better performance, most modern processors
fae15c93
VM
7253(super-pipelined, superscalar @acronym{RISC}, and @acronym{VLIW}
7254processors) have many @dfn{functional units} on which several
7255instructions can be executed simultaneously. An instruction starts
7256execution if its issue conditions are satisfied. If not, the
ef261fee 7257instruction is stalled until its conditions are satisfied. Such
fae15c93 7258@dfn{interlock (pipeline) delay} causes interruption of the fetching
431ae0bf 7259of successor instructions (or demands nop instructions, e.g.@: for some
fae15c93
VM
7260MIPS processors).
7261
7262There are two major kinds of interlock delays in modern processors.
7263The first one is a data dependence delay determining @dfn{instruction
7264latency time}. The instruction execution is not started until all
7265source data have been evaluated by prior instructions (there are more
7266complex cases when the instruction execution starts even when the data
c0478a66 7267are not available but will be ready in given time after the
fae15c93
VM
7268instruction execution start). Taking the data dependence delays into
7269account is simple. The data dependence (true, output, and
7270anti-dependence) delay between two instructions is given by a
7271constant. In most cases this approach is adequate. The second kind
7272of interlock delays is a reservation delay. The reservation delay
7273means that two instructions under execution will be in need of shared
431ae0bf 7274processors resources, i.e.@: buses, internal registers, and/or
fae15c93
VM
7275functional units, which are reserved for some time. Taking this kind
7276of delay into account is complex especially for modern @acronym{RISC}
7277processors.
7278
7279The task of exploiting more processor parallelism is solved by an
ef261fee 7280instruction scheduler. For a better solution to this problem, the
fae15c93 7281instruction scheduler has to have an adequate description of the
fa0aee89
PB
7282processor parallelism (or @dfn{pipeline description}). GCC
7283machine descriptions describe processor parallelism and functional
7284unit reservations for groups of instructions with the aid of
7285@dfn{regular expressions}.
ef261fee
R
7286
7287The GCC instruction scheduler uses a @dfn{pipeline hazard recognizer} to
fae15c93 7288figure out the possibility of the instruction issue by the processor
ef261fee
R
7289on a given simulated processor cycle. The pipeline hazard recognizer is
7290automatically generated from the processor pipeline description. The
fa0aee89
PB
7291pipeline hazard recognizer generated from the machine description
7292is based on a deterministic finite state automaton (@acronym{DFA}):
7293the instruction issue is possible if there is a transition from one
7294automaton state to another one. This algorithm is very fast, and
7295furthermore, its speed is not dependent on processor
7296complexity@footnote{However, the size of the automaton depends on
6ccde948
RW
7297processor complexity. To limit this effect, machine descriptions
7298can split orthogonal parts of the machine description among several
7299automata: but then, since each of these must be stepped independently,
7300this does cause a small decrease in the algorithm's performance.}.
fae15c93 7301
fae15c93 7302@cindex automaton based pipeline description
fa0aee89
PB
7303The rest of this section describes the directives that constitute
7304an automaton-based processor pipeline description. The order of
7305these constructions within the machine description file is not
7306important.
fae15c93
VM
7307
7308@findex define_automaton
7309@cindex pipeline hazard recognizer
7310The following optional construction describes names of automata
7311generated and used for the pipeline hazards recognition. Sometimes
7312the generated finite state automaton used by the pipeline hazard
ef261fee 7313recognizer is large. If we use more than one automaton and bind functional
daf2f129 7314units to the automata, the total size of the automata is usually
fae15c93
VM
7315less than the size of the single automaton. If there is no one such
7316construction, only one finite state automaton is generated.
7317
7318@smallexample
7319(define_automaton @var{automata-names})
7320@end smallexample
7321
7322@var{automata-names} is a string giving names of the automata. The
7323names are separated by commas. All the automata should have unique names.
c62347f0 7324The automaton name is used in the constructions @code{define_cpu_unit} and
fae15c93
VM
7325@code{define_query_cpu_unit}.
7326
7327@findex define_cpu_unit
7328@cindex processor functional units
c62347f0 7329Each processor functional unit used in the description of instruction
fae15c93
VM
7330reservations should be described by the following construction.
7331
7332@smallexample
7333(define_cpu_unit @var{unit-names} [@var{automaton-name}])
7334@end smallexample
7335
7336@var{unit-names} is a string giving the names of the functional units
7337separated by commas. Don't use name @samp{nothing}, it is reserved
7338for other goals.
7339
ef261fee 7340@var{automaton-name} is a string giving the name of the automaton with
fae15c93
VM
7341which the unit is bound. The automaton should be described in
7342construction @code{define_automaton}. You should give
7343@dfn{automaton-name}, if there is a defined automaton.
7344
30028c85
VM
7345The assignment of units to automata are constrained by the uses of the
7346units in insn reservations. The most important constraint is: if a
7347unit reservation is present on a particular cycle of an alternative
7348for an insn reservation, then some unit from the same automaton must
7349be present on the same cycle for the other alternatives of the insn
7350reservation. The rest of the constraints are mentioned in the
7351description of the subsequent constructions.
7352
fae15c93
VM
7353@findex define_query_cpu_unit
7354@cindex querying function unit reservations
7355The following construction describes CPU functional units analogously
30028c85
VM
7356to @code{define_cpu_unit}. The reservation of such units can be
7357queried for an automaton state. The instruction scheduler never
7358queries reservation of functional units for given automaton state. So
7359as a rule, you don't need this construction. This construction could
431ae0bf 7360be used for future code generation goals (e.g.@: to generate
30028c85 7361@acronym{VLIW} insn templates).
fae15c93
VM
7362
7363@smallexample
7364(define_query_cpu_unit @var{unit-names} [@var{automaton-name}])
7365@end smallexample
7366
7367@var{unit-names} is a string giving names of the functional units
7368separated by commas.
7369
ef261fee 7370@var{automaton-name} is a string giving the name of the automaton with
fae15c93
VM
7371which the unit is bound.
7372
7373@findex define_insn_reservation
7374@cindex instruction latency time
7375@cindex regular expressions
7376@cindex data bypass
ef261fee 7377The following construction is the major one to describe pipeline
fae15c93
VM
7378characteristics of an instruction.
7379
7380@smallexample
7381(define_insn_reservation @var{insn-name} @var{default_latency}
7382 @var{condition} @var{regexp})
7383@end smallexample
7384
7385@var{default_latency} is a number giving latency time of the
7386instruction. There is an important difference between the old
7387description and the automaton based pipeline description. The latency
7388time is used for all dependencies when we use the old description. In
ef261fee
R
7389the automaton based pipeline description, the given latency time is only
7390used for true dependencies. The cost of anti-dependencies is always
fae15c93
VM
7391zero and the cost of output dependencies is the difference between
7392latency times of the producing and consuming insns (if the difference
ef261fee
R
7393is negative, the cost is considered to be zero). You can always
7394change the default costs for any description by using the target hook
fae15c93
VM
7395@code{TARGET_SCHED_ADJUST_COST} (@pxref{Scheduling}).
7396
cc6a602b 7397@var{insn-name} is a string giving the internal name of the insn. The
fae15c93
VM
7398internal names are used in constructions @code{define_bypass} and in
7399the automaton description file generated for debugging. The internal
ef261fee 7400name has nothing in common with the names in @code{define_insn}. It is a
fae15c93
VM
7401good practice to use insn classes described in the processor manual.
7402
7403@var{condition} defines what RTL insns are described by this
7404construction. You should remember that you will be in trouble if
7405@var{condition} for two or more different
7406@code{define_insn_reservation} constructions is TRUE for an insn. In
7407this case what reservation will be used for the insn is not defined.
7408Such cases are not checked during generation of the pipeline hazards
7409recognizer because in general recognizing that two conditions may have
7410the same value is quite difficult (especially if the conditions
7411contain @code{symbol_ref}). It is also not checked during the
7412pipeline hazard recognizer work because it would slow down the
7413recognizer considerably.
7414
ef261fee 7415@var{regexp} is a string describing the reservation of the cpu's functional
fae15c93
VM
7416units by the instruction. The reservations are described by a regular
7417expression according to the following syntax:
7418
7419@smallexample
7420 regexp = regexp "," oneof
7421 | oneof
7422
7423 oneof = oneof "|" allof
7424 | allof
7425
7426 allof = allof "+" repeat
7427 | repeat
daf2f129 7428
fae15c93
VM
7429 repeat = element "*" number
7430 | element
7431
7432 element = cpu_function_unit_name
7433 | reservation_name
7434 | result_name
7435 | "nothing"
7436 | "(" regexp ")"
7437@end smallexample
7438
7439@itemize @bullet
7440@item
7441@samp{,} is used for describing the start of the next cycle in
7442the reservation.
7443
7444@item
7445@samp{|} is used for describing a reservation described by the first
7446regular expression @strong{or} a reservation described by the second
7447regular expression @strong{or} etc.
7448
7449@item
7450@samp{+} is used for describing a reservation described by the first
7451regular expression @strong{and} a reservation described by the
7452second regular expression @strong{and} etc.
7453
7454@item
7455@samp{*} is used for convenience and simply means a sequence in which
7456the regular expression are repeated @var{number} times with cycle
7457advancing (see @samp{,}).
7458
7459@item
7460@samp{cpu_function_unit_name} denotes reservation of the named
7461functional unit.
7462
7463@item
7464@samp{reservation_name} --- see description of construction
7465@samp{define_reservation}.
7466
7467@item
7468@samp{nothing} denotes no unit reservations.
7469@end itemize
7470
7471@findex define_reservation
7472Sometimes unit reservations for different insns contain common parts.
7473In such case, you can simplify the pipeline description by describing
7474the common part by the following construction
7475
7476@smallexample
7477(define_reservation @var{reservation-name} @var{regexp})
7478@end smallexample
7479
7480@var{reservation-name} is a string giving name of @var{regexp}.
7481Functional unit names and reservation names are in the same name
7482space. So the reservation names should be different from the
cc6a602b 7483functional unit names and can not be the reserved name @samp{nothing}.
fae15c93
VM
7484
7485@findex define_bypass
7486@cindex instruction latency time
7487@cindex data bypass
7488The following construction is used to describe exceptions in the
7489latency time for given instruction pair. This is so called bypasses.
7490
7491@smallexample
7492(define_bypass @var{number} @var{out_insn_names} @var{in_insn_names}
7493 [@var{guard}])
7494@end smallexample
7495
7496@var{number} defines when the result generated by the instructions
7497given in string @var{out_insn_names} will be ready for the
7498instructions given in string @var{in_insn_names}. The instructions in
7499the string are separated by commas.
7500
ef261fee 7501@var{guard} is an optional string giving the name of a C function which
fae15c93
VM
7502defines an additional guard for the bypass. The function will get the
7503two insns as parameters. If the function returns zero the bypass will
7504be ignored for this case. The additional guard is necessary to
431ae0bf 7505recognize complicated bypasses, e.g.@: when the consumer is only an address
fae15c93
VM
7506of insn @samp{store} (not a stored value).
7507
20a07f44
VM
7508If there are more one bypass with the same output and input insns, the
7509chosen bypass is the first bypass with a guard in description whose
7510guard function returns nonzero. If there is no such bypass, then
7511bypass without the guard function is chosen.
7512
fae15c93
VM
7513@findex exclusion_set
7514@findex presence_set
30028c85 7515@findex final_presence_set
fae15c93 7516@findex absence_set
30028c85 7517@findex final_absence_set
fae15c93
VM
7518@cindex VLIW
7519@cindex RISC
cc6a602b
BE
7520The following five constructions are usually used to describe
7521@acronym{VLIW} processors, or more precisely, to describe a placement
7522of small instructions into @acronym{VLIW} instruction slots. They
7523can be used for @acronym{RISC} processors, too.
fae15c93
VM
7524
7525@smallexample
7526(exclusion_set @var{unit-names} @var{unit-names})
30028c85
VM
7527(presence_set @var{unit-names} @var{patterns})
7528(final_presence_set @var{unit-names} @var{patterns})
7529(absence_set @var{unit-names} @var{patterns})
7530(final_absence_set @var{unit-names} @var{patterns})
fae15c93
VM
7531@end smallexample
7532
7533@var{unit-names} is a string giving names of functional units
7534separated by commas.
7535
30028c85 7536@var{patterns} is a string giving patterns of functional units
0bdcd332 7537separated by comma. Currently pattern is one unit or units
30028c85
VM
7538separated by white-spaces.
7539
fae15c93
VM
7540The first construction (@samp{exclusion_set}) means that each
7541functional unit in the first string can not be reserved simultaneously
7542with a unit whose name is in the second string and vice versa. For
7543example, the construction is useful for describing processors
431ae0bf 7544(e.g.@: some SPARC processors) with a fully pipelined floating point
fae15c93
VM
7545functional unit which can execute simultaneously only single floating
7546point insns or only double floating point insns.
7547
7548The second construction (@samp{presence_set}) means that each
7549functional unit in the first string can not be reserved unless at
30028c85
VM
7550least one of pattern of units whose names are in the second string is
7551reserved. This is an asymmetric relation. For example, it is useful
7552for description that @acronym{VLIW} @samp{slot1} is reserved after
7553@samp{slot0} reservation. We could describe it by the following
7554construction
7555
7556@smallexample
7557(presence_set "slot1" "slot0")
7558@end smallexample
7559
7560Or @samp{slot1} is reserved only after @samp{slot0} and unit @samp{b0}
7561reservation. In this case we could write
7562
7563@smallexample
7564(presence_set "slot1" "slot0 b0")
7565@end smallexample
7566
7567The third construction (@samp{final_presence_set}) is analogous to
7568@samp{presence_set}. The difference between them is when checking is
7569done. When an instruction is issued in given automaton state
7570reflecting all current and planned unit reservations, the automaton
7571state is changed. The first state is a source state, the second one
7572is a result state. Checking for @samp{presence_set} is done on the
7573source state reservation, checking for @samp{final_presence_set} is
7574done on the result reservation. This construction is useful to
7575describe a reservation which is actually two subsequent reservations.
7576For example, if we use
7577
7578@smallexample
7579(presence_set "slot1" "slot0")
7580@end smallexample
7581
7582the following insn will be never issued (because @samp{slot1} requires
7583@samp{slot0} which is absent in the source state).
7584
7585@smallexample
7586(define_reservation "insn_and_nop" "slot0 + slot1")
7587@end smallexample
7588
7589but it can be issued if we use analogous @samp{final_presence_set}.
7590
7591The forth construction (@samp{absence_set}) means that each functional
7592unit in the first string can be reserved only if each pattern of units
7593whose names are in the second string is not reserved. This is an
7594asymmetric relation (actually @samp{exclusion_set} is analogous to
a71b1c58
NC
7595this one but it is symmetric). For example it might be useful in a
7596@acronym{VLIW} description to say that @samp{slot0} cannot be reserved
7597after either @samp{slot1} or @samp{slot2} have been reserved. This
7598can be described as:
30028c85
VM
7599
7600@smallexample
a71b1c58 7601(absence_set "slot0" "slot1, slot2")
30028c85
VM
7602@end smallexample
7603
7604Or @samp{slot2} can not be reserved if @samp{slot0} and unit @samp{b0}
7605are reserved or @samp{slot1} and unit @samp{b1} are reserved. In
7606this case we could write
7607
7608@smallexample
7609(absence_set "slot2" "slot0 b0, slot1 b1")
7610@end smallexample
fae15c93 7611
ef261fee 7612All functional units mentioned in a set should belong to the same
fae15c93
VM
7613automaton.
7614
30028c85
VM
7615The last construction (@samp{final_absence_set}) is analogous to
7616@samp{absence_set} but checking is done on the result (state)
7617reservation. See comments for @samp{final_presence_set}.
7618
fae15c93
VM
7619@findex automata_option
7620@cindex deterministic finite state automaton
7621@cindex nondeterministic finite state automaton
7622@cindex finite state automaton minimization
7623You can control the generator of the pipeline hazard recognizer with
7624the following construction.
7625
7626@smallexample
7627(automata_option @var{options})
7628@end smallexample
7629
7630@var{options} is a string giving options which affect the generated
7631code. Currently there are the following options:
7632
7633@itemize @bullet
7634@item
7635@dfn{no-minimization} makes no minimization of the automaton. This is
30028c85
VM
7636only worth to do when we are debugging the description and need to
7637look more accurately at reservations of states.
fae15c93
VM
7638
7639@item
df1133a6
BE
7640@dfn{time} means printing time statistics about the generation of
7641automata.
7642
7643@item
7644@dfn{stats} means printing statistics about the generated automata
7645such as the number of DFA states, NDFA states and arcs.
e3c8eb86
VM
7646
7647@item
7648@dfn{v} means a generation of the file describing the result automata.
7649The file has suffix @samp{.dfa} and can be used for the description
7650verification and debugging.
7651
7652@item
7653@dfn{w} means a generation of warning instead of error for
7654non-critical errors.
fae15c93
VM
7655
7656@item
7657@dfn{ndfa} makes nondeterministic finite state automata. This affects
7658the treatment of operator @samp{|} in the regular expressions. The
7659usual treatment of the operator is to try the first alternative and,
7660if the reservation is not possible, the second alternative. The
7661nondeterministic treatment means trying all alternatives, some of them
96ddf8ef 7662may be rejected by reservations in the subsequent insns.
dfa849f3
VM
7663
7664@item
7665@dfn{progress} means output of a progress bar showing how many states
7666were generated so far for automaton being processed. This is useful
7667during debugging a @acronym{DFA} description. If you see too many
7668generated states, you could interrupt the generator of the pipeline
7669hazard recognizer and try to figure out a reason for generation of the
7670huge automaton.
fae15c93
VM
7671@end itemize
7672
7673As an example, consider a superscalar @acronym{RISC} machine which can
7674issue three insns (two integer insns and one floating point insn) on
7675the cycle but can finish only two insns. To describe this, we define
7676the following functional units.
7677
7678@smallexample
7679(define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
ef261fee 7680(define_cpu_unit "port0, port1")
fae15c93
VM
7681@end smallexample
7682
7683All simple integer insns can be executed in any integer pipeline and
7684their result is ready in two cycles. The simple integer insns are
7685issued into the first pipeline unless it is reserved, otherwise they
7686are issued into the second pipeline. Integer division and
7687multiplication insns can be executed only in the second integer
7688pipeline and their results are ready correspondingly in 8 and 4
431ae0bf 7689cycles. The integer division is not pipelined, i.e.@: the subsequent
fae15c93
VM
7690integer division insn can not be issued until the current division
7691insn finished. Floating point insns are fully pipelined and their
ef261fee
R
7692results are ready in 3 cycles. Where the result of a floating point
7693insn is used by an integer insn, an additional delay of one cycle is
7694incurred. To describe all of this we could specify
fae15c93
VM
7695
7696@smallexample
7697(define_cpu_unit "div")
7698
68e4d4c5 7699(define_insn_reservation "simple" 2 (eq_attr "type" "int")
ef261fee 7700 "(i0_pipeline | i1_pipeline), (port0 | port1)")
fae15c93 7701
68e4d4c5 7702(define_insn_reservation "mult" 4 (eq_attr "type" "mult")
ef261fee 7703 "i1_pipeline, nothing*2, (port0 | port1)")
fae15c93 7704
68e4d4c5 7705(define_insn_reservation "div" 8 (eq_attr "type" "div")
ef261fee 7706 "i1_pipeline, div*7, div + (port0 | port1)")
fae15c93 7707
68e4d4c5 7708(define_insn_reservation "float" 3 (eq_attr "type" "float")
ef261fee 7709 "f_pipeline, nothing, (port0 | port1))
fae15c93 7710
ef261fee 7711(define_bypass 4 "float" "simple,mult,div")
fae15c93
VM
7712@end smallexample
7713
7714To simplify the description we could describe the following reservation
7715
7716@smallexample
7717(define_reservation "finish" "port0|port1")
7718@end smallexample
7719
7720and use it in all @code{define_insn_reservation} as in the following
7721construction
7722
7723@smallexample
68e4d4c5 7724(define_insn_reservation "simple" 2 (eq_attr "type" "int")
fae15c93
VM
7725 "(i0_pipeline | i1_pipeline), finish")
7726@end smallexample
7727
7728
a5249a21
HPN
7729@end ifset
7730@ifset INTERNALS
3262c1f5
RH
7731@node Conditional Execution
7732@section Conditional Execution
7733@cindex conditional execution
7734@cindex predication
7735
7736A number of architectures provide for some form of conditional
7737execution, or predication. The hallmark of this feature is the
7738ability to nullify most of the instructions in the instruction set.
7739When the instruction set is large and not entirely symmetric, it
7740can be quite tedious to describe these forms directly in the
7741@file{.md} file. An alternative is the @code{define_cond_exec} template.
7742
7743@findex define_cond_exec
7744@smallexample
7745(define_cond_exec
7746 [@var{predicate-pattern}]
7747 "@var{condition}"
630d3d5a 7748 "@var{output-template}")
3262c1f5
RH
7749@end smallexample
7750
7751@var{predicate-pattern} is the condition that must be true for the
7752insn to be executed at runtime and should match a relational operator.
7753One can use @code{match_operator} to match several relational operators
7754at once. Any @code{match_operand} operands must have no more than one
7755alternative.
7756
7757@var{condition} is a C expression that must be true for the generated
7758pattern to match.
7759
7760@findex current_insn_predicate
630d3d5a 7761@var{output-template} is a string similar to the @code{define_insn}
3262c1f5
RH
7762output template (@pxref{Output Template}), except that the @samp{*}
7763and @samp{@@} special cases do not apply. This is only useful if the
7764assembly text for the predicate is a simple prefix to the main insn.
7765In order to handle the general case, there is a global variable
7766@code{current_insn_predicate} that will contain the entire predicate
7767if the current insn is predicated, and will otherwise be @code{NULL}.
7768
ebb48a4d
JM
7769When @code{define_cond_exec} is used, an implicit reference to
7770the @code{predicable} instruction attribute is made.
e979f9e8 7771@xref{Insn Attributes}. This attribute must be boolean (i.e.@: have
3262c1f5
RH
7772exactly two elements in its @var{list-of-values}). Further, it must
7773not be used with complex expressions. That is, the default and all
ebb48a4d 7774uses in the insns must be a simple constant, not dependent on the
3262c1f5
RH
7775alternative or anything else.
7776
ebb48a4d 7777For each @code{define_insn} for which the @code{predicable}
3262c1f5
RH
7778attribute is true, a new @code{define_insn} pattern will be
7779generated that matches a predicated version of the instruction.
7780For example,
7781
7782@smallexample
7783(define_insn "addsi"
7784 [(set (match_operand:SI 0 "register_operand" "r")
7785 (plus:SI (match_operand:SI 1 "register_operand" "r")
7786 (match_operand:SI 2 "register_operand" "r")))]
7787 "@var{test1}"
7788 "add %2,%1,%0")
7789
7790(define_cond_exec
7791 [(ne (match_operand:CC 0 "register_operand" "c")
7792 (const_int 0))]
7793 "@var{test2}"
7794 "(%0)")
7795@end smallexample
7796
7797@noindent
7798generates a new pattern
7799
7800@smallexample
7801(define_insn ""
7802 [(cond_exec
7803 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
7804 (set (match_operand:SI 0 "register_operand" "r")
7805 (plus:SI (match_operand:SI 1 "register_operand" "r")
7806 (match_operand:SI 2 "register_operand" "r"))))]
7807 "(@var{test2}) && (@var{test1})"
7808 "(%3) add %2,%1,%0")
7809@end smallexample
c25c12b8 7810
a5249a21
HPN
7811@end ifset
7812@ifset INTERNALS
c25c12b8
R
7813@node Constant Definitions
7814@section Constant Definitions
7815@cindex constant definitions
7816@findex define_constants
7817
7818Using literal constants inside instruction patterns reduces legibility and
7819can be a maintenance problem.
7820
7821To overcome this problem, you may use the @code{define_constants}
7822expression. It contains a vector of name-value pairs. From that
7823point on, wherever any of the names appears in the MD file, it is as
7824if the corresponding value had been written instead. You may use
7825@code{define_constants} multiple times; each appearance adds more
7826constants to the table. It is an error to redefine a constant with
7827a different value.
7828
7829To come back to the a29k load multiple example, instead of
7830
7831@smallexample
7832(define_insn ""
7833 [(match_parallel 0 "load_multiple_operation"
7834 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
7835 (match_operand:SI 2 "memory_operand" "m"))
7836 (use (reg:SI 179))
7837 (clobber (reg:SI 179))])]
7838 ""
7839 "loadm 0,0,%1,%2")
7840@end smallexample
7841
7842You could write:
7843
7844@smallexample
7845(define_constants [
7846 (R_BP 177)
7847 (R_FC 178)
7848 (R_CR 179)
7849 (R_Q 180)
7850])
7851
7852(define_insn ""
7853 [(match_parallel 0 "load_multiple_operation"
7854 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
7855 (match_operand:SI 2 "memory_operand" "m"))
7856 (use (reg:SI R_CR))
7857 (clobber (reg:SI R_CR))])]
7858 ""
7859 "loadm 0,0,%1,%2")
7860@end smallexample
7861
7862The constants that are defined with a define_constant are also output
7863in the insn-codes.h header file as #defines.
b11cc610 7864@end ifset
032e8348 7865@ifset INTERNALS
3abcb3a7
HPN
7866@node Iterators
7867@section Iterators
7868@cindex iterators in @file{.md} files
032e8348
RS
7869
7870Ports often need to define similar patterns for more than one machine
3abcb3a7 7871mode or for more than one rtx code. GCC provides some simple iterator
032e8348
RS
7872facilities to make this process easier.
7873
7874@menu
3abcb3a7
HPN
7875* Mode Iterators:: Generating variations of patterns for different modes.
7876* Code Iterators:: Doing the same for codes.
032e8348
RS
7877@end menu
7878
3abcb3a7
HPN
7879@node Mode Iterators
7880@subsection Mode Iterators
7881@cindex mode iterators in @file{.md} files
032e8348
RS
7882
7883Ports often need to define similar patterns for two or more different modes.
7884For example:
7885
7886@itemize @bullet
7887@item
7888If a processor has hardware support for both single and double
7889floating-point arithmetic, the @code{SFmode} patterns tend to be
7890very similar to the @code{DFmode} ones.
7891
7892@item
7893If a port uses @code{SImode} pointers in one configuration and
7894@code{DImode} pointers in another, it will usually have very similar
7895@code{SImode} and @code{DImode} patterns for manipulating pointers.
7896@end itemize
7897
3abcb3a7 7898Mode iterators allow several patterns to be instantiated from one
032e8348
RS
7899@file{.md} file template. They can be used with any type of
7900rtx-based construct, such as a @code{define_insn},
7901@code{define_split}, or @code{define_peephole2}.
7902
7903@menu
3abcb3a7 7904* Defining Mode Iterators:: Defining a new mode iterator.
6ccde948
RW
7905* Substitutions:: Combining mode iterators with substitutions
7906* Examples:: Examples
032e8348
RS
7907@end menu
7908
3abcb3a7
HPN
7909@node Defining Mode Iterators
7910@subsubsection Defining Mode Iterators
7911@findex define_mode_iterator
032e8348 7912
3abcb3a7 7913The syntax for defining a mode iterator is:
032e8348
RS
7914
7915@smallexample
923158be 7916(define_mode_iterator @var{name} [(@var{mode1} "@var{cond1}") @dots{} (@var{moden} "@var{condn}")])
032e8348
RS
7917@end smallexample
7918
7919This allows subsequent @file{.md} file constructs to use the mode suffix
7920@code{:@var{name}}. Every construct that does so will be expanded
7921@var{n} times, once with every use of @code{:@var{name}} replaced by
7922@code{:@var{mode1}}, once with every use replaced by @code{:@var{mode2}},
7923and so on. In the expansion for a particular @var{modei}, every
7924C condition will also require that @var{condi} be true.
7925
7926For example:
7927
7928@smallexample
3abcb3a7 7929(define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
032e8348
RS
7930@end smallexample
7931
7932defines a new mode suffix @code{:P}. Every construct that uses
7933@code{:P} will be expanded twice, once with every @code{:P} replaced
7934by @code{:SI} and once with every @code{:P} replaced by @code{:DI}.
7935The @code{:SI} version will only apply if @code{Pmode == SImode} and
7936the @code{:DI} version will only apply if @code{Pmode == DImode}.
7937
7938As with other @file{.md} conditions, an empty string is treated
7939as ``always true''. @code{(@var{mode} "")} can also be abbreviated
7940to @code{@var{mode}}. For example:
7941
7942@smallexample
3abcb3a7 7943(define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
032e8348
RS
7944@end smallexample
7945
7946means that the @code{:DI} expansion only applies if @code{TARGET_64BIT}
7947but that the @code{:SI} expansion has no such constraint.
7948
3abcb3a7
HPN
7949Iterators are applied in the order they are defined. This can be
7950significant if two iterators are used in a construct that requires
f30990b2 7951substitutions. @xref{Substitutions}.
032e8348 7952
f30990b2 7953@node Substitutions
3abcb3a7 7954@subsubsection Substitution in Mode Iterators
032e8348
RS
7955@findex define_mode_attr
7956
3abcb3a7 7957If an @file{.md} file construct uses mode iterators, each version of the
f30990b2
ILT
7958construct will often need slightly different strings or modes. For
7959example:
032e8348
RS
7960
7961@itemize @bullet
7962@item
7963When a @code{define_expand} defines several @code{add@var{m}3} patterns
7964(@pxref{Standard Names}), each expander will need to use the
7965appropriate mode name for @var{m}.
7966
7967@item
7968When a @code{define_insn} defines several instruction patterns,
7969each instruction will often use a different assembler mnemonic.
f30990b2
ILT
7970
7971@item
7972When a @code{define_insn} requires operands with different modes,
3abcb3a7 7973using an iterator for one of the operand modes usually requires a specific
f30990b2 7974mode for the other operand(s).
032e8348
RS
7975@end itemize
7976
7977GCC supports such variations through a system of ``mode attributes''.
7978There are two standard attributes: @code{mode}, which is the name of
7979the mode in lower case, and @code{MODE}, which is the same thing in
7980upper case. You can define other attributes using:
7981
7982@smallexample
923158be 7983(define_mode_attr @var{name} [(@var{mode1} "@var{value1}") @dots{} (@var{moden} "@var{valuen}")])
032e8348
RS
7984@end smallexample
7985
7986where @var{name} is the name of the attribute and @var{valuei}
7987is the value associated with @var{modei}.
7988
3abcb3a7 7989When GCC replaces some @var{:iterator} with @var{:mode}, it will scan
f30990b2 7990each string and mode in the pattern for sequences of the form
3abcb3a7 7991@code{<@var{iterator}:@var{attr}>}, where @var{attr} is the name of a
f30990b2 7992mode attribute. If the attribute is defined for @var{mode}, the whole
923158be 7993@code{<@dots{}>} sequence will be replaced by the appropriate attribute
f30990b2 7994value.
032e8348
RS
7995
7996For example, suppose an @file{.md} file has:
7997
7998@smallexample
3abcb3a7 7999(define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
032e8348
RS
8000(define_mode_attr load [(SI "lw") (DI "ld")])
8001@end smallexample
8002
8003If one of the patterns that uses @code{:P} contains the string
8004@code{"<P:load>\t%0,%1"}, the @code{SI} version of that pattern
8005will use @code{"lw\t%0,%1"} and the @code{DI} version will use
8006@code{"ld\t%0,%1"}.
8007
f30990b2
ILT
8008Here is an example of using an attribute for a mode:
8009
8010@smallexample
3abcb3a7 8011(define_mode_iterator LONG [SI DI])
f30990b2 8012(define_mode_attr SHORT [(SI "HI") (DI "SI")])
923158be
RW
8013(define_insn @dots{}
8014 (sign_extend:LONG (match_operand:<LONG:SHORT> @dots{})) @dots{})
f30990b2
ILT
8015@end smallexample
8016
3abcb3a7
HPN
8017The @code{@var{iterator}:} prefix may be omitted, in which case the
8018substitution will be attempted for every iterator expansion.
032e8348
RS
8019
8020@node Examples
3abcb3a7 8021@subsubsection Mode Iterator Examples
032e8348
RS
8022
8023Here is an example from the MIPS port. It defines the following
8024modes and attributes (among others):
8025
8026@smallexample
3abcb3a7 8027(define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
032e8348
RS
8028(define_mode_attr d [(SI "") (DI "d")])
8029@end smallexample
8030
8031and uses the following template to define both @code{subsi3}
8032and @code{subdi3}:
8033
8034@smallexample
8035(define_insn "sub<mode>3"
8036 [(set (match_operand:GPR 0 "register_operand" "=d")
8037 (minus:GPR (match_operand:GPR 1 "register_operand" "d")
8038 (match_operand:GPR 2 "register_operand" "d")))]
8039 ""
8040 "<d>subu\t%0,%1,%2"
8041 [(set_attr "type" "arith")
8042 (set_attr "mode" "<MODE>")])
8043@end smallexample
8044
8045This is exactly equivalent to:
8046
8047@smallexample
8048(define_insn "subsi3"
8049 [(set (match_operand:SI 0 "register_operand" "=d")
8050 (minus:SI (match_operand:SI 1 "register_operand" "d")
8051 (match_operand:SI 2 "register_operand" "d")))]
8052 ""
8053 "subu\t%0,%1,%2"
8054 [(set_attr "type" "arith")
8055 (set_attr "mode" "SI")])
8056
8057(define_insn "subdi3"
8058 [(set (match_operand:DI 0 "register_operand" "=d")
8059 (minus:DI (match_operand:DI 1 "register_operand" "d")
8060 (match_operand:DI 2 "register_operand" "d")))]
8061 ""
8062 "dsubu\t%0,%1,%2"
8063 [(set_attr "type" "arith")
8064 (set_attr "mode" "DI")])
8065@end smallexample
8066
3abcb3a7
HPN
8067@node Code Iterators
8068@subsection Code Iterators
8069@cindex code iterators in @file{.md} files
8070@findex define_code_iterator
032e8348
RS
8071@findex define_code_attr
8072
3abcb3a7 8073Code iterators operate in a similar way to mode iterators. @xref{Mode Iterators}.
032e8348
RS
8074
8075The construct:
8076
8077@smallexample
923158be 8078(define_code_iterator @var{name} [(@var{code1} "@var{cond1}") @dots{} (@var{coden} "@var{condn}")])
032e8348
RS
8079@end smallexample
8080
8081defines a pseudo rtx code @var{name} that can be instantiated as
8082@var{codei} if condition @var{condi} is true. Each @var{codei}
8083must have the same rtx format. @xref{RTL Classes}.
8084
3abcb3a7 8085As with mode iterators, each pattern that uses @var{name} will be
032e8348
RS
8086expanded @var{n} times, once with all uses of @var{name} replaced by
8087@var{code1}, once with all uses replaced by @var{code2}, and so on.
3abcb3a7 8088@xref{Defining Mode Iterators}.
032e8348
RS
8089
8090It is possible to define attributes for codes as well as for modes.
8091There are two standard code attributes: @code{code}, the name of the
8092code in lower case, and @code{CODE}, the name of the code in upper case.
8093Other attributes are defined using:
8094
8095@smallexample
923158be 8096(define_code_attr @var{name} [(@var{code1} "@var{value1}") @dots{} (@var{coden} "@var{valuen}")])
032e8348
RS
8097@end smallexample
8098
3abcb3a7 8099Here's an example of code iterators in action, taken from the MIPS port:
032e8348
RS
8100
8101@smallexample
3abcb3a7
HPN
8102(define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
8103 eq ne gt ge lt le gtu geu ltu leu])
032e8348
RS
8104
8105(define_expand "b<code>"
8106 [(set (pc)
8107 (if_then_else (any_cond:CC (cc0)
8108 (const_int 0))
8109 (label_ref (match_operand 0 ""))
8110 (pc)))]
8111 ""
8112@{
8113 gen_conditional_branch (operands, <CODE>);
8114 DONE;
8115@})
8116@end smallexample
8117
8118This is equivalent to:
8119
8120@smallexample
8121(define_expand "bunordered"
8122 [(set (pc)
8123 (if_then_else (unordered:CC (cc0)
8124 (const_int 0))
8125 (label_ref (match_operand 0 ""))
8126 (pc)))]
8127 ""
8128@{
8129 gen_conditional_branch (operands, UNORDERED);
8130 DONE;
8131@})
8132
8133(define_expand "bordered"
8134 [(set (pc)
8135 (if_then_else (ordered:CC (cc0)
8136 (const_int 0))
8137 (label_ref (match_operand 0 ""))
8138 (pc)))]
8139 ""
8140@{
8141 gen_conditional_branch (operands, ORDERED);
8142 DONE;
8143@})
8144
923158be 8145@dots{}
032e8348
RS
8146@end smallexample
8147
8148@end ifset