gccrs: Add test
[official-gcc.git] / gcc / doc / md.texi
blob07bf8bdebffb2e523f25a41f2b57e43c0276b745
1 @c Copyright (C) 1988-2023 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @ifset INTERNALS
6 @node Machine Desc
7 @chapter Machine Descriptions
8 @cindex machine descriptions
10 A machine description has two parts: a file of instruction patterns
11 (@file{.md} file) and a C header file of macro definitions.
13 The @file{.md} file for a target machine contains a pattern for each
14 instruction that the target machine supports (or at least each instruction
15 that is worth telling the compiler about).  It may also contain comments.
16 A semicolon causes the rest of the line to be a comment, unless the semicolon
17 is inside a quoted string.
19 See the next chapter for information on the C header file.
21 @menu
22 * Overview::            How the machine description is used.
23 * Patterns::            How to write instruction patterns.
24 * Example::             An explained example of a @code{define_insn} pattern.
25 * RTL Template::        The RTL template defines what insns match a pattern.
26 * Output Template::     The output template says how to make assembler code
27                         from such an insn.
28 * Output Statement::    For more generality, write C code to output
29                         the assembler code.
30 * Predicates::          Controlling what kinds of operands can be used
31                         for an insn.
32 * Constraints::         Fine-tuning operand selection.
33 * Standard Names::      Names mark patterns to use for code generation.
34 * Pattern Ordering::    When the order of patterns makes a difference.
35 * Dependent Patterns::  Having one pattern may make you need another.
36 * Jump Patterns::       Special considerations for patterns for jump insns.
37 * Looping Patterns::    How to define patterns for special looping insns.
38 * Insn Canonicalizations::Canonicalization of Instructions
39 * Expander Definitions::Generating a sequence of several RTL insns
40                         for a standard operation.
41 * Insn Splitting::      Splitting Instructions into Multiple Instructions.
42 * Including Patterns::  Including Patterns in Machine Descriptions.
43 * Peephole Definitions::Defining machine-specific peephole optimizations.
44 * Insn Attributes::     Specifying the value of attributes for generated insns.
45 * Conditional Execution::Generating @code{define_insn} patterns for
46                          predication.
47 * Define Subst::        Generating @code{define_insn} and @code{define_expand}
48                         patterns from other patterns.
49 * Constant Definitions::Defining symbolic constants that can be used in the
50                         md file.
51 * Iterators::           Using iterators to generate patterns from a template.
52 @end menu
54 @node Overview
55 @section Overview of How the Machine Description is Used
57 There are three main conversions that happen in the compiler:
59 @enumerate
61 @item
62 The front end reads the source code and builds a parse tree.
64 @item
65 The parse tree is used to generate an RTL insn list based on named
66 instruction patterns.
68 @item
69 The insn list is matched against the RTL templates to produce assembler
70 code.
72 @end enumerate
74 For the generate pass, only the names of the insns matter, from either a
75 named @code{define_insn} or a @code{define_expand}.  The compiler will
76 choose the pattern with the right name and apply the operands according
77 to the documentation later in this chapter, without regard for the RTL
78 template or operand constraints.  Note that the names the compiler looks
79 for are hard-coded in the compiler---it will ignore unnamed patterns and
80 patterns with names it doesn't know about, but if you don't provide a
81 named pattern it needs, it will abort.
83 If a @code{define_insn} is used, the template given is inserted into the
84 insn list.  If a @code{define_expand} is used, one of three things
85 happens, based on the condition logic.  The condition logic may manually
86 create new insns for the insn list, say via @code{emit_insn()}, and
87 invoke @code{DONE}.  For certain named patterns, it may invoke @code{FAIL} to tell the
88 compiler to use an alternate way of performing that task.  If it invokes
89 neither @code{DONE} nor @code{FAIL}, the template given in the pattern
90 is inserted, as if the @code{define_expand} were a @code{define_insn}.
92 Once the insn list is generated, various optimization passes convert,
93 replace, and rearrange the insns in the insn list.  This is where the
94 @code{define_split} and @code{define_peephole} patterns get used, for
95 example.
97 Finally, 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
99 final assembly code.  For this purpose, each named @code{define_insn}
100 acts like it's unnamed, since the names are ignored.
102 @node Patterns
103 @section Everything about Instruction Patterns
104 @cindex patterns
105 @cindex instruction patterns
107 @findex define_insn
108 A @code{define_insn} expression is used to define instruction patterns
109 to which insns may be matched.  A @code{define_insn} expression contains
110 an incomplete RTL expression, with pieces to be filled in later, operand
111 constraints that restrict how the pieces can be filled in, and an output
112 template or C code to generate the assembler output.
114 A @code{define_insn} is an RTL expression containing four or five operands:
116 @enumerate
117 @item
118 An optional name @var{n}.  When a name is present, the compiler
119 automically generates a C++ function @samp{gen_@var{n}} that takes
120 the operands of the instruction as arguments and returns the instruction's
121 rtx pattern.  The compiler also assigns the instruction a unique code
122 @samp{CODE_FOR_@var{n}}, with all such codes belonging to an enum
123 called @code{insn_code}.
125 These names serve one of two purposes.  The first is to indicate that the
126 instruction performs a certain standard job for the RTL-generation
127 pass of the compiler, such as a move, an addition, or a conditional
128 jump.  The second is to help the target generate certain target-specific
129 operations, such as when implementing target-specific intrinsic functions.
131 It is better to prefix target-specific names with the name of the
132 target, to avoid any clash with current or future standard names.
134 The absence of a name is indicated by writing an empty string
135 where the name should go.  Nameless instruction patterns are never
136 used for generating RTL code, but they may permit several simpler insns
137 to be combined later on.
139 For the purpose of debugging the compiler, you may also specify a
140 name beginning with the @samp{*} character.  Such a name is used only
141 for identifying the instruction in RTL dumps; it is equivalent to having
142 a nameless pattern for all other purposes.  Names beginning with the
143 @samp{*} character are not required to be unique.
145 The name may also have the form @samp{@@@var{n}}.  This has the same
146 effect as a name @samp{@var{n}}, but in addition tells the compiler to
147 generate further helper functions; see @ref{Parameterized Names} for details.
149 @item
150 The @dfn{RTL template}: This is a vector of incomplete RTL expressions
151 which describe the semantics of the instruction (@pxref{RTL Template}).
152 It is incomplete because it may contain @code{match_operand},
153 @code{match_operator}, and @code{match_dup} expressions that stand for
154 operands of the instruction.
156 If the vector has multiple elements, the RTL template is treated as a
157 @code{parallel} expression.
159 @cindex pattern conditions
160 @cindex conditions, in patterns
161 @item
162 The condition: This is a string which contains a C expression.  When the
163 compiler attempts to match RTL against a pattern, the condition is
164 evaluated.  If the condition evaluates to @code{true}, the match is
165 permitted.  The condition may be an empty string, which is treated
166 as always @code{true}.
168 @cindex named patterns and conditions
169 For a named pattern, the condition may not depend on the data in the
170 insn being matched, but only the target-machine-type flags.  The compiler
171 needs to test these conditions during initialization in order to learn
172 exactly which named instructions are available in a particular run.
174 @findex operands
175 For nameless patterns, the condition is applied only when matching an
176 individual insn, and only after the insn has matched the pattern's
177 recognition template.  The insn's operands may be found in the vector
178 @code{operands}.
180 An instruction condition cannot become more restrictive as compilation
181 progresses.  If the condition accepts a particular RTL instruction at
182 one stage of compilation, it must continue to accept that instruction
183 until the final pass.  For example, @samp{!reload_completed} and
184 @samp{can_create_pseudo_p ()} are both invalid instruction conditions,
185 because they are true during the earlier RTL passes and false during
186 the later ones.  For the same reason, if a condition accepts an
187 instruction before register allocation, it cannot later try to control
188 register allocation by excluding certain register or value combinations.
190 Although a condition cannot become more restrictive as compilation
191 progresses, the condition for a nameless pattern @emph{can} become
192 more permissive.  For example, a nameless instruction can require
193 @samp{reload_completed} to be true, in which case it only matches
194 after register allocation.
196 @item
197 The @dfn{output template} or @dfn{output statement}: This is either
198 a string, or a fragment of C code which returns a string.
200 When simple substitution isn't general enough, you can specify a piece
201 of C code to compute the output.  @xref{Output Statement}.
203 @item
204 The @dfn{insn attributes}: This is an optional vector containing the values of
205 attributes for insns matching this pattern (@pxref{Insn Attributes}).
206 @end enumerate
208 @node Example
209 @section Example of @code{define_insn}
210 @cindex @code{define_insn} example
212 Here is an example of an instruction pattern, taken from the machine
213 description for the 68000/68020.
215 @smallexample
216 (define_insn "tstsi"
217   [(set (cc0)
218         (match_operand:SI 0 "general_operand" "rm"))]
219   ""
220   "*
222   if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
223     return \"tstl %0\";
224   return \"cmpl #0,%0\";
225 @}")
226 @end smallexample
228 @noindent
229 This can also be written using braced strings:
231 @smallexample
232 (define_insn "tstsi"
233   [(set (cc0)
234         (match_operand:SI 0 "general_operand" "rm"))]
235   ""
237   if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
238     return "tstl %0";
239   return "cmpl #0,%0";
241 @end smallexample
243 This describes an instruction which sets the condition codes based on the
244 value of a general operand.  It has no condition, so any insn with an RTL
245 description of the form shown may be matched to this pattern.  The name
246 @samp{tstsi} means ``test a @code{SImode} value'' and tells the RTL
247 generation pass that, when it is necessary to test such a value, an insn
248 to do so can be constructed using this pattern.
250 The output control string is a piece of C code which chooses which
251 output template to return based on the kind of operand and the specific
252 type of CPU for which code is being generated.
254 @samp{"rm"} is an operand constraint.  Its meaning is explained below.
256 @node RTL Template
257 @section RTL Template
258 @cindex RTL insn template
259 @cindex generating insns
260 @cindex insns, generating
261 @cindex recognizing insns
262 @cindex insns, recognizing
264 The RTL template is used to define which insns match the particular pattern
265 and how to find their operands.  For named patterns, the RTL template also
266 says how to construct an insn from specified operands.
268 Construction involves substituting specified operands into a copy of the
269 template.  Matching involves determining the values that serve as the
270 operands in the insn being matched.  Both of these activities are
271 controlled by special expression types that direct matching and
272 substitution of the operands.
274 @table @code
275 @findex match_operand
276 @item (match_operand:@var{m} @var{n} @var{predicate} @var{constraint})
277 This expression is a placeholder for operand number @var{n} of
278 the insn.  When constructing an insn, operand number @var{n}
279 will be substituted at this point.  When matching an insn, whatever
280 appears at this position in the insn will be taken as operand
281 number @var{n}; but it must satisfy @var{predicate} or this instruction
282 pattern will not match at all.
284 Operand numbers must be chosen consecutively counting from zero in
285 each instruction pattern.  There may be only one @code{match_operand}
286 expression in the pattern for each operand number.  Usually operands
287 are numbered in the order of appearance in @code{match_operand}
288 expressions.  In the case of a @code{define_expand}, any operand numbers
289 used only in @code{match_dup} expressions have higher values than all
290 other operand numbers.
292 @var{predicate} is a string that is the name of a function that
293 accepts two arguments, an expression and a machine mode.
294 @xref{Predicates}.  During matching, the function will be called with
295 the putative operand as the expression and @var{m} as the mode
296 argument (if @var{m} is not specified, @code{VOIDmode} will be used,
297 which normally causes @var{predicate} to accept any mode).  If it
298 returns zero, this instruction pattern fails to match.
299 @var{predicate} may be an empty string; then it means no test is to be
300 done on the operand, so anything which occurs in this position is
301 valid.
303 Most of the time, @var{predicate} will reject modes other than @var{m}---but
304 not always.  For example, the predicate @code{address_operand} uses
305 @var{m} as the mode of memory ref that the address should be valid for.
306 Many predicates accept @code{const_int} nodes even though their mode is
307 @code{VOIDmode}.
309 @var{constraint} controls reloading and the choice of the best register
310 class to use for a value, as explained later (@pxref{Constraints}).
311 If the constraint would be an empty string, it can be omitted.
313 People are often unclear on the difference between the constraint and the
314 predicate.  The predicate helps decide whether a given insn matches the
315 pattern.  The constraint plays no role in this decision; instead, it
316 controls various decisions in the case of an insn which does match.
318 @findex match_scratch
319 @item (match_scratch:@var{m} @var{n} @var{constraint})
320 This expression is also a placeholder for operand number @var{n}
321 and indicates that operand must be a @code{scratch} or @code{reg}
322 expression.
324 When matching patterns, this is equivalent to
326 @smallexample
327 (match_operand:@var{m} @var{n} "scratch_operand" @var{constraint})
328 @end smallexample
330 but, when generating RTL, it produces a (@code{scratch}:@var{m})
331 expression.
333 If the last few expressions in a @code{parallel} are @code{clobber}
334 expressions whose operands are either a hard register or
335 @code{match_scratch}, the combiner can add or delete them when
336 necessary.  @xref{Side Effects}.
338 @findex match_dup
339 @item (match_dup @var{n})
340 This expression is also a placeholder for operand number @var{n}.
341 It is used when the operand needs to appear more than once in the
342 insn.
344 In construction, @code{match_dup} acts just like @code{match_operand}:
345 the operand is substituted into the insn being constructed.  But in
346 matching, @code{match_dup} behaves differently.  It assumes that operand
347 number @var{n} has already been determined by a @code{match_operand}
348 appearing earlier in the recognition template, and it matches only an
349 identical-looking expression.
351 Note that @code{match_dup} should not be used to tell the compiler that
352 a particular register is being used for two operands (example:
353 @code{add} that adds one register to another; the second register is
354 both an input operand and the output operand).  Use a matching
355 constraint (@pxref{Simple Constraints}) for those.  @code{match_dup} is for the cases where one
356 operand is used in two places in the template, such as an instruction
357 that computes both a quotient and a remainder, where the opcode takes
358 two input operands but the RTL template has to refer to each of those
359 twice; once for the quotient pattern and once for the remainder pattern.
361 @findex match_operator
362 @item (match_operator:@var{m} @var{n} @var{predicate} [@var{operands}@dots{}])
363 This pattern is a kind of placeholder for a variable RTL expression
364 code.
366 When constructing an insn, it stands for an RTL expression whose
367 expression code is taken from that of operand @var{n}, and whose
368 operands are constructed from the patterns @var{operands}.
370 When matching an expression, it matches an expression if the function
371 @var{predicate} returns nonzero on that expression @emph{and} the
372 patterns @var{operands} match the operands of the expression.
374 Suppose that the function @code{commutative_operator} is defined as
375 follows, to match any expression whose operator is one of the
376 commutative arithmetic operators of RTL and whose mode is @var{mode}:
378 @smallexample
380 commutative_operator (x, mode)
381      rtx x;
382      machine_mode mode;
384   enum rtx_code code = GET_CODE (x);
385   if (GET_MODE (x) != mode)
386     return 0;
387   return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
388           || code == EQ || code == NE);
390 @end smallexample
392 Then the following pattern will match any RTL expression consisting
393 of a commutative operator applied to two general operands:
395 @smallexample
396 (match_operator:SI 3 "commutative_operator"
397   [(match_operand:SI 1 "general_operand" "g")
398    (match_operand:SI 2 "general_operand" "g")])
399 @end smallexample
401 Here the vector @code{[@var{operands}@dots{}]} contains two patterns
402 because the expressions to be matched all contain two operands.
404 When this pattern does match, the two operands of the commutative
405 operator are recorded as operands 1 and 2 of the insn.  (This is done
406 by the two instances of @code{match_operand}.)  Operand 3 of the insn
407 will be the entire commutative expression: use @code{GET_CODE
408 (operands[3])} to see which commutative operator was used.
410 The machine mode @var{m} of @code{match_operator} works like that of
411 @code{match_operand}: it is passed as the second argument to the
412 predicate function, and that function is solely responsible for
413 deciding whether the expression to be matched ``has'' that mode.
415 When constructing an insn, argument 3 of the gen-function will specify
416 the operation (i.e.@: the expression code) for the expression to be
417 made.  It should be an RTL expression, whose expression code is copied
418 into a new expression whose operands are arguments 1 and 2 of the
419 gen-function.  The subexpressions of argument 3 are not used;
420 only its expression code matters.
422 When @code{match_operator} is used in a pattern for matching an insn,
423 it usually best if the operand number of the @code{match_operator}
424 is higher than that of the actual operands of the insn.  This improves
425 register allocation because the register allocator often looks at
426 operands 1 and 2 of insns to see if it can do register tying.
428 There is no way to specify constraints in @code{match_operator}.  The
429 operand of the insn which corresponds to the @code{match_operator}
430 never has any constraints because it is never reloaded as a whole.
431 However, if parts of its @var{operands} are matched by
432 @code{match_operand} patterns, those parts may have constraints of
433 their own.
435 @findex match_op_dup
436 @item (match_op_dup:@var{m} @var{n}[@var{operands}@dots{}])
437 Like @code{match_dup}, except that it applies to operators instead of
438 operands.  When constructing an insn, operand number @var{n} will be
439 substituted at this point.  But in matching, @code{match_op_dup} behaves
440 differently.  It assumes that operand number @var{n} has already been
441 determined by a @code{match_operator} appearing earlier in the
442 recognition template, and it matches only an identical-looking
443 expression.
445 @findex match_parallel
446 @item (match_parallel @var{n} @var{predicate} [@var{subpat}@dots{}])
447 This pattern is a placeholder for an insn that consists of a
448 @code{parallel} expression with a variable number of elements.  This
449 expression should only appear at the top level of an insn pattern.
451 When constructing an insn, operand number @var{n} will be substituted at
452 this point.  When matching an insn, it matches if the body of the insn
453 is a @code{parallel} expression with at least as many elements as the
454 vector of @var{subpat} expressions in the @code{match_parallel}, if each
455 @var{subpat} matches the corresponding element of the @code{parallel},
456 @emph{and} the function @var{predicate} returns nonzero on the
457 @code{parallel} that is the body of the insn.  It is the responsibility
458 of the predicate to validate elements of the @code{parallel} beyond
459 those listed in the @code{match_parallel}.
461 A typical use of @code{match_parallel} is to match load and store
462 multiple expressions, which can contain a variable number of elements
463 in a @code{parallel}.  For example,
465 @smallexample
466 (define_insn ""
467   [(match_parallel 0 "load_multiple_operation"
468      [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
469            (match_operand:SI 2 "memory_operand" "m"))
470       (use (reg:SI 179))
471       (clobber (reg:SI 179))])]
472   ""
473   "loadm 0,0,%1,%2")
474 @end smallexample
476 This example comes from @file{a29k.md}.  The function
477 @code{load_multiple_operation} is defined in @file{a29k.c} and checks
478 that subsequent elements in the @code{parallel} are the same as the
479 @code{set} in the pattern, except that they are referencing subsequent
480 registers and memory locations.
482 An insn that matches this pattern might look like:
484 @smallexample
485 (parallel
486  [(set (reg:SI 20) (mem:SI (reg:SI 100)))
487   (use (reg:SI 179))
488   (clobber (reg:SI 179))
489   (set (reg:SI 21)
490        (mem:SI (plus:SI (reg:SI 100)
491                         (const_int 4))))
492   (set (reg:SI 22)
493        (mem:SI (plus:SI (reg:SI 100)
494                         (const_int 8))))])
495 @end smallexample
497 @findex match_par_dup
498 @item (match_par_dup @var{n} [@var{subpat}@dots{}])
499 Like @code{match_op_dup}, but for @code{match_parallel} instead of
500 @code{match_operator}.
502 @end table
504 @node Output Template
505 @section Output Templates and Operand Substitution
506 @cindex output templates
507 @cindex operand substitution
509 @cindex @samp{%} in template
510 @cindex percent sign
511 The @dfn{output template} is a string which specifies how to output the
512 assembler code for an instruction pattern.  Most of the template is a
513 fixed string which is output literally.  The character @samp{%} is used
514 to specify where to substitute an operand; it can also be used to
515 identify places where different variants of the assembler require
516 different syntax.
518 In the simplest case, a @samp{%} followed by a digit @var{n} says to output
519 operand @var{n} at that point in the string.
521 @samp{%} followed by a letter and a digit says to output an operand in an
522 alternate fashion.  Four letters have standard, built-in meanings described
523 below.  The machine description macro @code{PRINT_OPERAND} can define
524 additional letters with nonstandard meanings.
526 @samp{%c@var{digit}} can be used to substitute an operand that is a
527 constant value without the syntax that normally indicates an immediate
528 operand.
530 @samp{%n@var{digit}} is like @samp{%c@var{digit}} except that the value of
531 the constant is negated before printing.
533 @samp{%a@var{digit}} can be used to substitute an operand as if it were a
534 memory reference, with the actual operand treated as the address.  This may
535 be useful when outputting a ``load address'' instruction, because often the
536 assembler syntax for such an instruction requires you to write the operand
537 as if it were a memory reference.
539 @samp{%l@var{digit}} is used to substitute a @code{label_ref} into a jump
540 instruction.
542 @samp{%=} outputs a number which is unique to each instruction in the
543 entire compilation.  This is useful for making local labels to be
544 referred to more than once in a single template that generates multiple
545 assembler instructions.
547 @samp{%} followed by a punctuation character specifies a substitution that
548 does not use an operand.  Only one case is standard: @samp{%%} outputs a
549 @samp{%} into the assembler code.  Other nonstandard cases can be
550 defined in the @code{PRINT_OPERAND} macro.  You must also define
551 which punctuation characters are valid with the
552 @code{PRINT_OPERAND_PUNCT_VALID_P} macro.
554 @cindex \
555 @cindex backslash
556 The template may generate multiple assembler instructions.  Write the text
557 for the instructions, with @samp{\;} between them.
559 @cindex matching operands
560 When the RTL contains two operands which are required by constraint to match
561 each other, the output template must refer only to the lower-numbered operand.
562 Matching operands are not always identical, and the rest of the compiler
563 arranges to put the proper RTL expression for printing into the lower-numbered
564 operand.
566 One use of nonstandard letters or punctuation following @samp{%} is to
567 distinguish between different assembler languages for the same machine; for
568 example, Motorola syntax versus MIT syntax for the 68000.  Motorola syntax
569 requires periods in most opcode names, while MIT syntax does not.  For
570 example, the opcode @samp{movel} in MIT syntax is @samp{move.l} in Motorola
571 syntax.  The same file of patterns is used for both kinds of output syntax,
572 but the character sequence @samp{%.} is used in each place where Motorola
573 syntax wants a period.  The @code{PRINT_OPERAND} macro for Motorola syntax
574 defines the sequence to output a period; the macro for MIT syntax defines
575 it to do nothing.
577 @cindex @code{#} in template
578 As a special case, a template consisting of the single character @code{#}
579 instructs the compiler to first split the insn, and then output the
580 resulting instructions separately.  This helps eliminate redundancy in the
581 output templates.   If you have a @code{define_insn} that needs to emit
582 multiple assembler instructions, and there is a matching @code{define_split}
583 already defined, then you can simply use @code{#} as the output template
584 instead of writing an output template that emits the multiple assembler
585 instructions.
587 Note that @code{#} only has an effect while generating assembly code;
588 it does not affect whether a split occurs earlier.  An associated
589 @code{define_split} must exist and it must be suitable for use after
590 register allocation.
592 If the macro @code{ASSEMBLER_DIALECT} is defined, you can use construct
593 of the form @samp{@{option0|option1|option2@}} in the templates.  These
594 describe multiple variants of assembler language syntax.
595 @xref{Instruction Output}.
597 @node Output Statement
598 @section C Statements for Assembler Output
599 @cindex output statements
600 @cindex C statements for assembler output
601 @cindex generating assembler output
603 Often a single fixed template string cannot produce correct and efficient
604 assembler code for all the cases that are recognized by a single
605 instruction pattern.  For example, the opcodes may depend on the kinds of
606 operands; or some unfortunate combinations of operands may require extra
607 machine instructions.
609 If the output control string starts with a @samp{@@}, then it is actually
610 a series of templates, each on a separate line.  (Blank lines and
611 leading spaces and tabs are ignored.)  The templates correspond to the
612 pattern's constraint alternatives (@pxref{Multi-Alternative}).  For example,
613 if a target machine has a two-address add instruction @samp{addr} to add
614 into a register and another @samp{addm} to add a register to memory, you
615 might write this pattern:
617 @smallexample
618 (define_insn "addsi3"
619   [(set (match_operand:SI 0 "general_operand" "=r,m")
620         (plus:SI (match_operand:SI 1 "general_operand" "0,0")
621                  (match_operand:SI 2 "general_operand" "g,r")))]
622   ""
623   "@@
624    addr %2,%0
625    addm %2,%0")
626 @end smallexample
628 @cindex @code{*} in template
629 @cindex asterisk in template
630 If the output control string starts with a @samp{*}, then it is not an
631 output template but rather a piece of C program that should compute a
632 template.  It should execute a @code{return} statement to return the
633 template-string you want.  Most such templates use C string literals, which
634 require doublequote characters to delimit them.  To include these
635 doublequote characters in the string, prefix each one with @samp{\}.
637 If the output control string is written as a brace block instead of a
638 double-quoted string, it is automatically assumed to be C code.  In that
639 case, it is not necessary to put in a leading asterisk, or to escape the
640 doublequotes surrounding C string literals.
642 The operands may be found in the array @code{operands}, whose C data type
643 is @code{rtx []}.
645 It is very common to select different ways of generating assembler code
646 based on whether an immediate operand is within a certain range.  Be
647 careful when doing this, because the result of @code{INTVAL} is an
648 integer on the host machine.  If the host machine has more bits in an
649 @code{int} than the target machine has in the mode in which the constant
650 will be used, then some of the bits you get from @code{INTVAL} will be
651 superfluous.  For proper results, you must carefully disregard the
652 values of those bits.
654 @findex output_asm_insn
655 It is possible to output an assembler instruction and then go on to output
656 or compute more of them, using the subroutine @code{output_asm_insn}.  This
657 receives two arguments: a template-string and a vector of operands.  The
658 vector may be @code{operands}, or it may be another array of @code{rtx}
659 that you declare locally and initialize yourself.
661 @findex which_alternative
662 When an insn pattern has multiple alternatives in its constraints, often
663 the appearance of the assembler code is determined mostly by which alternative
664 was matched.  When this is so, the C code can test the variable
665 @code{which_alternative}, which is the ordinal number of the alternative
666 that was actually satisfied (0 for the first, 1 for the second alternative,
667 etc.).
669 For example, suppose there are two opcodes for storing zero, @samp{clrreg}
670 for registers and @samp{clrmem} for memory locations.  Here is how
671 a pattern could use @code{which_alternative} to choose between them:
673 @smallexample
674 (define_insn ""
675   [(set (match_operand:SI 0 "general_operand" "=r,m")
676         (const_int 0))]
677   ""
678   @{
679   return (which_alternative == 0
680           ? "clrreg %0" : "clrmem %0");
681   @})
682 @end smallexample
684 The example above, where the assembler code to generate was
685 @emph{solely} determined by the alternative, could also have been specified
686 as follows, having the output control string start with a @samp{@@}:
688 @smallexample
689 @group
690 (define_insn ""
691   [(set (match_operand:SI 0 "general_operand" "=r,m")
692         (const_int 0))]
693   ""
694   "@@
695    clrreg %0
696    clrmem %0")
697 @end group
698 @end smallexample
700 If you just need a little bit of C code in one (or a few) alternatives,
701 you can use @samp{*} inside of a @samp{@@} multi-alternative template:
703 @smallexample
704 @group
705 (define_insn ""
706   [(set (match_operand:SI 0 "general_operand" "=r,<,m")
707         (const_int 0))]
708   ""
709   "@@
710    clrreg %0
711    * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\";
712    clrmem %0")
713 @end group
714 @end smallexample
716 @node Predicates
717 @section Predicates
718 @cindex predicates
719 @cindex operand predicates
720 @cindex operator predicates
722 A predicate determines whether a @code{match_operand} or
723 @code{match_operator} expression matches, and therefore whether the
724 surrounding instruction pattern will be used for that combination of
725 operands.  GCC has a number of machine-independent predicates, and you
726 can define machine-specific predicates as needed.  By convention,
727 predicates used with @code{match_operand} have names that end in
728 @samp{_operand}, and those used with @code{match_operator} have names
729 that end in @samp{_operator}.
731 All predicates are boolean functions (in the mathematical sense) of
732 two arguments: the RTL expression that is being considered at that
733 position in the instruction pattern, and the machine mode that the
734 @code{match_operand} or @code{match_operator} specifies.  In this
735 section, the first argument is called @var{op} and the second argument
736 @var{mode}.  Predicates can be called from C as ordinary two-argument
737 functions; this can be useful in output templates or other
738 machine-specific code.
740 Operand predicates can allow operands that are not actually acceptable
741 to the hardware, as long as the constraints give reload the ability to
742 fix them up (@pxref{Constraints}).  However, GCC will usually generate
743 better code if the predicates specify the requirements of the machine
744 instructions as closely as possible.  Reload cannot fix up operands
745 that must be constants (``immediate operands''); you must use a
746 predicate that allows only constants, or else enforce the requirement
747 in the extra condition.
749 @cindex predicates and machine modes
750 @cindex normal predicates
751 @cindex special predicates
752 Most predicates handle their @var{mode} argument in a uniform manner.
753 If @var{mode} is @code{VOIDmode} (unspecified), then @var{op} can have
754 any mode.  If @var{mode} is anything else, then @var{op} must have the
755 same mode, unless @var{op} is a @code{CONST_INT} or integer
756 @code{CONST_DOUBLE}.  These RTL expressions always have
757 @code{VOIDmode}, so it would be counterproductive to check that their
758 mode matches.  Instead, predicates that accept @code{CONST_INT} and/or
759 integer @code{CONST_DOUBLE} check that the value stored in the
760 constant will fit in the requested mode.
762 Predicates with this behavior are called @dfn{normal}.
763 @command{genrecog} can optimize the instruction recognizer based on
764 knowledge of how normal predicates treat modes.  It can also diagnose
765 certain kinds of common errors in the use of normal predicates; for
766 instance, it is almost always an error to use a normal predicate
767 without specifying a mode.
769 Predicates that do something different with their @var{mode} argument
770 are called @dfn{special}.  The generic predicates
771 @code{address_operand} and @code{pmode_register_operand} are special
772 predicates.  @command{genrecog} does not do any optimizations or
773 diagnosis when special predicates are used.
775 @menu
776 * Machine-Independent Predicates::  Predicates available to all back ends.
777 * Defining Predicates::             How to write machine-specific predicate
778                                     functions.
779 @end menu
781 @node Machine-Independent Predicates
782 @subsection Machine-Independent Predicates
783 @cindex machine-independent predicates
784 @cindex generic predicates
786 These are the generic predicates available to all back ends.  They are
787 defined in @file{recog.cc}.  The first category of predicates allow
788 only constant, or @dfn{immediate}, operands.
790 @defun immediate_operand
791 This predicate allows any sort of constant that fits in @var{mode}.
792 It is an appropriate choice for instructions that take operands that
793 must be constant.
794 @end defun
796 @defun const_int_operand
797 This predicate allows any @code{CONST_INT} expression that fits in
798 @var{mode}.  It is an appropriate choice for an immediate operand that
799 does not allow a symbol or label.
800 @end defun
802 @defun const_double_operand
803 This predicate accepts any @code{CONST_DOUBLE} expression that has
804 exactly @var{mode}.  If @var{mode} is @code{VOIDmode}, it will also
805 accept @code{CONST_INT}.  It is intended for immediate floating point
806 constants.
807 @end defun
809 @noindent
810 The second category of predicates allow only some kind of machine
811 register.
813 @defun register_operand
814 This predicate allows any @code{REG} or @code{SUBREG} expression that
815 is valid for @var{mode}.  It is often suitable for arithmetic
816 instruction operands on a RISC machine.
817 @end defun
819 @defun pmode_register_operand
820 This is a slight variant on @code{register_operand} which works around
821 a limitation in the machine-description reader.
823 @smallexample
824 (match_operand @var{n} "pmode_register_operand" @var{constraint})
825 @end smallexample
827 @noindent
828 means exactly what
830 @smallexample
831 (match_operand:P @var{n} "register_operand" @var{constraint})
832 @end smallexample
834 @noindent
835 would mean, if the machine-description reader accepted @samp{:P}
836 mode suffixes.  Unfortunately, it cannot, because @code{Pmode} is an
837 alias for some other mode, and might vary with machine-specific
838 options.  @xref{Misc}.
839 @end defun
841 @defun scratch_operand
842 This predicate allows hard registers and @code{SCRATCH} expressions,
843 but not pseudo-registers.  It is used internally by @code{match_scratch};
844 it should not be used directly.
845 @end defun
847 @noindent
848 The third category of predicates allow only some kind of memory reference.
850 @defun memory_operand
851 This predicate allows any valid reference to a quantity of mode
852 @var{mode} in memory, as determined by the weak form of
853 @code{GO_IF_LEGITIMATE_ADDRESS} (@pxref{Addressing Modes}).
854 @end defun
856 @defun address_operand
857 This predicate is a little unusual; it allows any operand that is a
858 valid expression for the @emph{address} of a quantity of mode
859 @var{mode}, again determined by the weak form of
860 @code{GO_IF_LEGITIMATE_ADDRESS}.  To first order, if
861 @samp{@w{(mem:@var{mode} (@var{exp}))}} is acceptable to
862 @code{memory_operand}, then @var{exp} is acceptable to
863 @code{address_operand}.  Note that @var{exp} does not necessarily have
864 the mode @var{mode}.
865 @end defun
867 @defun indirect_operand
868 This is a stricter form of @code{memory_operand} which allows only
869 memory references with a @code{general_operand} as the address
870 expression.  New uses of this predicate are discouraged, because
871 @code{general_operand} is very permissive, so it's hard to tell what
872 an @code{indirect_operand} does or does not allow.  If a target has
873 different requirements for memory operands for different instructions,
874 it is better to define target-specific predicates which enforce the
875 hardware's requirements explicitly.
876 @end defun
878 @defun push_operand
879 This predicate allows a memory reference suitable for pushing a value
880 onto the stack.  This will be a @code{MEM} which refers to
881 @code{stack_pointer_rtx}, with a side effect in its address expression
882 (@pxref{Incdec}); which one is determined by the
883 @code{STACK_PUSH_CODE} macro (@pxref{Frame Layout}).
884 @end defun
886 @defun pop_operand
887 This predicate allows a memory reference suitable for popping a value
888 off the stack.  Again, this will be a @code{MEM} referring to
889 @code{stack_pointer_rtx}, with a side effect in its address
890 expression.  However, this time @code{STACK_POP_CODE} is expected.
891 @end defun
893 @noindent
894 The fourth category of predicates allow some combination of the above
895 operands.
897 @defun nonmemory_operand
898 This predicate allows any immediate or register operand valid for @var{mode}.
899 @end defun
901 @defun nonimmediate_operand
902 This predicate allows any register or memory operand valid for @var{mode}.
903 @end defun
905 @defun general_operand
906 This predicate allows any immediate, register, or memory operand
907 valid for @var{mode}.
908 @end defun
910 @noindent
911 Finally, there are two generic operator predicates.
913 @defun comparison_operator
914 This predicate matches any expression which performs an arithmetic
915 comparison in @var{mode}; that is, @code{COMPARISON_P} is true for the
916 expression code.
917 @end defun
919 @defun ordered_comparison_operator
920 This predicate matches any expression which performs an arithmetic
921 comparison in @var{mode} and whose expression code is valid for integer
922 modes; that is, the expression code will be one of @code{eq}, @code{ne},
923 @code{lt}, @code{ltu}, @code{le}, @code{leu}, @code{gt}, @code{gtu},
924 @code{ge}, @code{geu}.
925 @end defun
927 @node Defining Predicates
928 @subsection Defining Machine-Specific Predicates
929 @cindex defining predicates
930 @findex define_predicate
931 @findex define_special_predicate
933 Many machines have requirements for their operands that cannot be
934 expressed precisely using the generic predicates.  You can define
935 additional predicates using @code{define_predicate} and
936 @code{define_special_predicate} expressions.  These expressions have
937 three operands:
939 @itemize @bullet
940 @item
941 The name of the predicate, as it will be referred to in
942 @code{match_operand} or @code{match_operator} expressions.
944 @item
945 An RTL expression which evaluates to true if the predicate allows the
946 operand @var{op}, false if it does not.  This expression can only use
947 the following RTL codes:
949 @table @code
950 @item MATCH_OPERAND
951 When written inside a predicate expression, a @code{MATCH_OPERAND}
952 expression evaluates to true if the predicate it names would allow
953 @var{op}.  The operand number and constraint are ignored.  Due to
954 limitations in @command{genrecog}, you can only refer to generic
955 predicates and predicates that have already been defined.
957 @item MATCH_CODE
958 This expression evaluates to true if @var{op} or a specified
959 subexpression of @var{op} has one of a given list of RTX codes.
961 The first operand of this expression is a string constant containing a
962 comma-separated list of RTX code names (in lower case).  These are the
963 codes for which the @code{MATCH_CODE} will be true.
965 The second operand is a string constant which indicates what
966 subexpression of @var{op} to examine.  If it is absent or the empty
967 string, @var{op} itself is examined.  Otherwise, the string constant
968 must be a sequence of digits and/or lowercase letters.  Each character
969 indicates a subexpression to extract from the current expression; for
970 the first character this is @var{op}, for the second and subsequent
971 characters it is the result of the previous character.  A digit
972 @var{n} extracts @samp{@w{XEXP (@var{e}, @var{n})}}; a letter @var{l}
973 extracts @samp{@w{XVECEXP (@var{e}, 0, @var{n})}} where @var{n} is the
974 alphabetic ordinal of @var{l} (0 for `a', 1 for 'b', and so on).  The
975 @code{MATCH_CODE} then examines the RTX code of the subexpression
976 extracted by the complete string.  It is not possible to extract
977 components of an @code{rtvec} that is not at position 0 within its RTX
978 object.
980 @item MATCH_TEST
981 This expression has one operand, a string constant containing a C
982 expression.  The predicate's arguments, @var{op} and @var{mode}, are
983 available with those names in the C expression.  The @code{MATCH_TEST}
984 evaluates to true if the C expression evaluates to a nonzero value.
985 @code{MATCH_TEST} expressions must not have side effects.
987 @item  AND
988 @itemx IOR
989 @itemx NOT
990 @itemx IF_THEN_ELSE
991 The basic @samp{MATCH_} expressions can be combined using these
992 logical operators, which have the semantics of the C operators
993 @samp{&&}, @samp{||}, @samp{!}, and @samp{@w{? :}} respectively.  As
994 in Common Lisp, you may give an @code{AND} or @code{IOR} expression an
995 arbitrary number of arguments; this has exactly the same effect as
996 writing a chain of two-argument @code{AND} or @code{IOR} expressions.
997 @end table
999 @item
1000 An optional block of C code, which should execute
1001 @samp{@w{return true}} if the predicate is found to match and
1002 @samp{@w{return false}} if it does not.  It must not have any side
1003 effects.  The predicate arguments, @var{op} and @var{mode}, are
1004 available with those names.
1006 If a code block is present in a predicate definition, then the RTL
1007 expression must evaluate to true @emph{and} the code block must
1008 execute @samp{@w{return true}} for the predicate to allow the operand.
1009 The RTL expression is evaluated first; do not re-check anything in the
1010 code block that was checked in the RTL expression.
1011 @end itemize
1013 The program @command{genrecog} scans @code{define_predicate} and
1014 @code{define_special_predicate} expressions to determine which RTX
1015 codes are possibly allowed.  You should always make this explicit in
1016 the RTL predicate expression, using @code{MATCH_OPERAND} and
1017 @code{MATCH_CODE}.
1019 Here is an example of a simple predicate definition, from the IA64
1020 machine description:
1022 @smallexample
1023 @group
1024 ;; @r{True if @var{op} is a @code{SYMBOL_REF} which refers to the sdata section.}
1025 (define_predicate "small_addr_symbolic_operand"
1026   (and (match_code "symbol_ref")
1027        (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
1028 @end group
1029 @end smallexample
1031 @noindent
1032 And here is another, showing the use of the C block.
1034 @smallexample
1035 @group
1036 ;; @r{True if @var{op} is a register operand that is (or could be) a GR reg.}
1037 (define_predicate "gr_register_operand"
1038   (match_operand 0 "register_operand")
1040   unsigned int regno;
1041   if (GET_CODE (op) == SUBREG)
1042     op = SUBREG_REG (op);
1044   regno = REGNO (op);
1045   return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
1047 @end group
1048 @end smallexample
1050 Predicates written with @code{define_predicate} automatically include
1051 a test that @var{mode} is @code{VOIDmode}, or @var{op} has the same
1052 mode as @var{mode}, or @var{op} is a @code{CONST_INT} or
1053 @code{CONST_DOUBLE}.  They do @emph{not} check specifically for
1054 integer @code{CONST_DOUBLE}, nor do they test that the value of either
1055 kind of constant fits in the requested mode.  This is because
1056 target-specific predicates that take constants usually have to do more
1057 stringent value checks anyway.  If you need the exact same treatment
1058 of @code{CONST_INT} or @code{CONST_DOUBLE} that the generic predicates
1059 provide, use a @code{MATCH_OPERAND} subexpression to call
1060 @code{const_int_operand}, @code{const_double_operand}, or
1061 @code{immediate_operand}.
1063 Predicates written with @code{define_special_predicate} do not get any
1064 automatic mode checks, and are treated as having special mode handling
1065 by @command{genrecog}.
1067 The program @command{genpreds} is responsible for generating code to
1068 test predicates.  It also writes a header file containing function
1069 declarations for all machine-specific predicates.  It is not necessary
1070 to declare these predicates in @file{@var{cpu}-protos.h}.
1071 @end ifset
1073 @c Most of this node appears by itself (in a different place) even
1074 @c when the INTERNALS flag is clear.  Passages that require the internals
1075 @c manual's context are conditionalized to appear only in the internals manual.
1076 @ifset INTERNALS
1077 @node Constraints
1078 @section Operand Constraints
1079 @cindex operand constraints
1080 @cindex constraints
1082 Each @code{match_operand} in an instruction pattern can specify
1083 constraints for the operands allowed.  The constraints allow you to
1084 fine-tune matching within the set of operands allowed by the
1085 predicate.
1087 @end ifset
1088 @ifclear INTERNALS
1089 @node Constraints
1090 @section Constraints for @code{asm} Operands
1091 @cindex operand constraints, @code{asm}
1092 @cindex constraints, @code{asm}
1093 @cindex @code{asm} constraints
1095 Here are specific details on what constraint letters you can use with
1096 @code{asm} operands.
1097 @end ifclear
1098 Constraints can say whether
1099 an operand may be in a register, and which kinds of register; whether the
1100 operand can be a memory reference, and which kinds of address; whether the
1101 operand may be an immediate constant, and which possible values it may
1102 have.  Constraints can also require two operands to match.
1103 Side-effects aren't allowed in operands of inline @code{asm}, unless
1104 @samp{<} or @samp{>} constraints are used, because there is no guarantee
1105 that the side effects will happen exactly once in an instruction that can update
1106 the addressing register.
1108 @ifset INTERNALS
1109 @menu
1110 * Simple Constraints::  Basic use of constraints.
1111 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
1112 * Class Preferences::   Constraints guide which hard register to put things in.
1113 * Modifiers::           More precise control over effects of constraints.
1114 * Machine Constraints:: Existing constraints for some particular machines.
1115 * Disable Insn Alternatives:: Disable insn alternatives using attributes.
1116 * Define Constraints::  How to define machine-specific constraints.
1117 * C Constraint Interface:: How to test constraints from C code.
1118 @end menu
1119 @end ifset
1121 @ifclear INTERNALS
1122 @menu
1123 * Simple Constraints::  Basic use of constraints.
1124 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
1125 * Modifiers::           More precise control over effects of constraints.
1126 * Machine Constraints:: Special constraints for some particular machines.
1127 @end menu
1128 @end ifclear
1130 @node Simple Constraints
1131 @subsection Simple Constraints
1132 @cindex simple constraints
1134 The simplest kind of constraint is a string full of letters, each of
1135 which describes one kind of operand that is permitted.  Here are
1136 the letters that are allowed:
1138 @table @asis
1139 @item whitespace
1140 Whitespace characters are ignored and can be inserted at any position
1141 except the first.  This enables each alternative for different operands to
1142 be visually aligned in the machine description even if they have different
1143 number of constraints and modifiers.
1145 @cindex @samp{m} in constraint
1146 @cindex memory references in constraints
1147 @item @samp{m}
1148 A memory operand is allowed, with any kind of address that the machine
1149 supports in general.
1150 Note that the letter used for the general memory constraint can be
1151 re-defined by a back end using the @code{TARGET_MEM_CONSTRAINT} macro.
1153 @cindex offsettable address
1154 @cindex @samp{o} in constraint
1155 @item @samp{o}
1156 A memory operand is allowed, but only if the address is
1157 @dfn{offsettable}.  This means that adding a small integer (actually,
1158 the width in bytes of the operand, as determined by its machine mode)
1159 may be added to the address and the result is also a valid memory
1160 address.
1162 @cindex autoincrement/decrement addressing
1163 For example, an address which is constant is offsettable; so is an
1164 address that is the sum of a register and a constant (as long as a
1165 slightly larger constant is also within the range of address-offsets
1166 supported by the machine); but an autoincrement or autodecrement
1167 address is not offsettable.  More complicated indirect/indexed
1168 addresses may or may not be offsettable depending on the other
1169 addressing modes that the machine supports.
1171 Note that in an output operand which can be matched by another
1172 operand, the constraint letter @samp{o} is valid only when accompanied
1173 by both @samp{<} (if the target machine has predecrement addressing)
1174 and @samp{>} (if the target machine has preincrement addressing).
1176 @cindex @samp{V} in constraint
1177 @item @samp{V}
1178 A memory operand that is not offsettable.  In other words, anything that
1179 would fit the @samp{m} constraint but not the @samp{o} constraint.
1181 @cindex @samp{<} in constraint
1182 @item @samp{<}
1183 A memory operand with autodecrement addressing (either predecrement or
1184 postdecrement) is allowed.  In inline @code{asm} this constraint is only
1185 allowed if the operand is used exactly once in an instruction that can
1186 handle the side effects.  Not using an operand with @samp{<} in constraint
1187 string in the inline @code{asm} pattern at all or using it in multiple
1188 instructions isn't valid, because the side effects wouldn't be performed
1189 or would be performed more than once.  Furthermore, on some targets
1190 the operand with @samp{<} in constraint string must be accompanied by
1191 special instruction suffixes like @code{%U0} instruction suffix on PowerPC
1192 or @code{%P0} on IA-64.
1194 @cindex @samp{>} in constraint
1195 @item @samp{>}
1196 A memory operand with autoincrement addressing (either preincrement or
1197 postincrement) is allowed.  In inline @code{asm} the same restrictions
1198 as for @samp{<} apply.
1200 @cindex @samp{r} in constraint
1201 @cindex registers in constraints
1202 @item @samp{r}
1203 A register operand is allowed provided that it is in a general
1204 register.
1206 @cindex constants in constraints
1207 @cindex @samp{i} in constraint
1208 @item @samp{i}
1209 An immediate integer operand (one with constant value) is allowed.
1210 This includes symbolic constants whose values will be known only at
1211 assembly time or later.
1213 @cindex @samp{n} in constraint
1214 @item @samp{n}
1215 An immediate integer operand with a known numeric value is allowed.
1216 Many systems cannot support assembly-time constants for operands less
1217 than a word wide.  Constraints for these operands should use @samp{n}
1218 rather than @samp{i}.
1220 @cindex @samp{I} in constraint
1221 @item @samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}
1222 Other letters in the range @samp{I} through @samp{P} may be defined in
1223 a machine-dependent fashion to permit immediate integer operands with
1224 explicit integer values in specified ranges.  For example, on the
1225 68000, @samp{I} is defined to stand for the range of values 1 to 8.
1226 This is the range permitted as a shift count in the shift
1227 instructions.
1229 @cindex @samp{E} in constraint
1230 @item @samp{E}
1231 An immediate floating operand (expression code @code{const_double}) is
1232 allowed, but only if the target floating point format is the same as
1233 that of the host machine (on which the compiler is running).
1235 @cindex @samp{F} in constraint
1236 @item @samp{F}
1237 An immediate floating operand (expression code @code{const_double} or
1238 @code{const_vector}) is allowed.
1240 @cindex @samp{G} in constraint
1241 @cindex @samp{H} in constraint
1242 @item @samp{G}, @samp{H}
1243 @samp{G} and @samp{H} may be defined in a machine-dependent fashion to
1244 permit immediate floating operands in particular ranges of values.
1246 @cindex @samp{s} in constraint
1247 @item @samp{s}
1248 An immediate integer operand whose value is not an explicit integer is
1249 allowed.
1251 This might appear strange; if an insn allows a constant operand with a
1252 value not known at compile time, it certainly must allow any known
1253 value.  So why use @samp{s} instead of @samp{i}?  Sometimes it allows
1254 better code to be generated.
1256 For example, on the 68000 in a fullword instruction it is possible to
1257 use an immediate operand; but if the immediate value is between @minus{}128
1258 and 127, better code results from loading the value into a register and
1259 using the register.  This is because the load into the register can be
1260 done with a @samp{moveq} instruction.  We arrange for this to happen
1261 by defining the letter @samp{K} to mean ``any integer outside the
1262 range @minus{}128 to 127'', and then specifying @samp{Ks} in the operand
1263 constraints.
1265 @cindex @samp{g} in constraint
1266 @item @samp{g}
1267 Any register, memory or immediate integer operand is allowed, except for
1268 registers that are not general registers.
1270 @cindex @samp{X} in constraint
1271 @item @samp{X}
1272 @ifset INTERNALS
1273 Any operand whatsoever is allowed, even if it does not satisfy
1274 @code{general_operand}.  This is normally used in the constraint of
1275 a @code{match_scratch} when certain alternatives will not actually
1276 require a scratch register.
1277 @end ifset
1278 @ifclear INTERNALS
1279 Any operand whatsoever is allowed.
1280 @end ifclear
1282 @cindex @samp{0} in constraint
1283 @cindex digits in constraint
1284 @item @samp{0}, @samp{1}, @samp{2}, @dots{} @samp{9}
1285 An operand that matches the specified operand number is allowed.  If a
1286 digit is used together with letters within the same alternative, the
1287 digit should come last.
1289 This number is allowed to be more than a single digit.  If multiple
1290 digits are encountered consecutively, they are interpreted as a single
1291 decimal integer.  There is scant chance for ambiguity, since to-date
1292 it has never been desirable that @samp{10} be interpreted as matching
1293 either operand 1 @emph{or} operand 0.  Should this be desired, one
1294 can use multiple alternatives instead.
1296 @cindex matching constraint
1297 @cindex constraint, matching
1298 This is called a @dfn{matching constraint} and what it really means is
1299 that the assembler has only a single operand that fills two roles
1300 @ifset INTERNALS
1301 considered separate in the RTL insn.  For example, an add insn has two
1302 input operands and one output operand in the RTL, but on most CISC
1303 @end ifset
1304 @ifclear INTERNALS
1305 which @code{asm} distinguishes.  For example, an add instruction uses
1306 two input operands and an output operand, but on most CISC
1307 @end ifclear
1308 machines an add instruction really has only two operands, one of them an
1309 input-output operand:
1311 @smallexample
1312 addl #35,r12
1313 @end smallexample
1315 Matching constraints are used in these circumstances.
1316 More precisely, the two operands that match must include one input-only
1317 operand and one output-only operand.  Moreover, the digit must be a
1318 smaller number than the number of the operand that uses it in the
1319 constraint.
1321 @ifset INTERNALS
1322 For operands to match in a particular case usually means that they
1323 are identical-looking RTL expressions.  But in a few special cases
1324 specific kinds of dissimilarity are allowed.  For example, @code{*x}
1325 as an input operand will match @code{*x++} as an output operand.
1326 For proper results in such cases, the output template should always
1327 use the output-operand's number when printing the operand.
1328 @end ifset
1330 @cindex load address instruction
1331 @cindex push address instruction
1332 @cindex address constraints
1333 @cindex @samp{p} in constraint
1334 @item @samp{p}
1335 An operand that is a valid memory address is allowed.  This is
1336 for ``load address'' and ``push address'' instructions.
1338 @findex address_operand
1339 @samp{p} in the constraint must be accompanied by @code{address_operand}
1340 as the predicate in the @code{match_operand}.  This predicate interprets
1341 the mode specified in the @code{match_operand} as the mode of the memory
1342 reference for which the address would be valid.
1344 @cindex other register constraints
1345 @cindex extensible constraints
1346 @item @var{other-letters}
1347 Other letters can be defined in machine-dependent fashion to stand for
1348 particular classes of registers or other arbitrary operand types.
1349 @samp{d}, @samp{a} and @samp{f} are defined on the 68000/68020 to stand
1350 for data, address and floating point registers.
1351 @end table
1353 @ifset INTERNALS
1354 In order to have valid assembler code, each operand must satisfy
1355 its constraint.  But a failure to do so does not prevent the pattern
1356 from applying to an insn.  Instead, it directs the compiler to modify
1357 the code so that the constraint will be satisfied.  Usually this is
1358 done by copying an operand into a register.
1360 Contrast, therefore, the two instruction patterns that follow:
1362 @smallexample
1363 (define_insn ""
1364   [(set (match_operand:SI 0 "general_operand" "=r")
1365         (plus:SI (match_dup 0)
1366                  (match_operand:SI 1 "general_operand" "r")))]
1367   ""
1368   "@dots{}")
1369 @end smallexample
1371 @noindent
1372 which has two operands, one of which must appear in two places, and
1374 @smallexample
1375 (define_insn ""
1376   [(set (match_operand:SI 0 "general_operand" "=r")
1377         (plus:SI (match_operand:SI 1 "general_operand" "0")
1378                  (match_operand:SI 2 "general_operand" "r")))]
1379   ""
1380   "@dots{}")
1381 @end smallexample
1383 @noindent
1384 which has three operands, two of which are required by a constraint to be
1385 identical.  If we are considering an insn of the form
1387 @smallexample
1388 (insn @var{n} @var{prev} @var{next}
1389   (set (reg:SI 3)
1390        (plus:SI (reg:SI 6) (reg:SI 109)))
1391   @dots{})
1392 @end smallexample
1394 @noindent
1395 the first pattern would not apply at all, because this insn does not
1396 contain two identical subexpressions in the right place.  The pattern would
1397 say, ``That does not look like an add instruction; try other patterns''.
1398 The second pattern would say, ``Yes, that's an add instruction, but there
1399 is something wrong with it''.  It would direct the reload pass of the
1400 compiler to generate additional insns to make the constraint true.  The
1401 results might look like this:
1403 @smallexample
1404 (insn @var{n2} @var{prev} @var{n}
1405   (set (reg:SI 3) (reg:SI 6))
1406   @dots{})
1408 (insn @var{n} @var{n2} @var{next}
1409   (set (reg:SI 3)
1410        (plus:SI (reg:SI 3) (reg:SI 109)))
1411   @dots{})
1412 @end smallexample
1414 It is up to you to make sure that each operand, in each pattern, has
1415 constraints that can handle any RTL expression that could be present for
1416 that operand.  (When multiple alternatives are in use, each pattern must,
1417 for each possible combination of operand expressions, have at least one
1418 alternative which can handle that combination of operands.)  The
1419 constraints don't need to @emph{allow} any possible operand---when this is
1420 the case, they do not constrain---but they must at least point the way to
1421 reloading any possible operand so that it will fit.
1423 @itemize @bullet
1424 @item
1425 If the constraint accepts whatever operands the predicate permits,
1426 there is no problem: reloading is never necessary for this operand.
1428 For example, an operand whose constraints permit everything except
1429 registers is safe provided its predicate rejects registers.
1431 An operand whose predicate accepts only constant values is safe
1432 provided its constraints include the letter @samp{i}.  If any possible
1433 constant value is accepted, then nothing less than @samp{i} will do;
1434 if the predicate is more selective, then the constraints may also be
1435 more selective.
1437 @item
1438 Any operand expression can be reloaded by copying it into a register.
1439 So if an operand's constraints allow some kind of register, it is
1440 certain to be safe.  It need not permit all classes of registers; the
1441 compiler knows how to copy a register into another register of the
1442 proper class in order to make an instruction valid.
1444 @cindex nonoffsettable memory reference
1445 @cindex memory reference, nonoffsettable
1446 @item
1447 A nonoffsettable memory reference can be reloaded by copying the
1448 address into a register.  So if the constraint uses the letter
1449 @samp{o}, all memory references are taken care of.
1451 @item
1452 A constant operand can be reloaded by allocating space in memory to
1453 hold it as preinitialized data.  Then the memory reference can be used
1454 in place of the constant.  So if the constraint uses the letters
1455 @samp{o} or @samp{m}, constant operands are not a problem.
1457 @item
1458 If the constraint permits a constant and a pseudo register used in an insn
1459 was not allocated to a hard register and is equivalent to a constant,
1460 the register will be replaced with the constant.  If the predicate does
1461 not permit a constant and the insn is re-recognized for some reason, the
1462 compiler will crash.  Thus the predicate must always recognize any
1463 objects allowed by the constraint.
1464 @end itemize
1466 If the operand's predicate can recognize registers, but the constraint does
1467 not permit them, it can make the compiler crash.  When this operand happens
1468 to be a register, the reload pass will be stymied, because it does not know
1469 how to copy a register temporarily into memory.
1471 If the predicate accepts a unary operator, the constraint applies to the
1472 operand.  For example, the MIPS processor at ISA level 3 supports an
1473 instruction which adds two registers in @code{SImode} to produce a
1474 @code{DImode} result, but only if the registers are correctly sign
1475 extended.  This predicate for the input operands accepts a
1476 @code{sign_extend} of an @code{SImode} register.  Write the constraint
1477 to indicate the type of register that is required for the operand of the
1478 @code{sign_extend}.
1479 @end ifset
1481 @node Multi-Alternative
1482 @subsection Multiple Alternative Constraints
1483 @cindex multiple alternative constraints
1485 Sometimes a single instruction has multiple alternative sets of possible
1486 operands.  For example, on the 68000, a logical-or instruction can combine
1487 register or an immediate value into memory, or it can combine any kind of
1488 operand into a register; but it cannot combine one memory location into
1489 another.
1491 These constraints are represented as multiple alternatives.  An alternative
1492 can be described by a series of letters for each operand.  The overall
1493 constraint for an operand is made from the letters for this operand
1494 from the first alternative, a comma, the letters for this operand from
1495 the second alternative, a comma, and so on until the last alternative.
1496 All operands for a single instruction must have the same number of 
1497 alternatives.
1498 @ifset INTERNALS
1499 Here is how it is done for fullword logical-or on the 68000:
1501 @smallexample
1502 (define_insn "iorsi3"
1503   [(set (match_operand:SI 0 "general_operand" "=m,d")
1504         (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
1505                 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
1506   @dots{})
1507 @end smallexample
1509 The first alternative has @samp{m} (memory) for operand 0, @samp{0} for
1510 operand 1 (meaning it must match operand 0), and @samp{dKs} for operand
1511 2.  The second alternative has @samp{d} (data register) for operand 0,
1512 @samp{0} for operand 1, and @samp{dmKs} for operand 2.  The @samp{=} and
1513 @samp{%} in the constraints apply to all the alternatives; their
1514 meaning is explained in a later section (@pxref{Modifiers}).
1516 If all the operands fit any one alternative, the instruction is valid.
1517 Otherwise, for each alternative, the compiler counts how many instructions
1518 must be added to copy the operands so that that alternative applies.
1519 The alternative requiring the least copying is chosen.  If two alternatives
1520 need the same amount of copying, the one that comes first is chosen.
1521 These choices can be altered with the @samp{?} and @samp{!} characters:
1523 @table @code
1524 @cindex @samp{?} in constraint
1525 @cindex question mark
1526 @item ?
1527 Disparage slightly the alternative that the @samp{?} appears in,
1528 as a choice when no alternative applies exactly.  The compiler regards
1529 this alternative as one unit more costly for each @samp{?} that appears
1530 in it.
1532 @cindex @samp{!} in constraint
1533 @cindex exclamation point
1534 @item !
1535 Disparage severely the alternative that the @samp{!} appears in.
1536 This alternative can still be used if it fits without reloading,
1537 but if reloading is needed, some other alternative will be used.
1539 @cindex @samp{^} in constraint
1540 @cindex caret
1541 @item ^
1542 This constraint is analogous to @samp{?} but it disparages slightly
1543 the alternative only if the operand with the @samp{^} needs a reload.
1545 @cindex @samp{$} in constraint
1546 @cindex dollar sign
1547 @item $
1548 This constraint is analogous to @samp{!} but it disparages severely
1549 the alternative only if the operand with the @samp{$} needs a reload.
1550 @end table
1552 When an insn pattern has multiple alternatives in its constraints, often
1553 the appearance of the assembler code is determined mostly by which
1554 alternative was matched.  When this is so, the C code for writing the
1555 assembler code can use the variable @code{which_alternative}, which is
1556 the ordinal number of the alternative that was actually satisfied (0 for
1557 the first, 1 for the second alternative, etc.).  @xref{Output Statement}.
1558 @end ifset
1559 @ifclear INTERNALS
1561 So the first alternative for the 68000's logical-or could be written as 
1562 @code{"+m" (output) : "ir" (input)}.  The second could be @code{"+r" 
1563 (output): "irm" (input)}.  However, the fact that two memory locations 
1564 cannot be used in a single instruction prevents simply using @code{"+rm" 
1565 (output) : "irm" (input)}.  Using multi-alternatives, this might be 
1566 written as @code{"+m,r" (output) : "ir,irm" (input)}.  This describes
1567 all the available alternatives to the compiler, allowing it to choose 
1568 the most efficient one for the current conditions.
1570 There is no way within the template to determine which alternative was 
1571 chosen.  However you may be able to wrap your @code{asm} statements with 
1572 builtins such as @code{__builtin_constant_p} to achieve the desired results.
1573 @end ifclear
1575 @ifset INTERNALS
1576 @node Class Preferences
1577 @subsection Register Class Preferences
1578 @cindex class preference constraints
1579 @cindex register class preference constraints
1581 @cindex voting between constraint alternatives
1582 The operand constraints have another function: they enable the compiler
1583 to decide which kind of hardware register a pseudo register is best
1584 allocated to.  The compiler examines the constraints that apply to the
1585 insns that use the pseudo register, looking for the machine-dependent
1586 letters such as @samp{d} and @samp{a} that specify classes of registers.
1587 The pseudo register is put in whichever class gets the most ``votes''.
1588 The constraint letters @samp{g} and @samp{r} also vote: they vote in
1589 favor of a general register.  The machine description says which registers
1590 are considered general.
1592 Of course, on some machines all registers are equivalent, and no register
1593 classes are defined.  Then none of this complexity is relevant.
1594 @end ifset
1596 @node Modifiers
1597 @subsection Constraint Modifier Characters
1598 @cindex modifiers in constraints
1599 @cindex constraint modifier characters
1601 @c prevent bad page break with this line
1602 Here are constraint modifier characters.
1604 @table @samp
1605 @cindex @samp{=} in constraint
1606 @item =
1607 Means that this operand is written to by this instruction:
1608 the previous value is discarded and replaced by new data.
1610 @cindex @samp{+} in constraint
1611 @item +
1612 Means that this operand is both read and written by the instruction.
1614 When the compiler fixes up the operands to satisfy the constraints,
1615 it needs to know which operands are read by the instruction and
1616 which are written by it.  @samp{=} identifies an operand which is only
1617 written; @samp{+} identifies an operand that is both read and written; all
1618 other operands are assumed to only be read.
1620 If you specify @samp{=} or @samp{+} in a constraint, you put it in the
1621 first character of the constraint string.
1623 @cindex @samp{&} in constraint
1624 @cindex earlyclobber operand
1625 @item &
1626 Means (in a particular alternative) that this operand is an
1627 @dfn{earlyclobber} operand, which is written before the instruction is
1628 finished using the input operands.  Therefore, this operand may not lie
1629 in a register that is read by the instruction or as part of any memory
1630 address.
1632 @samp{&} applies only to the alternative in which it is written.  In
1633 constraints with multiple alternatives, sometimes one alternative
1634 requires @samp{&} while others do not.  See, for example, the
1635 @samp{movdf} insn of the 68000.
1637 An operand which is read by the instruction can be tied to an earlyclobber
1638 operand if its only use as an input occurs before the early result is
1639 written.  Adding alternatives of this form often allows GCC to produce
1640 better code when only some of the read operands can be affected by the
1641 earlyclobber. See, for example, the @samp{mulsi3} insn of the ARM@.
1643 Furthermore, if the @dfn{earlyclobber} operand is also a read/write
1644 operand, then that operand is written only after it's used.
1646 @samp{&} does not obviate the need to write @samp{=} or @samp{+}.  As
1647 @dfn{earlyclobber} operands are always written, a read-only
1648 @dfn{earlyclobber} operand is ill-formed and will be rejected by the
1649 compiler.
1651 @cindex @samp{%} in constraint
1652 @item %
1653 Declares the instruction to be commutative for this operand and the
1654 following operand.  This means that the compiler may interchange the
1655 two operands if that is the cheapest way to make all operands fit the
1656 constraints.  @samp{%} applies to all alternatives and must appear as
1657 the first character in the constraint.  Only read-only operands can use
1658 @samp{%}.
1660 @ifset INTERNALS
1661 This is often used in patterns for addition instructions
1662 that really have only two operands: the result must go in one of the
1663 arguments.  Here for example, is how the 68000 halfword-add
1664 instruction is defined:
1666 @smallexample
1667 (define_insn "addhi3"
1668   [(set (match_operand:HI 0 "general_operand" "=m,r")
1669      (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
1670               (match_operand:HI 2 "general_operand" "di,g")))]
1671   @dots{})
1672 @end smallexample
1673 @end ifset
1674 GCC can only handle one commutative pair in an asm; if you use more,
1675 the compiler may fail.  Note that you need not use the modifier if
1676 the two alternatives are strictly identical; this would only waste
1677 time in the reload pass.
1678 @ifset INTERNALS
1679 The modifier is not operational after
1680 register allocation, so the result of @code{define_peephole2}
1681 and @code{define_split}s performed after reload cannot rely on
1682 @samp{%} to make the intended insn match.
1684 @cindex @samp{#} in constraint
1685 @item #
1686 Says that all following characters, up to the next comma, are to be
1687 ignored as a constraint.  They are significant only for choosing
1688 register preferences.
1690 @cindex @samp{*} in constraint
1691 @item *
1692 Says that the following character should be ignored when choosing
1693 register preferences.  @samp{*} has no effect on the meaning of the
1694 constraint as a constraint, and no effect on reloading.  For LRA
1695 @samp{*} additionally disparages slightly the alternative if the
1696 following character matches the operand.
1698 Here is an example: the 68000 has an instruction to sign-extend a
1699 halfword in a data register, and can also sign-extend a value by
1700 copying it into an address register.  While either kind of register is
1701 acceptable, the constraints on an address-register destination are
1702 less strict, so it is best if register allocation makes an address
1703 register its goal.  Therefore, @samp{*} is used so that the @samp{d}
1704 constraint letter (for data register) is ignored when computing
1705 register preferences.
1707 @smallexample
1708 (define_insn "extendhisi2"
1709   [(set (match_operand:SI 0 "general_operand" "=*d,a")
1710         (sign_extend:SI
1711          (match_operand:HI 1 "general_operand" "0,g")))]
1712   @dots{})
1713 @end smallexample
1714 @end ifset
1715 @end table
1717 @node Machine Constraints
1718 @subsection Constraints for Particular Machines
1719 @cindex machine specific constraints
1720 @cindex constraints, machine specific
1722 Whenever possible, you should use the general-purpose constraint letters
1723 in @code{asm} arguments, since they will convey meaning more readily to
1724 people reading your code.  Failing that, use the constraint letters
1725 that usually have very similar meanings across architectures.  The most
1726 commonly used constraints are @samp{m} and @samp{r} (for memory and
1727 general-purpose registers respectively; @pxref{Simple Constraints}), and
1728 @samp{I}, usually the letter indicating the most common
1729 immediate-constant format.
1731 Each architecture defines additional constraints.  These constraints
1732 are used by the compiler itself for instruction generation, as well as
1733 for @code{asm} statements; therefore, some of the constraints are not
1734 particularly useful for @code{asm}.  Here is a summary of some of the
1735 machine-dependent constraints available on some particular machines;
1736 it includes both constraints that are useful for @code{asm} and
1737 constraints that aren't.  The compiler source file mentioned in the
1738 table heading for each architecture is the definitive reference for
1739 the meanings of that architecture's constraints.
1741 @c Please keep this table alphabetized by target!
1742 @table @emph
1743 @item AArch64 family---@file{config/aarch64/constraints.md}
1744 @table @code
1745 @item k
1746 The stack pointer register (@code{SP})
1748 @item w
1749 Floating point register, Advanced SIMD vector register or SVE vector register
1751 @item x
1752 Like @code{w}, but restricted to registers 0 to 15 inclusive.
1754 @item y
1755 Like @code{w}, but restricted to registers 0 to 7 inclusive.
1757 @item Upl
1758 One of the low eight SVE predicate registers (@code{P0} to @code{P7})
1760 @item Upa
1761 Any of the SVE predicate registers (@code{P0} to @code{P15})
1763 @item I
1764 Integer constant that is valid as an immediate operand in an @code{ADD}
1765 instruction
1767 @item J
1768 Integer constant that is valid as an immediate operand in a @code{SUB}
1769 instruction (once negated)
1771 @item K
1772 Integer constant that can be used with a 32-bit logical instruction
1774 @item L
1775 Integer constant that can be used with a 64-bit logical instruction
1777 @item M
1778 Integer constant that is valid as an immediate operand in a 32-bit @code{MOV}
1779 pseudo instruction. The @code{MOV} may be assembled to one of several different
1780 machine instructions depending on the value
1782 @item N
1783 Integer constant that is valid as an immediate operand in a 64-bit @code{MOV}
1784 pseudo instruction
1786 @item S
1787 An absolute symbolic address or a label reference
1789 @item Y
1790 Floating point constant zero
1792 @item Z
1793 Integer constant zero
1795 @item Ush
1796 The high part (bits 12 and upwards) of the pc-relative address of a symbol
1797 within 4GB of the instruction
1799 @item Q
1800 A memory address which uses a single base register with no offset
1802 @item Ump
1803 A memory address suitable for a load/store pair instruction in SI, DI, SF and
1804 DF modes
1806 @end table
1809 @item AMD GCN ---@file{config/gcn/constraints.md}
1810 @table @code
1811 @item I
1812 Immediate integer in the range @minus{}16 to 64
1814 @item J
1815 Immediate 16-bit signed integer
1817 @item Kf
1818 Immediate constant @minus{}1
1820 @item L
1821 Immediate 15-bit unsigned integer
1823 @item A
1824 Immediate constant that can be inlined in an instruction encoding: integer
1825 @minus{}16..64, or float 0.0, +/@minus{}0.5, +/@minus{}1.0, +/@minus{}2.0,
1826 +/@minus{}4.0, 1.0/(2.0*PI)
1828 @item B
1829 Immediate 32-bit signed integer that can be attached to an instruction encoding
1831 @item C
1832 Immediate 32-bit integer in range @minus{}16..4294967295 (i.e. 32-bit unsigned
1833 integer or @samp{A} constraint)
1835 @item DA
1836 Immediate 64-bit constant that can be split into two @samp{A} constants
1838 @item DB
1839 Immediate 64-bit constant that can be split into two @samp{B} constants
1841 @item U
1842 Any @code{unspec}
1844 @item Y
1845 Any @code{symbol_ref} or @code{label_ref}
1847 @item v
1848 VGPR register
1850 @item Sg
1851 SGPR register
1853 @item SD
1854 SGPR registers valid for instruction destinations, including VCC, M0 and EXEC
1856 @item SS
1857 SGPR registers valid for instruction sources, including VCC, M0, EXEC and SCC
1859 @item Sm
1860 SGPR registers valid as a source for scalar memory instructions (excludes M0
1861 and EXEC)
1863 @item Sv
1864 SGPR registers valid as a source or destination for vector instructions
1865 (excludes EXEC)
1867 @item ca
1868 All condition registers: SCC, VCCZ, EXECZ
1870 @item cs
1871 Scalar condition register: SCC
1873 @item cV
1874 Vector condition register: VCC, VCC_LO, VCC_HI
1876 @item e
1877 EXEC register (EXEC_LO and EXEC_HI)
1879 @item RB
1880 Memory operand with address space suitable for @code{buffer_*} instructions
1882 @item RF
1883 Memory operand with address space suitable for @code{flat_*} instructions
1885 @item RS
1886 Memory operand with address space suitable for @code{s_*} instructions
1888 @item RL
1889 Memory operand with address space suitable for @code{ds_*} LDS instructions
1891 @item RG
1892 Memory operand with address space suitable for @code{ds_*} GDS instructions
1894 @item RD
1895 Memory operand with address space suitable for any @code{ds_*} instructions
1897 @item RM
1898 Memory operand with address space suitable for @code{global_*} instructions
1900 @end table
1903 @item ARC ---@file{config/arc/constraints.md}
1904 @table @code
1905 @item q
1906 Registers usable in ARCompact 16-bit instructions: @code{r0}-@code{r3},
1907 @code{r12}-@code{r15}.  This constraint can only match when the @option{-mq}
1908 option is in effect.
1910 @item e
1911 Registers usable as base-regs of memory addresses in ARCompact 16-bit memory
1912 instructions: @code{r0}-@code{r3}, @code{r12}-@code{r15}, @code{sp}.
1913 This constraint can only match when the @option{-mq}
1914 option is in effect.
1915 @item D
1916 ARC FPX (dpfp) 64-bit registers. @code{D0}, @code{D1}.
1918 @item I
1919 A signed 12-bit integer constant.
1921 @item Cal
1922 constant for arithmetic/logical operations.  This might be any constant
1923 that can be put into a long immediate by the assmbler or linker without
1924 involving a PIC relocation.
1926 @item K
1927 A 3-bit unsigned integer constant.
1929 @item L
1930 A 6-bit unsigned integer constant.
1932 @item CnL
1933 One's complement of a 6-bit unsigned integer constant.
1935 @item CmL
1936 Two's complement of a 6-bit unsigned integer constant.
1938 @item M
1939 A 5-bit unsigned integer constant.
1941 @item O
1942 A 7-bit unsigned integer constant.
1944 @item P
1945 A 8-bit unsigned integer constant.
1947 @item H
1948 Any const_double value.
1949 @end table
1951 @item ARM family---@file{config/arm/constraints.md}
1952 @table @code
1954 @item h
1955 In Thumb state, the core registers @code{r8}-@code{r15}.
1957 @item k
1958 The stack pointer register.
1960 @item l
1961 In Thumb State the core registers @code{r0}-@code{r7}.  In ARM state this
1962 is an alias for the @code{r} constraint.
1964 @item t
1965 VFP floating-point registers @code{s0}-@code{s31}.  Used for 32 bit values.
1967 @item w
1968 VFP floating-point registers @code{d0}-@code{d31} and the appropriate
1969 subset @code{d0}-@code{d15} based on command line options.
1970 Used for 64 bit values only.  Not valid for Thumb1.
1972 @item y
1973 The iWMMX co-processor registers.
1975 @item z
1976 The iWMMX GR registers.
1978 @item G
1979 The floating-point constant 0.0
1981 @item I
1982 Integer that is valid as an immediate operand in a data processing
1983 instruction.  That is, an integer in the range 0 to 255 rotated by a
1984 multiple of 2
1986 @item J
1987 Integer in the range @minus{}4095 to 4095
1989 @item K
1990 Integer that satisfies constraint @samp{I} when inverted (ones complement)
1992 @item L
1993 Integer that satisfies constraint @samp{I} when negated (twos complement)
1995 @item M
1996 Integer in the range 0 to 32
1998 @item Q
1999 A memory reference where the exact address is in a single register
2000 (`@samp{m}' is preferable for @code{asm} statements)
2002 @item R
2003 An item in the constant pool
2005 @item S
2006 A symbol in the text segment of the current file
2008 @item Uv
2009 A memory reference suitable for VFP load/store insns (reg+constant offset)
2011 @item Uy
2012 A memory reference suitable for iWMMXt load/store instructions.
2014 @item Uq
2015 A memory reference suitable for the ARMv4 ldrsb instruction.
2016 @end table
2018 @item AVR family---@file{config/avr/constraints.md}
2019 @table @code
2020 @item l
2021 Registers from r0 to r15
2023 @item a
2024 Registers from r16 to r23
2026 @item d
2027 Registers from r16 to r31
2029 @item w
2030 Registers from r24 to r31.  These registers can be used in @samp{adiw} command
2032 @item e
2033 Pointer register (r26--r31)
2035 @item b
2036 Base pointer register (r28--r31)
2038 @item q
2039 Stack pointer register (SPH:SPL)
2041 @item t
2042 Temporary register r0
2044 @item x
2045 Register pair X (r27:r26)
2047 @item y
2048 Register pair Y (r29:r28)
2050 @item z
2051 Register pair Z (r31:r30)
2053 @item I
2054 Constant greater than @minus{}1, less than 64
2056 @item J
2057 Constant greater than @minus{}64, less than 1
2059 @item K
2060 Constant integer 2
2062 @item L
2063 Constant integer 0
2065 @item M
2066 Constant that fits in 8 bits
2068 @item N
2069 Constant integer @minus{}1
2071 @item O
2072 Constant integer 8, 16, or 24
2074 @item P
2075 Constant integer 1
2077 @item G
2078 A floating point constant 0.0
2080 @item Q
2081 A memory address based on Y or Z pointer with displacement.
2082 @end table
2084 @item Blackfin family---@file{config/bfin/constraints.md}
2085 @table @code
2086 @item a
2087 P register
2089 @item d
2090 D register
2092 @item z
2093 A call clobbered P register.
2095 @item q@var{n}
2096 A single register.  If @var{n} is in the range 0 to 7, the corresponding D
2097 register.  If it is @code{A}, then the register P0.
2099 @item D
2100 Even-numbered D register
2102 @item W
2103 Odd-numbered D register
2105 @item e
2106 Accumulator register.
2108 @item A
2109 Even-numbered accumulator register.
2111 @item B
2112 Odd-numbered accumulator register.
2114 @item b
2115 I register
2117 @item v
2118 B register
2120 @item f
2121 M register
2123 @item c
2124 Registers used for circular buffering, i.e.@: I, B, or L registers.
2126 @item C
2127 The CC register.
2129 @item t
2130 LT0 or LT1.
2132 @item k
2133 LC0 or LC1.
2135 @item u
2136 LB0 or LB1.
2138 @item x
2139 Any D, P, B, M, I or L register.
2141 @item y
2142 Additional registers typically used only in prologues and epilogues: RETS,
2143 RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.
2145 @item w
2146 Any register except accumulators or CC.
2148 @item Ksh
2149 Signed 16 bit integer (in the range @minus{}32768 to 32767)
2151 @item Kuh
2152 Unsigned 16 bit integer (in the range 0 to 65535)
2154 @item Ks7
2155 Signed 7 bit integer (in the range @minus{}64 to 63)
2157 @item Ku7
2158 Unsigned 7 bit integer (in the range 0 to 127)
2160 @item Ku5
2161 Unsigned 5 bit integer (in the range 0 to 31)
2163 @item Ks4
2164 Signed 4 bit integer (in the range @minus{}8 to 7)
2166 @item Ks3
2167 Signed 3 bit integer (in the range @minus{}3 to 4)
2169 @item Ku3
2170 Unsigned 3 bit integer (in the range 0 to 7)
2172 @item P@var{n}
2173 Constant @var{n}, where @var{n} is a single-digit constant in the range 0 to 4.
2175 @item PA
2176 An integer equal to one of the MACFLAG_XXX constants that is suitable for
2177 use with either accumulator.
2179 @item PB
2180 An integer equal to one of the MACFLAG_XXX constants that is suitable for
2181 use only with accumulator A1.
2183 @item M1
2184 Constant 255.
2186 @item M2
2187 Constant 65535.
2189 @item J
2190 An integer constant with exactly a single bit set.
2192 @item L
2193 An integer constant with all bits set except exactly one.
2195 @item H
2196 @itemx Q
2197 Any SYMBOL_REF.
2198 @end table
2200 @item C-SKY---@file{config/csky/constraints.md}
2201 @table @code
2203 @item a
2204 The mini registers r0 - r7.
2206 @item b
2207 The low registers r0 - r15.
2209 @item c
2210 C register.
2212 @item y
2213 HI and LO registers.
2215 @item l
2216 LO register.
2218 @item h
2219 HI register.
2221 @item v
2222 Vector registers.
2224 @item z
2225 Stack pointer register (SP).
2227 @item Q
2228 A memory address which uses a base register with a short offset
2229 or with a index register with its scale.
2231 @item W
2232 A memory address which uses a base register with a index register
2233 with its scale.
2234 @end table
2236 @ifset INTERNALS
2237 The C-SKY back end supports a large set of additional constraints
2238 that are only useful for instruction selection or splitting rather
2239 than inline asm, such as constraints representing constant integer
2240 ranges accepted by particular instruction encodings.
2241 Refer to the source code for details.
2242 @end ifset
2244 @item Epiphany---@file{config/epiphany/constraints.md}
2245 @table @code
2246 @item U16
2247 An unsigned 16-bit constant.
2249 @item K
2250 An unsigned 5-bit constant.
2252 @item L
2253 A signed 11-bit constant.
2255 @item Cm1
2256 A signed 11-bit constant added to @minus{}1.
2257 Can only match when the @option{-m1reg-@var{reg}} option is active.
2259 @item Cl1
2260 Left-shift of @minus{}1, i.e., a bit mask with a block of leading ones, the rest
2261 being a block of trailing zeroes.
2262 Can only match when the @option{-m1reg-@var{reg}} option is active.
2264 @item Cr1
2265 Right-shift of @minus{}1, i.e., a bit mask with a trailing block of ones, the
2266 rest being zeroes.  Or to put it another way, one less than a power of two.
2267 Can only match when the @option{-m1reg-@var{reg}} option is active.
2269 @item Cal
2270 Constant for arithmetic/logical operations.
2271 This is like @code{i}, except that for position independent code,
2272 no symbols / expressions needing relocations are allowed.
2274 @item Csy
2275 Symbolic constant for call/jump instruction.
2277 @item Rcs
2278 The register class usable in short insns.  This is a register class
2279 constraint, and can thus drive register allocation.
2280 This constraint won't match unless @option{-mprefer-short-insn-regs} is
2281 in effect.
2283 @item Rsc
2284 The register class of registers that can be used to hold a
2285 sibcall call address.  I.e., a caller-saved register.
2287 @item Rct
2288 Core control register class.
2290 @item Rgs
2291 The register group usable in short insns.
2292 This constraint does not use a register class, so that it only
2293 passively matches suitable registers, and doesn't drive register allocation.
2295 @ifset INTERNALS
2296 @item Car
2297 Constant suitable for the addsi3_r pattern.  This is a valid offset
2298 For byte, halfword, or word addressing.
2299 @end ifset
2301 @item Rra
2302 Matches the return address if it can be replaced with the link register.
2304 @item Rcc
2305 Matches the integer condition code register.
2307 @item Sra
2308 Matches the return address if it is in a stack slot.
2310 @item Cfm
2311 Matches control register values to switch fp mode, which are encapsulated in
2312 @code{UNSPEC_FP_MODE}.
2313 @end table
2315 @item FRV---@file{config/frv/frv.h}
2316 @table @code
2317 @item a
2318 Register in the class @code{ACC_REGS} (@code{acc0} to @code{acc7}).
2320 @item b
2321 Register in the class @code{EVEN_ACC_REGS} (@code{acc0} to @code{acc7}).
2323 @item c
2324 Register in the class @code{CC_REGS} (@code{fcc0} to @code{fcc3} and
2325 @code{icc0} to @code{icc3}).
2327 @item d
2328 Register in the class @code{GPR_REGS} (@code{gr0} to @code{gr63}).
2330 @item e
2331 Register in the class @code{EVEN_REGS} (@code{gr0} to @code{gr63}).
2332 Odd registers are excluded not in the class but through the use of a machine
2333 mode larger than 4 bytes.
2335 @item f
2336 Register in the class @code{FPR_REGS} (@code{fr0} to @code{fr63}).
2338 @item h
2339 Register in the class @code{FEVEN_REGS} (@code{fr0} to @code{fr63}).
2340 Odd registers are excluded not in the class but through the use of a machine
2341 mode larger than 4 bytes.
2343 @item l
2344 Register in the class @code{LR_REG} (the @code{lr} register).
2346 @item q
2347 Register in the class @code{QUAD_REGS} (@code{gr2} to @code{gr63}).
2348 Register numbers not divisible by 4 are excluded not in the class but through
2349 the use of a machine mode larger than 8 bytes.
2351 @item t
2352 Register in the class @code{ICC_REGS} (@code{icc0} to @code{icc3}).
2354 @item u
2355 Register in the class @code{FCC_REGS} (@code{fcc0} to @code{fcc3}).
2357 @item v
2358 Register in the class @code{ICR_REGS} (@code{cc4} to @code{cc7}).
2360 @item w
2361 Register in the class @code{FCR_REGS} (@code{cc0} to @code{cc3}).
2363 @item x
2364 Register in the class @code{QUAD_FPR_REGS} (@code{fr0} to @code{fr63}).
2365 Register numbers not divisible by 4 are excluded not in the class but through
2366 the use of a machine mode larger than 8 bytes.
2368 @item z
2369 Register in the class @code{SPR_REGS} (@code{lcr} and @code{lr}).
2371 @item A
2372 Register in the class @code{QUAD_ACC_REGS} (@code{acc0} to @code{acc7}).
2374 @item B
2375 Register in the class @code{ACCG_REGS} (@code{accg0} to @code{accg7}).
2377 @item C
2378 Register in the class @code{CR_REGS} (@code{cc0} to @code{cc7}).
2380 @item G
2381 Floating point constant zero
2383 @item I
2384 6-bit signed integer constant
2386 @item J
2387 10-bit signed integer constant
2389 @item L
2390 16-bit signed integer constant
2392 @item M
2393 16-bit unsigned integer constant
2395 @item N
2396 12-bit signed integer constant that is negative---i.e.@: in the
2397 range of @minus{}2048 to @minus{}1
2399 @item O
2400 Constant zero
2402 @item P
2403 12-bit signed integer constant that is greater than zero---i.e.@: in the
2404 range of 1 to 2047.
2406 @end table
2408 @item FT32---@file{config/ft32/constraints.md}
2409 @table @code
2410 @item A
2411 An absolute address
2413 @item B
2414 An offset address
2416 @item W
2417 A register indirect memory operand
2419 @item e
2420 An offset address.
2422 @item f
2423 An offset address.
2425 @item O
2426 The constant zero or one
2428 @item I
2429 A 16-bit signed constant (@minus{}32768 @dots{} 32767)
2431 @item w
2432 A bitfield mask suitable for bext or bins
2434 @item x
2435 An inverted bitfield mask suitable for bext or bins
2437 @item L
2438 A 16-bit unsigned constant, multiple of 4 (0 @dots{} 65532)
2440 @item S
2441 A 20-bit signed constant (@minus{}524288 @dots{} 524287)
2443 @item b
2444 A constant for a bitfield width (1 @dots{} 16)
2446 @item KA
2447 A 10-bit signed constant (@minus{}512 @dots{} 511)
2449 @end table
2451 @item Hewlett-Packard PA-RISC---@file{config/pa/pa.h}
2452 @table @code
2453 @item a
2454 General register 1
2456 @item f
2457 Floating point register
2459 @item q
2460 Shift amount register
2462 @item x
2463 Floating point register (deprecated)
2465 @item y
2466 Upper floating point register (32-bit), floating point register (64-bit)
2468 @item Z
2469 Any register
2471 @item I
2472 Signed 11-bit integer constant
2474 @item J
2475 Signed 14-bit integer constant
2477 @item K
2478 Integer constant that can be deposited with a @code{zdepi} instruction
2480 @item L
2481 Signed 5-bit integer constant
2483 @item M
2484 Integer constant 0
2486 @item N
2487 Integer constant that can be loaded with a @code{ldil} instruction
2489 @item O
2490 Integer constant whose value plus one is a power of 2
2492 @item P
2493 Integer constant that can be used for @code{and} operations in @code{depi}
2494 and @code{extru} instructions
2496 @item S
2497 Integer constant 31
2499 @item U
2500 Integer constant 63
2502 @item G
2503 Floating-point constant 0.0
2505 @item A
2506 A @code{lo_sum} data-linkage-table memory operand
2508 @item Q
2509 A memory operand that can be used as the destination operand of an
2510 integer store instruction
2512 @item R
2513 A scaled or unscaled indexed memory operand
2515 @item T
2516 A memory operand for floating-point loads and stores
2518 @item W
2519 A register indirect memory operand
2520 @end table
2522 @item Intel IA-64---@file{config/ia64/ia64.h}
2523 @table @code
2524 @item a
2525 General register @code{r0} to @code{r3} for @code{addl} instruction
2527 @item b
2528 Branch register
2530 @item c
2531 Predicate register (@samp{c} as in ``conditional'')
2533 @item d
2534 Application register residing in M-unit
2536 @item e
2537 Application register residing in I-unit
2539 @item f
2540 Floating-point register
2542 @item m
2543 Memory operand.  If used together with @samp{<} or @samp{>},
2544 the operand can have postincrement and postdecrement which
2545 require printing with @samp{%Pn} on IA-64.
2547 @item G
2548 Floating-point constant 0.0 or 1.0
2550 @item I
2551 14-bit signed integer constant
2553 @item J
2554 22-bit signed integer constant
2556 @item K
2557 8-bit signed integer constant for logical instructions
2559 @item L
2560 8-bit adjusted signed integer constant for compare pseudo-ops
2562 @item M
2563 6-bit unsigned integer constant for shift counts
2565 @item N
2566 9-bit signed integer constant for load and store postincrements
2568 @item O
2569 The constant zero
2571 @item P
2572 0 or @minus{}1 for @code{dep} instruction
2574 @item Q
2575 Non-volatile memory for floating-point loads and stores
2577 @item R
2578 Integer constant in the range 1 to 4 for @code{shladd} instruction
2580 @item S
2581 Memory operand except postincrement and postdecrement.  This is
2582 now roughly the same as @samp{m} when not used together with @samp{<}
2583 or @samp{>}.
2584 @end table
2586 @item M32C---@file{config/m32c/m32c.cc}
2587 @table @code
2588 @item Rsp
2589 @itemx Rfb
2590 @itemx Rsb
2591 @samp{$sp}, @samp{$fb}, @samp{$sb}.
2593 @item Rcr
2594 Any control register, when they're 16 bits wide (nothing if control
2595 registers are 24 bits wide)
2597 @item Rcl
2598 Any control register, when they're 24 bits wide.
2600 @item R0w
2601 @itemx R1w
2602 @itemx R2w
2603 @itemx R3w
2604 $r0, $r1, $r2, $r3.
2606 @item R02
2607 $r0 or $r2, or $r2r0 for 32 bit values.
2609 @item R13
2610 $r1 or $r3, or $r3r1 for 32 bit values.
2612 @item Rdi
2613 A register that can hold a 64 bit value.
2615 @item Rhl
2616 $r0 or $r1 (registers with addressable high/low bytes)
2618 @item R23
2619 $r2 or $r3
2621 @item Raa
2622 Address registers
2624 @item Raw
2625 Address registers when they're 16 bits wide.
2627 @item Ral
2628 Address registers when they're 24 bits wide.
2630 @item Rqi
2631 Registers that can hold QI values.
2633 @item Rad
2634 Registers that can be used with displacements ($a0, $a1, $sb).
2636 @item Rsi
2637 Registers that can hold 32 bit values.
2639 @item Rhi
2640 Registers that can hold 16 bit values.
2642 @item Rhc
2643 Registers chat can hold 16 bit values, including all control
2644 registers.
2646 @item Rra
2647 $r0 through R1, plus $a0 and $a1.
2649 @item Rfl
2650 The flags register.
2652 @item Rmm
2653 The memory-based pseudo-registers $mem0 through $mem15.
2655 @item Rpi
2656 Registers that can hold pointers (16 bit registers for r8c, m16c; 24
2657 bit registers for m32cm, m32c).
2659 @item Rpa
2660 Matches multiple registers in a PARALLEL to form a larger register.
2661 Used to match function return values.
2663 @item Is3
2664 @minus{}8 @dots{} 7
2666 @item IS1
2667 @minus{}128 @dots{} 127
2669 @item IS2
2670 @minus{}32768 @dots{} 32767
2672 @item IU2
2673 0 @dots{} 65535
2675 @item In4
2676 @minus{}8 @dots{} @minus{}1 or 1 @dots{} 8
2678 @item In5
2679 @minus{}16 @dots{} @minus{}1 or 1 @dots{} 16
2681 @item In6
2682 @minus{}32 @dots{} @minus{}1 or 1 @dots{} 32
2684 @item IM2
2685 @minus{}65536 @dots{} @minus{}1
2687 @item Ilb
2688 An 8 bit value with exactly one bit set.
2690 @item Ilw
2691 A 16 bit value with exactly one bit set.
2693 @item Sd
2694 The common src/dest memory addressing modes.
2696 @item Sa
2697 Memory addressed using $a0 or $a1.
2699 @item Si
2700 Memory addressed with immediate addresses.
2702 @item Ss
2703 Memory addressed using the stack pointer ($sp).
2705 @item Sf
2706 Memory addressed using the frame base register ($fb).
2708 @item Ss
2709 Memory addressed using the small base register ($sb).
2711 @item S1
2712 $r1h
2713 @end table
2715 @item LoongArch---@file{config/loongarch/constraints.md}
2716 @table @code
2717 @item f
2718 A floating-point register (if available).
2719 @item k
2720 A memory operand whose address is formed by a base register and
2721 (optionally scaled) index register.
2722 @item l
2723 A signed 16-bit constant.
2724 @item m
2725 A memory operand whose address is formed by a base register and offset
2726 that is suitable for use in instructions with the same addressing mode
2727 as @code{st.w} and @code{ld.w}.
2728 @item I
2729 A signed 12-bit constant (for arithmetic instructions).
2730 @item K
2731 An unsigned 12-bit constant (for logic instructions).
2732 @item ZB
2733 An address that is held in a general-purpose register.
2734 The offset is zero.
2735 @item ZC
2736 A memory operand whose address is formed by a base register and offset
2737 that is suitable for use in instructions with the same addressing mode
2738 as @code{ll.w} and @code{sc.w}.
2739 @end table
2741 @item MicroBlaze---@file{config/microblaze/constraints.md}
2742 @table @code
2743 @item d
2744 A general register (@code{r0} to @code{r31}).
2746 @item z
2747 A status register (@code{rmsr}, @code{$fcc1} to @code{$fcc7}).
2749 @end table
2751 @item MIPS---@file{config/mips/constraints.md}
2752 @table @code
2753 @item d
2754 A general-purpose register.  This is equivalent to @code{r} unless
2755 generating MIPS16 code, in which case the MIPS16 register set is used.
2757 @item f
2758 A floating-point register (if available).
2760 @item h
2761 Formerly the @code{hi} register.  This constraint is no longer supported.
2763 @item l
2764 The @code{lo} register.  Use this register to store values that are
2765 no bigger than a word.
2767 @item x
2768 The concatenated @code{hi} and @code{lo} registers.  Use this register
2769 to store doubleword values.
2771 @item c
2772 A register suitable for use in an indirect jump.  This will always be
2773 @code{$25} for @option{-mabicalls}.
2775 @item v
2776 Register @code{$3}.  Do not use this constraint in new code;
2777 it is retained only for compatibility with glibc.
2779 @item y
2780 Equivalent to @code{r}; retained for backwards compatibility.
2782 @item z
2783 A floating-point condition code register.
2785 @item I
2786 A signed 16-bit constant (for arithmetic instructions).
2788 @item J
2789 Integer zero.
2791 @item K
2792 An unsigned 16-bit constant (for logic instructions).
2794 @item L
2795 A signed 32-bit constant in which the lower 16 bits are zero.
2796 Such constants can be loaded using @code{lui}.
2798 @item M
2799 A constant that cannot be loaded using @code{lui}, @code{addiu}
2800 or @code{ori}.
2802 @item N
2803 A constant in the range @minus{}65535 to @minus{}1 (inclusive).
2805 @item O
2806 A signed 15-bit constant.
2808 @item P
2809 A constant in the range 1 to 65535 (inclusive).
2811 @item G
2812 Floating-point zero.
2814 @item R
2815 An address that can be used in a non-macro load or store.
2817 @item ZC
2818 A memory operand whose address is formed by a base register and offset
2819 that is suitable for use in instructions with the same addressing mode
2820 as @code{ll} and @code{sc}.
2822 @item ZD
2823 An address suitable for a @code{prefetch} instruction, or for any other
2824 instruction with the same addressing mode as @code{prefetch}.
2825 @end table
2827 @item Motorola 680x0---@file{config/m68k/constraints.md}
2828 @table @code
2829 @item a
2830 Address register
2832 @item d
2833 Data register
2835 @item f
2836 68881 floating-point register, if available
2838 @item I
2839 Integer in the range 1 to 8
2841 @item J
2842 16-bit signed number
2844 @item K
2845 Signed number whose magnitude is greater than 0x80
2847 @item L
2848 Integer in the range @minus{}8 to @minus{}1
2850 @item M
2851 Signed number whose magnitude is greater than 0x100
2853 @item N
2854 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
2856 @item O
2857 16 (for rotate using swap)
2859 @item P
2860 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
2862 @item R
2863 Numbers that mov3q can handle
2865 @item G
2866 Floating point constant that is not a 68881 constant
2868 @item S
2869 Operands that satisfy 'm' when -mpcrel is in effect
2871 @item T
2872 Operands that satisfy 's' when -mpcrel is not in effect
2874 @item Q
2875 Address register indirect addressing mode
2877 @item U
2878 Register offset addressing
2880 @item W
2881 const_call_operand
2883 @item Cs
2884 symbol_ref or const
2886 @item Ci
2887 const_int
2889 @item C0
2890 const_int 0
2892 @item Cj
2893 Range of signed numbers that don't fit in 16 bits
2895 @item Cmvq
2896 Integers valid for mvq
2898 @item Capsw
2899 Integers valid for a moveq followed by a swap
2901 @item Cmvz
2902 Integers valid for mvz
2904 @item Cmvs
2905 Integers valid for mvs
2907 @item Ap
2908 push_operand
2910 @item Ac
2911 Non-register operands allowed in clr
2913 @end table
2915 @item Moxie---@file{config/moxie/constraints.md}
2916 @table @code
2917 @item A
2918 An absolute address
2920 @item B
2921 An offset address
2923 @item W
2924 A register indirect memory operand
2926 @item I
2927 A constant in the range of 0 to 255.
2929 @item N
2930 A constant in the range of 0 to @minus{}255.
2932 @end table
2934 @item MSP430--@file{config/msp430/constraints.md}
2935 @table @code
2937 @item R12
2938 Register R12.
2940 @item R13
2941 Register R13.
2943 @item K
2944 Integer constant 1.
2946 @item L
2947 Integer constant -1^20..1^19.
2949 @item M
2950 Integer constant 1-4.
2952 @item Ya
2953 Memory references which do not require an extended MOVX instruction.
2955 @item Yl
2956 Memory reference, labels only.
2958 @item Ys
2959 Memory reference, stack only.
2961 @end table
2963 @item NDS32---@file{config/nds32/constraints.md}
2964 @table @code
2965 @item w
2966 LOW register class $r0 to $r7 constraint for V3/V3M ISA.
2967 @item l
2968 LOW register class $r0 to $r7.
2969 @item d
2970 MIDDLE register class $r0 to $r11, $r16 to $r19.
2971 @item h
2972 HIGH register class $r12 to $r14, $r20 to $r31.
2973 @item t
2974 Temporary assist register $ta (i.e.@: $r15).
2975 @item k
2976 Stack register $sp.
2977 @item Iu03
2978 Unsigned immediate 3-bit value.
2979 @item In03
2980 Negative immediate 3-bit value in the range of @minus{}7--0.
2981 @item Iu04
2982 Unsigned immediate 4-bit value.
2983 @item Is05
2984 Signed immediate 5-bit value.
2985 @item Iu05
2986 Unsigned immediate 5-bit value.
2987 @item In05
2988 Negative immediate 5-bit value in the range of @minus{}31--0.
2989 @item Ip05
2990 Unsigned immediate 5-bit value for movpi45 instruction with range 16--47.
2991 @item Iu06
2992 Unsigned immediate 6-bit value constraint for addri36.sp instruction.
2993 @item Iu08
2994 Unsigned immediate 8-bit value.
2995 @item Iu09
2996 Unsigned immediate 9-bit value.
2997 @item Is10
2998 Signed immediate 10-bit value.
2999 @item Is11
3000 Signed immediate 11-bit value.
3001 @item Is15
3002 Signed immediate 15-bit value.
3003 @item Iu15
3004 Unsigned immediate 15-bit value.
3005 @item Ic15
3006 A constant which is not in the range of imm15u but ok for bclr instruction.
3007 @item Ie15
3008 A constant which is not in the range of imm15u but ok for bset instruction.
3009 @item It15
3010 A constant which is not in the range of imm15u but ok for btgl instruction.
3011 @item Ii15
3012 A constant whose compliment value is in the range of imm15u
3013 and ok for bitci instruction.
3014 @item Is16
3015 Signed immediate 16-bit value.
3016 @item Is17
3017 Signed immediate 17-bit value.
3018 @item Is19
3019 Signed immediate 19-bit value.
3020 @item Is20
3021 Signed immediate 20-bit value.
3022 @item Ihig
3023 The immediate value that can be simply set high 20-bit.
3024 @item Izeb
3025 The immediate value 0xff.
3026 @item Izeh
3027 The immediate value 0xffff.
3028 @item Ixls
3029 The immediate value 0x01.
3030 @item Ix11
3031 The immediate value 0x7ff.
3032 @item Ibms
3033 The immediate value with power of 2.
3034 @item Ifex
3035 The immediate value with power of 2 minus 1.
3036 @item U33
3037 Memory constraint for 333 format.
3038 @item U45
3039 Memory constraint for 45 format.
3040 @item U37
3041 Memory constraint for 37 format.
3042 @end table
3044 @item Nios II family---@file{config/nios2/constraints.md}
3045 @table @code
3047 @item I
3048 Integer that is valid as an immediate operand in an
3049 instruction taking a signed 16-bit number. Range
3050 @minus{}32768 to 32767.
3052 @item J
3053 Integer that is valid as an immediate operand in an
3054 instruction taking an unsigned 16-bit number. Range
3055 0 to 65535.
3057 @item K
3058 Integer that is valid as an immediate operand in an
3059 instruction taking only the upper 16-bits of a
3060 32-bit number. Range 32-bit numbers with the lower
3061 16-bits being 0.
3063 @item L
3064 Integer that is valid as an immediate operand for a 
3065 shift instruction. Range 0 to 31.
3067 @item M
3068 Integer that is valid as an immediate operand for
3069 only the value 0. Can be used in conjunction with
3070 the format modifier @code{z} to use @code{r0}
3071 instead of @code{0} in the assembly output.
3073 @item N
3074 Integer that is valid as an immediate operand for
3075 a custom instruction opcode. Range 0 to 255.
3077 @item P
3078 An immediate operand for R2 andchi/andci instructions. 
3080 @item S
3081 Matches immediates which are addresses in the small
3082 data section and therefore can be added to @code{gp}
3083 as a 16-bit immediate to re-create their 32-bit value.
3085 @item U
3086 Matches constants suitable as an operand for the rdprs and
3087 cache instructions.
3089 @item v
3090 A memory operand suitable for Nios II R2 load/store
3091 exclusive instructions.
3093 @item w
3094 A memory operand suitable for load/store IO and cache
3095 instructions.
3097 @ifset INTERNALS
3098 @item T
3099 A @code{const} wrapped @code{UNSPEC} expression,
3100 representing a supported PIC or TLS relocation.
3101 @end ifset
3103 @end table
3105 @item OpenRISC---@file{config/or1k/constraints.md}
3106 @table @code
3107 @item I
3108 Integer that is valid as an immediate operand in an
3109 instruction taking a signed 16-bit number. Range
3110 @minus{}32768 to 32767.
3112 @item K
3113 Integer that is valid as an immediate operand in an
3114 instruction taking an unsigned 16-bit number. Range
3115 0 to 65535.
3117 @item M
3118 Signed 16-bit constant shifted left 16 bits. (Used with @code{l.movhi})
3120 @item O
3121 Zero
3123 @ifset INTERNALS
3124 @item c
3125 Register usable for sibcalls.
3126 @end ifset
3128 @end table
3130 @item PDP-11---@file{config/pdp11/constraints.md}
3131 @table @code
3132 @item a
3133 Floating point registers AC0 through AC3.  These can be loaded from/to
3134 memory with a single instruction.
3136 @item d
3137 Odd numbered general registers (R1, R3, R5).  These are used for
3138 16-bit multiply operations.
3140 @item D
3141 A memory reference that is encoded within the opcode, but not
3142 auto-increment or auto-decrement.
3144 @item f
3145 Any of the floating point registers (AC0 through AC5).
3147 @item G
3148 Floating point constant 0.
3150 @item h
3151 Floating point registers AC4 and AC5.  These cannot be loaded from/to
3152 memory with a single instruction.
3154 @item I
3155 An integer constant that fits in 16 bits.
3157 @item J
3158 An integer constant whose low order 16 bits are zero.
3160 @item K
3161 An integer constant that does not meet the constraints for codes
3162 @samp{I} or @samp{J}.
3164 @item L
3165 The integer constant 1.
3167 @item M
3168 The integer constant @minus{}1.
3170 @item N
3171 The integer constant 0.
3173 @item O
3174 Integer constants 0 through 3; shifts by these
3175 amounts are handled as multiple single-bit shifts rather than a single
3176 variable-length shift.
3178 @item Q
3179 A memory reference which requires an additional word (address or
3180 offset) after the opcode.
3182 @item R
3183 A memory reference that is encoded within the opcode.
3185 @end table
3187 @item PowerPC and IBM RS6000---@file{config/rs6000/constraints.md}
3188 @table @code
3189 @item r
3190 A general purpose register (GPR), @code{r0}@dots{}@code{r31}.
3192 @item b
3193 A base register.  Like @code{r}, but @code{r0} is not allowed, so
3194 @code{r1}@dots{}@code{r31}.
3196 @item f
3197 A floating point register (FPR), @code{f0}@dots{}@code{f31}.
3199 @item d
3200 A floating point register.  This is the same as @code{f} nowadays;
3201 historically @code{f} was for single-precision and @code{d} was for
3202 double-precision floating point.
3204 @item v
3205 An Altivec vector register (VR), @code{v0}@dots{}@code{v31}.
3207 @item wa
3208 A VSX register (VSR), @code{vs0}@dots{}@code{vs63}.  This is either an
3209 FPR (@code{vs0}@dots{}@code{vs31} are @code{f0}@dots{}@code{f31}) or a VR
3210 (@code{vs32}@dots{}@code{vs63} are @code{v0}@dots{}@code{v31}).
3212 When using @code{wa}, you should use the @code{%x} output modifier, so that
3213 the correct register number is printed.  For example:
3215 @smallexample
3216 asm ("xvadddp %x0,%x1,%x2"
3217      : "=wa" (v1)
3218      : "wa" (v2), "wa" (v3));
3219 @end smallexample
3221 You should not use @code{%x} for @code{v} operands:
3223 @smallexample
3224 asm ("xsaddqp %0,%1,%2"
3225      : "=v" (v1)
3226      : "v" (v2), "v" (v3));
3227 @end smallexample
3229 @ifset INTERNALS
3230 @item h
3231 A special register (@code{vrsave}, @code{ctr}, or @code{lr}).
3232 @end ifset
3234 @item c
3235 The count register, @code{ctr}.
3237 @item l
3238 The link register, @code{lr}.
3240 @item x
3241 Condition register field 0, @code{cr0}.
3243 @item y
3244 Any condition register field, @code{cr0}@dots{}@code{cr7}.
3246 @ifset INTERNALS
3247 @item z
3248 The carry bit, @code{XER[CA]}.
3250 @item we
3251 Like @code{wa}, if @option{-mpower9-vector} and @option{-m64} are used;
3252 otherwise, @code{NO_REGS}.
3254 @item wn
3255 No register (@code{NO_REGS}).
3257 @item wr
3258 Like @code{r}, if @option{-mpowerpc64} is used; otherwise, @code{NO_REGS}.
3260 @item wx
3261 Like @code{d}, if @option{-mpowerpc-gfxopt} is used; otherwise, @code{NO_REGS}.
3263 @item wA
3264 Like @code{b}, if @option{-mpowerpc64} is used; otherwise, @code{NO_REGS}.
3266 @item wB
3267 Signed 5-bit constant integer that can be loaded into an Altivec register.
3269 @item wE
3270 Vector constant that can be loaded with the XXSPLTIB instruction.
3272 @item wF
3273 Memory operand suitable for power8 GPR load fusion.
3275 @item wL
3276 Int constant that is the element number mfvsrld accesses in a vector.
3278 @item wM
3279 Match vector constant with all 1's if the XXLORC instruction is available.
3281 @item wO
3282 Memory operand suitable for the ISA 3.0 vector d-form instructions.
3284 @item wQ
3285 Memory operand suitable for the load/store quad instructions.
3287 @item wS
3288 Vector constant that can be loaded with XXSPLTIB & sign extension.
3290 @item wY
3291 A memory operand for a DS-form instruction.
3293 @item wZ
3294 An indexed or indirect memory operand, ignoring the bottom 4 bits.
3295 @end ifset
3297 @item I
3298 A signed 16-bit constant.
3300 @item J
3301 An unsigned 16-bit constant shifted left 16 bits (use @code{L} instead
3302 for @code{SImode} constants).
3304 @item K
3305 An unsigned 16-bit constant.
3307 @item L
3308 A signed 16-bit constant shifted left 16 bits.
3310 @ifset INTERNALS
3311 @item M
3312 An integer constant greater than 31.
3314 @item N
3315 An exact power of 2.
3317 @item O
3318 The integer constant zero.
3320 @item P
3321 A constant whose negation is a signed 16-bit constant.
3322 @end ifset
3324 @item eI
3325 A signed 34-bit integer constant if prefixed instructions are supported.
3327 @item eP
3328 A scalar floating point constant or a vector constant that can be
3329 loaded to a VSX register with one prefixed instruction.
3331 @item eQ
3332 An IEEE 128-bit constant that can be loaded into a VSX register with
3333 the @code{lxvkq} instruction.
3335 @ifset INTERNALS
3336 @item G
3337 A floating point constant that can be loaded into a register with one
3338 instruction per word.
3340 @item H
3341 A floating point constant that can be loaded into a register using
3342 three instructions.
3343 @end ifset
3345 @item m
3346 A memory operand.
3347 Normally, @code{m} does not allow addresses that update the base register.
3348 If the @code{<} or @code{>} constraint is also used, they are allowed and
3349 therefore on PowerPC targets in that case it is only safe
3350 to use @code{m<>} in an @code{asm} statement if that @code{asm} statement
3351 accesses the operand exactly once.  The @code{asm} statement must also
3352 use @code{%U@var{<opno>}} as a placeholder for the ``update'' flag in the
3353 corresponding load or store instruction.  For example:
3355 @smallexample
3356 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
3357 @end smallexample
3359 is correct but:
3361 @smallexample
3362 asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
3363 @end smallexample
3365 is not.
3367 @ifset INTERNALS
3368 @item es
3369 A ``stable'' memory operand; that is, one which does not include any
3370 automodification of the base register.  This used to be useful when
3371 @code{m} allowed automodification of the base register, but as those
3372 are now only allowed when @code{<} or @code{>} is used, @code{es} is
3373 basically the same as @code{m} without @code{<} and @code{>}.
3374 @end ifset
3376 @item Q
3377 A memory operand addressed by just a base register.
3379 @ifset INTERNALS
3380 @item Y
3381 A memory operand for a DQ-form instruction.
3382 @end ifset
3384 @item Z
3385 A memory operand accessed with indexed or indirect addressing.
3387 @ifset INTERNALS
3388 @item R
3389 An AIX TOC entry.
3390 @end ifset
3392 @item a
3393 An indexed or indirect address.
3395 @ifset INTERNALS
3396 @item U
3397 A V.4 small data reference.
3399 @item W
3400 A vector constant that does not require memory.
3402 @item j
3403 The zero vector constant.
3404 @end ifset
3406 @end table
3408 @item PRU---@file{config/pru/constraints.md}
3409 @table @code
3410 @item I
3411 An unsigned 8-bit integer constant.
3413 @item J
3414 An unsigned 16-bit integer constant.
3416 @item L
3417 An unsigned 5-bit integer constant (for shift counts).
3419 @item T
3420 A text segment (program memory) constant label.
3422 @item Z
3423 Integer constant zero.
3425 @end table
3427 @item RL78---@file{config/rl78/constraints.md}
3428 @table @code
3430 @item Int3
3431 An integer constant in the range 1 @dots{} 7.
3432 @item Int8
3433 An integer constant in the range 0 @dots{} 255.
3434 @item J
3435 An integer constant in the range @minus{}255 @dots{} 0
3436 @item K
3437 The integer constant 1.
3438 @item L
3439 The integer constant -1.
3440 @item M
3441 The integer constant 0.
3442 @item N
3443 The integer constant 2.
3444 @item O
3445 The integer constant -2.
3446 @item P
3447 An integer constant in the range 1 @dots{} 15.
3448 @item Qbi
3449 The built-in compare types--eq, ne, gtu, ltu, geu, and leu.
3450 @item Qsc
3451 The synthetic compare types--gt, lt, ge, and le.
3452 @item Wab
3453 A memory reference with an absolute address.
3454 @item Wbc
3455 A memory reference using @code{BC} as a base register, with an optional offset.
3456 @item Wca
3457 A memory reference using @code{AX}, @code{BC}, @code{DE}, or @code{HL} for the address, for calls.
3458 @item Wcv
3459 A memory reference using any 16-bit register pair for the address, for calls.
3460 @item Wd2
3461 A memory reference using @code{DE} as a base register, with an optional offset.
3462 @item Wde
3463 A memory reference using @code{DE} as a base register, without any offset.
3464 @item Wfr
3465 Any memory reference to an address in the far address space.
3466 @item Wh1
3467 A memory reference using @code{HL} as a base register, with an optional one-byte offset.
3468 @item Whb
3469 A memory reference using @code{HL} as a base register, with @code{B} or @code{C} as the index register.
3470 @item Whl
3471 A memory reference using @code{HL} as a base register, without any offset.
3472 @item Ws1
3473 A memory reference using @code{SP} as a base register, with an optional one-byte offset.
3474 @item Y
3475 Any memory reference to an address in the near address space.
3476 @item A
3477 The @code{AX} register.
3478 @item B
3479 The @code{BC} register.
3480 @item D
3481 The @code{DE} register.
3482 @item R
3483 @code{A} through @code{L} registers.
3484 @item S
3485 The @code{SP} register.
3486 @item T
3487 The @code{HL} register.
3488 @item Z08W
3489 The 16-bit @code{R8} register.
3490 @item Z10W
3491 The 16-bit @code{R10} register.
3492 @item Zint
3493 The registers reserved for interrupts (@code{R24} to @code{R31}).
3494 @item a
3495 The @code{A} register.
3496 @item b
3497 The @code{B} register.
3498 @item c
3499 The @code{C} register.
3500 @item d
3501 The @code{D} register.
3502 @item e
3503 The @code{E} register.
3504 @item h
3505 The @code{H} register.
3506 @item l
3507 The @code{L} register.
3508 @item v
3509 The virtual registers.
3510 @item w
3511 The @code{PSW} register.
3512 @item x
3513 The @code{X} register.
3515 @end table
3517 @item RISC-V---@file{config/riscv/constraints.md}
3518 @table @code
3520 @item f
3521 A floating-point register (if available).
3523 @item I
3524 An I-type 12-bit signed immediate.
3526 @item J
3527 Integer zero.
3529 @item K
3530 A 5-bit unsigned immediate for CSR access instructions.
3532 @item A
3533 An address that is held in a general-purpose register.
3535 @item S
3536 A constraint that matches an absolute symbolic address.
3538 @end table
3540 @item RX---@file{config/rx/constraints.md}
3541 @table @code
3542 @item Q
3543 An address which does not involve register indirect addressing or
3544 pre/post increment/decrement addressing.
3546 @item Symbol
3547 A symbol reference.
3549 @item Int08
3550 A constant in the range @minus{}256 to 255, inclusive.
3552 @item Sint08
3553 A constant in the range @minus{}128 to 127, inclusive.
3555 @item Sint16
3556 A constant in the range @minus{}32768 to 32767, inclusive.
3558 @item Sint24
3559 A constant in the range @minus{}8388608 to 8388607, inclusive.
3561 @item Uint04
3562 A constant in the range 0 to 15, inclusive.
3564 @end table
3566 @item S/390 and zSeries---@file{config/s390/s390.h}
3567 @table @code
3568 @item a
3569 Address register (general purpose register except r0)
3571 @item c
3572 Condition code register
3574 @item d
3575 Data register (arbitrary general purpose register)
3577 @item f
3578 Floating-point register
3580 @item I
3581 Unsigned 8-bit constant (0--255)
3583 @item J
3584 Unsigned 12-bit constant (0--4095)
3586 @item K
3587 Signed 16-bit constant (@minus{}32768--32767)
3589 @item L
3590 Value appropriate as displacement.
3591 @table @code
3592 @item (0..4095)
3593 for short displacement
3594 @item (@minus{}524288..524287)
3595 for long displacement
3596 @end table
3598 @item M
3599 Constant integer with a value of 0x7fffffff.
3601 @item N
3602 Multiple letter constraint followed by 4 parameter letters.
3603 @table @code
3604 @item 0..9:
3605 number of the part counting from most to least significant
3606 @item H,Q:
3607 mode of the part
3608 @item D,S,H:
3609 mode of the containing operand
3610 @item 0,F:
3611 value of the other parts (F---all bits set)
3612 @end table
3613 The constraint matches if the specified part of a constant
3614 has a value different from its other parts.
3616 @item Q
3617 Memory reference without index register and with short displacement.
3619 @item R
3620 Memory reference with index register and short displacement.
3622 @item S
3623 Memory reference without index register but with long displacement.
3625 @item T
3626 Memory reference with index register and long displacement.
3628 @item U
3629 Pointer with short displacement.
3631 @item W
3632 Pointer with long displacement.
3634 @item Y
3635 Shift count operand.
3637 @end table
3639 @need 1000
3640 @item SPARC---@file{config/sparc/sparc.h}
3641 @table @code
3642 @item f
3643 Floating-point register on the SPARC-V8 architecture and
3644 lower floating-point register on the SPARC-V9 architecture.
3646 @item e
3647 Floating-point register.  It is equivalent to @samp{f} on the
3648 SPARC-V8 architecture and contains both lower and upper
3649 floating-point registers on the SPARC-V9 architecture.
3651 @item c
3652 Floating-point condition code register.
3654 @item d
3655 Lower floating-point register.  It is only valid on the SPARC-V9
3656 architecture when the Visual Instruction Set is available.
3658 @item b
3659 Floating-point register.  It is only valid on the SPARC-V9 architecture
3660 when the Visual Instruction Set is available.
3662 @item h
3663 64-bit global or out register for the SPARC-V8+ architecture.
3665 @item C
3666 The constant all-ones, for floating-point.
3668 @item A
3669 Signed 5-bit constant
3671 @item D
3672 A vector constant
3674 @item I
3675 Signed 13-bit constant
3677 @item J
3678 Zero
3680 @item K
3681 32-bit constant with the low 12 bits clear (a constant that can be
3682 loaded with the @code{sethi} instruction)
3684 @item L
3685 A constant in the range supported by @code{movcc} instructions (11-bit
3686 signed immediate)
3688 @item M
3689 A constant in the range supported by @code{movrcc} instructions (10-bit
3690 signed immediate)
3692 @item N
3693 Same as @samp{K}, except that it verifies that bits that are not in the
3694 lower 32-bit range are all zero.  Must be used instead of @samp{K} for
3695 modes wider than @code{SImode}
3697 @item O
3698 The constant 4096
3700 @item G
3701 Floating-point zero
3703 @item H
3704 Signed 13-bit constant, sign-extended to 32 or 64 bits
3706 @item P
3707 The constant -1
3709 @item Q
3710 Floating-point constant whose integral representation can
3711 be moved into an integer register using a single sethi
3712 instruction
3714 @item R
3715 Floating-point constant whose integral representation can
3716 be moved into an integer register using a single mov
3717 instruction
3719 @item S
3720 Floating-point constant whose integral representation can
3721 be moved into an integer register using a high/lo_sum
3722 instruction sequence
3724 @item T
3725 Memory address aligned to an 8-byte boundary
3727 @item U
3728 Even register
3730 @item W
3731 Memory address for @samp{e} constraint registers
3733 @item w
3734 Memory address with only a base register
3736 @item Y
3737 Vector zero
3739 @end table
3741 @item TI C6X family---@file{config/c6x/constraints.md}
3742 @table @code
3743 @item a
3744 Register file A (A0--A31).
3746 @item b
3747 Register file B (B0--B31).
3749 @item A
3750 Predicate registers in register file A (A0--A2 on C64X and
3751 higher, A1 and A2 otherwise).
3753 @item B
3754 Predicate registers in register file B (B0--B2).
3756 @item C
3757 A call-used register in register file B (B0--B9, B16--B31).
3759 @item Da
3760 Register file A, excluding predicate registers (A3--A31,
3761 plus A0 if not C64X or higher).
3763 @item Db
3764 Register file B, excluding predicate registers (B3--B31).
3766 @item Iu4
3767 Integer constant in the range 0 @dots{} 15.
3769 @item Iu5
3770 Integer constant in the range 0 @dots{} 31.
3772 @item In5
3773 Integer constant in the range @minus{}31 @dots{} 0.
3775 @item Is5
3776 Integer constant in the range @minus{}16 @dots{} 15.
3778 @item I5x
3779 Integer constant that can be the operand of an ADDA or a SUBA insn.
3781 @item IuB
3782 Integer constant in the range 0 @dots{} 65535.
3784 @item IsB
3785 Integer constant in the range @minus{}32768 @dots{} 32767.
3787 @item IsC
3788 Integer constant in the range @math{-2^{20}} @dots{} @math{2^{20} - 1}.
3790 @item Jc
3791 Integer constant that is a valid mask for the clr instruction.
3793 @item Js
3794 Integer constant that is a valid mask for the set instruction.
3796 @item Q
3797 Memory location with A base register.
3799 @item R
3800 Memory location with B base register.
3802 @ifset INTERNALS
3803 @item S0
3804 On C64x+ targets, a GP-relative small data reference.
3806 @item S1
3807 Any kind of @code{SYMBOL_REF}, for use in a call address.
3809 @item Si
3810 Any kind of immediate operand, unless it matches the S0 constraint.
3812 @item T
3813 Memory location with B base register, but not using a long offset.
3815 @item W
3816 A memory operand with an address that cannot be used in an unaligned access.
3818 @end ifset
3819 @item Z
3820 Register B14 (aka DP).
3822 @end table
3824 @item Visium---@file{config/visium/constraints.md}
3825 @table @code
3826 @item b
3827 EAM register @code{mdb}
3829 @item c
3830 EAM register @code{mdc}
3832 @item f
3833 Floating point register
3835 @ifset INTERNALS
3836 @item k
3837 Register for sibcall optimization
3838 @end ifset
3840 @item l
3841 General register, but not @code{r29}, @code{r30} and @code{r31}
3843 @item t
3844 Register @code{r1}
3846 @item u
3847 Register @code{r2}
3849 @item v
3850 Register @code{r3}
3852 @item G
3853 Floating-point constant 0.0
3855 @item J
3856 Integer constant in the range 0 .. 65535 (16-bit immediate)
3858 @item K
3859 Integer constant in the range 1 .. 31 (5-bit immediate)
3861 @item L
3862 Integer constant in the range @minus{}65535 .. @minus{}1 (16-bit negative immediate)
3864 @item M
3865 Integer constant @minus{}1
3867 @item O
3868 Integer constant 0
3870 @item P
3871 Integer constant 32
3872 @end table
3874 @item x86 family---@file{config/i386/constraints.md}
3875 @table @code
3876 @item R
3877 Legacy register---the eight integer registers available on all
3878 i386 processors (@code{a}, @code{b}, @code{c}, @code{d},
3879 @code{si}, @code{di}, @code{bp}, @code{sp}).
3881 @item q
3882 Any register accessible as @code{@var{r}l}.  In 32-bit mode, @code{a},
3883 @code{b}, @code{c}, and @code{d}; in 64-bit mode, any integer register.
3885 @item Q
3886 Any register accessible as @code{@var{r}h}: @code{a}, @code{b},
3887 @code{c}, and @code{d}.
3889 @ifset INTERNALS
3890 @item l
3891 Any register that can be used as the index in a base+index memory
3892 access: that is, any general register except the stack pointer.
3893 @end ifset
3895 @item a
3896 The @code{a} register.
3898 @item b
3899 The @code{b} register.
3901 @item c
3902 The @code{c} register.
3904 @item d
3905 The @code{d} register.
3907 @item S
3908 The @code{si} register.
3910 @item D
3911 The @code{di} register.
3913 @item A
3914 The @code{a} and @code{d} registers.  This class is used for instructions
3915 that return double word results in the @code{ax:dx} register pair.  Single
3916 word values will be allocated either in @code{ax} or @code{dx}.
3917 For example on i386 the following implements @code{rdtsc}:
3919 @smallexample
3920 unsigned long long rdtsc (void)
3922   unsigned long long tick;
3923   __asm__ __volatile__("rdtsc":"=A"(tick));
3924   return tick;
3926 @end smallexample
3928 This is not correct on x86-64 as it would allocate tick in either @code{ax}
3929 or @code{dx}.  You have to use the following variant instead:
3931 @smallexample
3932 unsigned long long rdtsc (void)
3934   unsigned int tickl, tickh;
3935   __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
3936   return ((unsigned long long)tickh << 32)|tickl;
3938 @end smallexample
3940 @item U
3941 The call-clobbered integer registers.
3943 @item f
3944 Any 80387 floating-point (stack) register.
3946 @item t
3947 Top of 80387 floating-point stack (@code{%st(0)}).
3949 @item u
3950 Second from top of 80387 floating-point stack (@code{%st(1)}).
3952 @ifset INTERNALS
3953 @item Yk
3954 Any mask register that can be used as a predicate, i.e.@: @code{k1-k7}.
3956 @item k
3957 Any mask register.
3958 @end ifset
3960 @item y
3961 Any MMX register.
3963 @item x
3964 Any SSE register.
3966 @item v
3967 Any EVEX encodable SSE register (@code{%xmm0-%xmm31}).
3969 @ifset INTERNALS
3970 @item w
3971 Any bound register.
3972 @end ifset
3974 @item Yz
3975 First SSE register (@code{%xmm0}).
3977 @ifset INTERNALS
3978 @item Yi
3979 Any SSE register, when SSE2 and inter-unit moves are enabled.
3981 @item Yj
3982 Any SSE register, when SSE2 and inter-unit moves from vector registers are enabled.
3984 @item Ym
3985 Any MMX register, when inter-unit moves are enabled.
3987 @item Yn
3988 Any MMX register, when inter-unit moves from vector registers are enabled.
3990 @item Yp
3991 Any integer register when @code{TARGET_PARTIAL_REG_STALL} is disabled.
3993 @item Ya
3994 Any integer register when zero extensions with @code{AND} are disabled.
3996 @item Yb
3997 Any register that can be used as the GOT base when calling@*
3998 @code{___tls_get_addr}: that is, any general register except @code{a}
3999 and @code{sp} registers, for @option{-fno-plt} if linker supports it.
4000 Otherwise, @code{b} register.
4002 @item Yf
4003 Any x87 register when 80387 floating-point arithmetic is enabled.
4005 @item Yr
4006 Lower SSE register when avoiding REX prefix and all SSE registers otherwise.
4008 @item Yv
4009 For AVX512VL, any EVEX-encodable SSE register (@code{%xmm0-%xmm31}),
4010 otherwise any SSE register.
4012 @item Yh
4013 Any EVEX-encodable SSE register, that has number factor of four.
4015 @item Bf
4016 Flags register operand.
4018 @item Bg
4019 GOT memory operand.
4021 @item Bm
4022 Vector memory operand.
4024 @item Bc
4025 Constant memory operand.
4027 @item Bn
4028 Memory operand without REX prefix.
4030 @item Bs
4031 Sibcall memory operand.
4033 @item Bw
4034 Call memory operand.
4036 @item Bz
4037 Constant call address operand.
4039 @item BC
4040 SSE constant -1 operand.
4041 @end ifset
4043 @item I
4044 Integer constant in the range 0 @dots{} 31, for 32-bit shifts.
4046 @item J
4047 Integer constant in the range 0 @dots{} 63, for 64-bit shifts.
4049 @item K
4050 Signed 8-bit integer constant.
4052 @item L
4053 @code{0xFF} or @code{0xFFFF}, for andsi as a zero-extending move.
4055 @item M
4056 0, 1, 2, or 3 (shifts for the @code{lea} instruction).
4058 @item N
4059 Unsigned 8-bit integer constant (for @code{in} and @code{out}
4060 instructions).
4062 @ifset INTERNALS
4063 @item O
4064 Integer constant in the range 0 @dots{} 127, for 128-bit shifts.
4065 @end ifset
4067 @item G
4068 Standard 80387 floating point constant.
4070 @item C
4071 SSE constant zero operand.
4073 @item e
4074 32-bit signed integer constant, or a symbolic reference known
4075 to fit that range (for immediate operands in sign-extending x86-64
4076 instructions).
4078 @item We
4079 32-bit signed integer constant, or a symbolic reference known
4080 to fit that range (for sign-extending conversion operations that
4081 require non-@code{VOIDmode} immediate operands).
4083 @item Wz
4084 32-bit unsigned integer constant, or a symbolic reference known
4085 to fit that range (for zero-extending conversion operations that
4086 require non-@code{VOIDmode} immediate operands).
4088 @item Wd
4089 128-bit integer constant where both the high and low 64-bit word
4090 satisfy the @code{e} constraint.
4092 @item Z
4093 32-bit unsigned integer constant, or a symbolic reference known
4094 to fit that range (for immediate operands in zero-extending x86-64
4095 instructions).
4097 @item Tv
4098 VSIB address operand.
4100 @item Ts
4101 Address operand without segment register.
4103 @end table
4105 @item Xstormy16---@file{config/stormy16/stormy16.h}
4106 @table @code
4107 @item a
4108 Register r0.
4110 @item b
4111 Register r1.
4113 @item c
4114 Register r2.
4116 @item d
4117 Register r8.
4119 @item e
4120 Registers r0 through r7.
4122 @item t
4123 Registers r0 and r1.
4125 @item y
4126 The carry register.
4128 @item z
4129 Registers r8 and r9.
4131 @item I
4132 A constant between 0 and 3 inclusive.
4134 @item J
4135 A constant that has exactly one bit set.
4137 @item K
4138 A constant that has exactly one bit clear.
4140 @item L
4141 A constant between 0 and 255 inclusive.
4143 @item M
4144 A constant between @minus{}255 and 0 inclusive.
4146 @item N
4147 A constant between @minus{}3 and 0 inclusive.
4149 @item O
4150 A constant between 1 and 4 inclusive.
4152 @item P
4153 A constant between @minus{}4 and @minus{}1 inclusive.
4155 @item Q
4156 A memory reference that is a stack push.
4158 @item R
4159 A memory reference that is a stack pop.
4161 @item S
4162 A memory reference that refers to a constant address of known value.
4164 @item T
4165 The register indicated by Rx (not implemented yet).
4167 @item U
4168 A constant that is not between 2 and 15 inclusive.
4170 @item Z
4171 The constant 0.
4173 @end table
4175 @item Xtensa---@file{config/xtensa/constraints.md}
4176 @table @code
4177 @item a
4178 General-purpose 32-bit register
4180 @item b
4181 One-bit boolean register
4183 @item A
4184 MAC16 40-bit accumulator register
4186 @item I
4187 Signed 12-bit integer constant, for use in MOVI instructions
4189 @item J
4190 Signed 8-bit integer constant, for use in ADDI instructions
4192 @item K
4193 Integer constant valid for BccI instructions
4195 @item L
4196 Unsigned constant valid for BccUI instructions
4198 @end table
4200 @end table
4202 @ifset INTERNALS
4203 @node Disable Insn Alternatives
4204 @subsection Disable insn alternatives using the @code{enabled} attribute
4205 @cindex enabled
4207 There are three insn attributes that may be used to selectively disable
4208 instruction alternatives:
4210 @table @code
4211 @item enabled
4212 Says whether an alternative is available on the current subtarget.
4214 @item preferred_for_size
4215 Says whether an enabled alternative should be used in code that is
4216 optimized for size.
4218 @item preferred_for_speed
4219 Says whether an enabled alternative should be used in code that is
4220 optimized for speed.
4221 @end table
4223 All these attributes should use @code{(const_int 1)} to allow an alternative
4224 or @code{(const_int 0)} to disallow it.  The attributes must be a static
4225 property of the subtarget; they cannot for example depend on the
4226 current operands, on the current optimization level, on the location
4227 of the insn within the body of a loop, on whether register allocation
4228 has finished, or on the current compiler pass.
4230 The @code{enabled} attribute is a correctness property.  It tells GCC to act
4231 as though the disabled alternatives were never defined in the first place.
4232 This is useful when adding new instructions to an existing pattern in
4233 cases where the new instructions are only available for certain cpu
4234 architecture levels (typically mapped to the @code{-march=} command-line
4235 option).
4237 In contrast, the @code{preferred_for_size} and @code{preferred_for_speed}
4238 attributes are strong optimization hints rather than correctness properties.
4239 @code{preferred_for_size} tells GCC which alternatives to consider when
4240 adding or modifying an instruction that GCC wants to optimize for size.
4241 @code{preferred_for_speed} does the same thing for speed.  Note that things
4242 like code motion can lead to cases where code optimized for size uses
4243 alternatives that are not preferred for size, and similarly for speed.
4245 Although @code{define_insn}s can in principle specify the @code{enabled}
4246 attribute directly, it is often clearer to have subsiduary attributes
4247 for each architectural feature of interest.  The @code{define_insn}s
4248 can then use these subsiduary attributes to say which alternatives
4249 require which features.  The example below does this for @code{cpu_facility}.
4251 E.g. the following two patterns could easily be merged using the @code{enabled}
4252 attribute:
4254 @smallexample
4256 (define_insn "*movdi_old"
4257   [(set (match_operand:DI 0 "register_operand" "=d")
4258         (match_operand:DI 1 "register_operand" " d"))]
4259   "!TARGET_NEW"
4260   "lgr %0,%1")
4262 (define_insn "*movdi_new"
4263   [(set (match_operand:DI 0 "register_operand" "=d,f,d")
4264         (match_operand:DI 1 "register_operand" " d,d,f"))]
4265   "TARGET_NEW"
4266   "@@
4267    lgr  %0,%1
4268    ldgr %0,%1
4269    lgdr %0,%1")
4271 @end smallexample
4275 @smallexample
4277 (define_insn "*movdi_combined"
4278   [(set (match_operand:DI 0 "register_operand" "=d,f,d")
4279         (match_operand:DI 1 "register_operand" " d,d,f"))]
4280   ""
4281   "@@
4282    lgr  %0,%1
4283    ldgr %0,%1
4284    lgdr %0,%1"
4285   [(set_attr "cpu_facility" "*,new,new")])
4287 @end smallexample
4289 with the @code{enabled} attribute defined like this:
4291 @smallexample
4293 (define_attr "cpu_facility" "standard,new" (const_string "standard"))
4295 (define_attr "enabled" ""
4296   (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
4297          (and (eq_attr "cpu_facility" "new")
4298               (ne (symbol_ref "TARGET_NEW") (const_int 0)))
4299          (const_int 1)]
4300         (const_int 0)))
4302 @end smallexample
4304 @end ifset
4306 @ifset INTERNALS
4307 @node Define Constraints
4308 @subsection Defining Machine-Specific Constraints
4309 @cindex defining constraints
4310 @cindex constraints, defining
4312 Machine-specific constraints fall into two categories: register and
4313 non-register constraints.  Within the latter category, constraints
4314 which allow subsets of all possible memory or address operands should
4315 be specially marked, to give @code{reload} more information.
4317 Machine-specific constraints can be given names of arbitrary length,
4318 but they must be entirely composed of letters, digits, underscores
4319 (@samp{_}), and angle brackets (@samp{< >}).  Like C identifiers, they
4320 must begin with a letter or underscore.
4322 In order to avoid ambiguity in operand constraint strings, no
4323 constraint can have a name that begins with any other constraint's
4324 name.  For example, if @code{x} is defined as a constraint name,
4325 @code{xy} may not be, and vice versa.  As a consequence of this rule,
4326 no constraint may begin with one of the generic constraint letters:
4327 @samp{E F V X g i m n o p r s}.
4329 Register constraints correspond directly to register classes.
4330 @xref{Register Classes}.  There is thus not much flexibility in their
4331 definitions.
4333 @deffn {MD Expression} define_register_constraint name regclass docstring
4334 All three arguments are string constants.
4335 @var{name} is the name of the constraint, as it will appear in
4336 @code{match_operand} expressions.  If @var{name} is a multi-letter
4337 constraint its length shall be the same for all constraints starting
4338 with the same letter.  @var{regclass} can be either the
4339 name of the corresponding register class (@pxref{Register Classes}),
4340 or a C expression which evaluates to the appropriate register class.
4341 If it is an expression, it must have no side effects, and it cannot
4342 look at the operand.  The usual use of expressions is to map some
4343 register constraints to @code{NO_REGS} when the register class
4344 is not available on a given subarchitecture.
4346 @var{docstring} is a sentence documenting the meaning of the
4347 constraint.  Docstrings are explained further below.
4348 @end deffn
4350 Non-register constraints are more like predicates: the constraint
4351 definition gives a boolean expression which indicates whether the
4352 constraint matches.
4354 @deffn {MD Expression} define_constraint name docstring exp
4355 The @var{name} and @var{docstring} arguments are the same as for
4356 @code{define_register_constraint}, but note that the docstring comes
4357 immediately after the name for these expressions.  @var{exp} is an RTL
4358 expression, obeying the same rules as the RTL expressions in predicate
4359 definitions.  @xref{Defining Predicates}, for details.  If it
4360 evaluates true, the constraint matches; if it evaluates false, it
4361 doesn't. Constraint expressions should indicate which RTL codes they
4362 might match, just like predicate expressions.
4364 @code{match_test} C expressions have access to the
4365 following variables:
4367 @table @var
4368 @item op
4369 The RTL object defining the operand.
4370 @item mode
4371 The machine mode of @var{op}.
4372 @item ival
4373 @samp{INTVAL (@var{op})}, if @var{op} is a @code{const_int}.
4374 @item hval
4375 @samp{CONST_DOUBLE_HIGH (@var{op})}, if @var{op} is an integer
4376 @code{const_double}.
4377 @item lval
4378 @samp{CONST_DOUBLE_LOW (@var{op})}, if @var{op} is an integer
4379 @code{const_double}.
4380 @item rval
4381 @samp{CONST_DOUBLE_REAL_VALUE (@var{op})}, if @var{op} is a floating-point
4382 @code{const_double}.
4383 @end table
4385 The @var{*val} variables should only be used once another piece of the
4386 expression has verified that @var{op} is the appropriate kind of RTL
4387 object.
4388 @end deffn
4390 Most non-register constraints should be defined with
4391 @code{define_constraint}.  The remaining two definition expressions
4392 are only appropriate for constraints that should be handled specially
4393 by @code{reload} if they fail to match.
4395 @deffn {MD Expression} define_memory_constraint name docstring exp
4396 Use this expression for constraints that match a subset of all memory
4397 operands: that is, @code{reload} can make them match by converting the
4398 operand to the form @samp{@w{(mem (reg @var{X}))}}, where @var{X} is a
4399 base register (from the register class specified by
4400 @code{BASE_REG_CLASS}, @pxref{Register Classes}).
4402 For example, on the S/390, some instructions do not accept arbitrary
4403 memory references, but only those that do not make use of an index
4404 register.  The constraint letter @samp{Q} is defined to represent a
4405 memory address of this type.  If @samp{Q} is defined with
4406 @code{define_memory_constraint}, a @samp{Q} constraint can handle any
4407 memory operand, because @code{reload} knows it can simply copy the
4408 memory address into a base register if required.  This is analogous to
4409 the way an @samp{o} constraint can handle any memory operand.
4411 The syntax and semantics are otherwise identical to
4412 @code{define_constraint}.
4413 @end deffn
4415 @deffn {MD Expression} define_special_memory_constraint name docstring exp
4416 Use this expression for constraints that match a subset of all memory
4417 operands: that is, @code{reload} cannot make them match by reloading
4418 the address as it is described for @code{define_memory_constraint} or
4419 such address reload is undesirable with the performance point of view.
4421 For example, @code{define_special_memory_constraint} can be useful if
4422 specifically aligned memory is necessary or desirable for some insn
4423 operand.
4425 The syntax and semantics are otherwise identical to
4426 @code{define_memory_constraint}.
4427 @end deffn
4429 @deffn {MD Expression} define_relaxed_memory_constraint name docstring exp
4430 The test expression in a @code{define_memory_constraint} can assume
4431 that @code{TARGET_LEGITIMATE_ADDRESS_P} holds for the address inside
4432 a @code{mem} rtx and so it does not need to test this condition itself.
4433 In other words, a @code{define_memory_constraint} test of the form:
4435 @smallexample
4436 (match_test "mem")
4437 @end smallexample
4439 is enough to test whether an rtx is a @code{mem} @emph{and} whether
4440 its address satisfies @code{TARGET_MEM_CONSTRAINT} (which is usually
4441 @samp{'m'}).  Thus the conditions imposed by a @code{define_memory_constraint}
4442 always apply on top of the conditions imposed by @code{TARGET_MEM_CONSTRAINT}.
4444 However, it is sometimes useful to define memory constraints that allow
4445 addresses beyond those accepted by @code{TARGET_LEGITIMATE_ADDRESS_P}.
4446 @code{define_relaxed_memory_constraint} exists for this case.
4447 The test expression in a @code{define_relaxed_memory_constraint} is
4448 applied with no preconditions, so that the expression can determine
4449 ``from scratch'' exactly which addresses are valid and which are not.
4451 The syntax and semantics are otherwise identical to
4452 @code{define_memory_constraint}.
4453 @end deffn
4455 @deffn {MD Expression} define_address_constraint name docstring exp
4456 Use this expression for constraints that match a subset of all address
4457 operands: that is, @code{reload} can make the constraint match by
4458 converting the operand to the form @samp{@w{(reg @var{X})}}, again
4459 with @var{X} a base register.
4461 Constraints defined with @code{define_address_constraint} can only be
4462 used with the @code{address_operand} predicate, or machine-specific
4463 predicates that work the same way.  They are treated analogously to
4464 the generic @samp{p} constraint.
4466 The syntax and semantics are otherwise identical to
4467 @code{define_constraint}.
4468 @end deffn
4470 For historical reasons, names beginning with the letters @samp{G H}
4471 are reserved for constraints that match only @code{const_double}s, and
4472 names beginning with the letters @samp{I J K L M N O P} are reserved
4473 for constraints that match only @code{const_int}s.  This may change in
4474 the future.  For the time being, constraints with these names must be
4475 written in a stylized form, so that @code{genpreds} can tell you did
4476 it correctly:
4478 @smallexample
4479 @group
4480 (define_constraint "[@var{GHIJKLMNOP}]@dots{}"
4481   "@var{doc}@dots{}"
4482   (and (match_code "const_int")  ; @r{@code{const_double} for G/H}
4483        @var{condition}@dots{}))            ; @r{usually a @code{match_test}}
4484 @end group
4485 @end smallexample
4486 @c the semicolons line up in the formatted manual
4488 It is fine to use names beginning with other letters for constraints
4489 that match @code{const_double}s or @code{const_int}s.
4491 Each docstring in a constraint definition should be one or more complete
4492 sentences, marked up in Texinfo format.  @emph{They are currently unused.}
4493 In the future they will be copied into the GCC manual, in @ref{Machine
4494 Constraints}, replacing the hand-maintained tables currently found in
4495 that section.  Also, in the future the compiler may use this to give
4496 more helpful diagnostics when poor choice of @code{asm} constraints
4497 causes a reload failure.
4499 If you put the pseudo-Texinfo directive @samp{@@internal} at the
4500 beginning of a docstring, then (in the future) it will appear only in
4501 the internals manual's version of the machine-specific constraint tables.
4502 Use this for constraints that should not appear in @code{asm} statements.
4504 @node C Constraint Interface
4505 @subsection Testing constraints from C
4506 @cindex testing constraints
4507 @cindex constraints, testing
4509 It is occasionally useful to test a constraint from C code rather than
4510 implicitly via the constraint string in a @code{match_operand}.  The
4511 generated file @file{tm_p.h} declares a few interfaces for working
4512 with constraints.  At present these are defined for all constraints
4513 except @code{g} (which is equivalent to @code{general_operand}).
4515 Some valid constraint names are not valid C identifiers, so there is a
4516 mangling scheme for referring to them from C@.  Constraint names that
4517 do not contain angle brackets or underscores are left unchanged.
4518 Underscores are doubled, each @samp{<} is replaced with @samp{_l}, and
4519 each @samp{>} with @samp{_g}.  Here are some examples:
4521 @c the @c's prevent double blank lines in the printed manual.
4522 @example
4523 @multitable {Original} {Mangled}
4524 @item @strong{Original} @tab @strong{Mangled}  @c
4525 @item @code{x}     @tab @code{x}       @c
4526 @item @code{P42x}  @tab @code{P42x}    @c
4527 @item @code{P4_x}  @tab @code{P4__x}   @c
4528 @item @code{P4>x}  @tab @code{P4_gx}   @c
4529 @item @code{P4>>}  @tab @code{P4_g_g}  @c
4530 @item @code{P4_g>} @tab @code{P4__g_g} @c
4531 @end multitable
4532 @end example
4534 Throughout this section, the variable @var{c} is either a constraint
4535 in the abstract sense, or a constant from @code{enum constraint_num};
4536 the variable @var{m} is a mangled constraint name (usually as part of
4537 a larger identifier).
4539 @deftp Enum constraint_num
4540 For each constraint except @code{g}, there is a corresponding
4541 enumeration constant: @samp{CONSTRAINT_} plus the mangled name of the
4542 constraint.  Functions that take an @code{enum constraint_num} as an
4543 argument expect one of these constants.
4544 @end deftp
4546 @deftypefun {inline bool} satisfies_constraint_@var{m} (rtx @var{exp})
4547 For each non-register constraint @var{m} except @code{g}, there is
4548 one of these functions; it returns @code{true} if @var{exp} satisfies the
4549 constraint.  These functions are only visible if @file{rtl.h} was included
4550 before @file{tm_p.h}.
4551 @end deftypefun
4553 @deftypefun bool constraint_satisfied_p (rtx @var{exp}, enum constraint_num @var{c})
4554 Like the @code{satisfies_constraint_@var{m}} functions, but the
4555 constraint to test is given as an argument, @var{c}.  If @var{c}
4556 specifies a register constraint, this function will always return
4557 @code{false}.
4558 @end deftypefun
4560 @deftypefun {enum reg_class} reg_class_for_constraint (enum constraint_num @var{c})
4561 Returns the register class associated with @var{c}.  If @var{c} is not
4562 a register constraint, or those registers are not available for the
4563 currently selected subtarget, returns @code{NO_REGS}.
4564 @end deftypefun
4566 Here is an example use of @code{satisfies_constraint_@var{m}}.  In
4567 peephole optimizations (@pxref{Peephole Definitions}), operand
4568 constraint strings are ignored, so if there are relevant constraints,
4569 they must be tested in the C condition.  In the example, the
4570 optimization is applied if operand 2 does @emph{not} satisfy the
4571 @samp{K} constraint.  (This is a simplified version of a peephole
4572 definition from the i386 machine description.)
4574 @smallexample
4575 (define_peephole2
4576   [(match_scratch:SI 3 "r")
4577    (set (match_operand:SI 0 "register_operand" "")
4578         (mult:SI (match_operand:SI 1 "memory_operand" "")
4579                  (match_operand:SI 2 "immediate_operand" "")))]
4581   "!satisfies_constraint_K (operands[2])"
4583   [(set (match_dup 3) (match_dup 1))
4584    (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
4586   "")
4587 @end smallexample
4589 @node Standard Names
4590 @section Standard Pattern Names For Generation
4591 @cindex standard pattern names
4592 @cindex pattern names
4593 @cindex names, pattern
4595 Here is a table of the instruction names that are meaningful in the RTL
4596 generation pass of the compiler.  Giving one of these names to an
4597 instruction pattern tells the RTL generation pass that it can use the
4598 pattern to accomplish a certain task.
4600 @table @asis
4601 @cindex @code{mov@var{m}} instruction pattern
4602 @item @samp{mov@var{m}}
4603 Here @var{m} stands for a two-letter machine mode name, in lowercase.
4604 This instruction pattern moves data with that machine mode from operand
4605 1 to operand 0.  For example, @samp{movsi} moves full-word data.
4607 If operand 0 is a @code{subreg} with mode @var{m} of a register whose
4608 own mode is wider than @var{m}, the effect of this instruction is
4609 to store the specified value in the part of the register that corresponds
4610 to mode @var{m}.  Bits outside of @var{m}, but which are within the
4611 same target word as the @code{subreg} are undefined.  Bits which are
4612 outside the target word are left unchanged.
4614 This class of patterns is special in several ways.  First of all, each
4615 of these names up to and including full word size @emph{must} be defined,
4616 because there is no other way to copy a datum from one place to another.
4617 If there are patterns accepting operands in larger modes,
4618 @samp{mov@var{m}} must be defined for integer modes of those sizes.
4620 Second, these patterns are not used solely in the RTL generation pass.
4621 Even the reload pass can generate move insns to copy values from stack
4622 slots into temporary registers.  When it does so, one of the operands is
4623 a hard register and the other is an operand that can need to be reloaded
4624 into a register.
4626 @findex force_reg
4627 Therefore, when given such a pair of operands, the pattern must generate
4628 RTL which needs no reloading and needs no temporary registers---no
4629 registers other than the operands.  For example, if you support the
4630 pattern with a @code{define_expand}, then in such a case the
4631 @code{define_expand} mustn't call @code{force_reg} or any other such
4632 function which might generate new pseudo registers.
4634 This requirement exists even for subword modes on a RISC machine where
4635 fetching those modes from memory normally requires several insns and
4636 some temporary registers.
4638 @findex change_address
4639 During reload a memory reference with an invalid address may be passed
4640 as an operand.  Such an address will be replaced with a valid address
4641 later in the reload pass.  In this case, nothing may be done with the
4642 address except to use it as it stands.  If it is copied, it will not be
4643 replaced with a valid address.  No attempt should be made to make such
4644 an address into a valid address and no routine (such as
4645 @code{change_address}) that will do so may be called.  Note that
4646 @code{general_operand} will fail when applied to such an address.
4648 @findex reload_in_progress
4649 The global variable @code{reload_in_progress} (which must be explicitly
4650 declared if required) can be used to determine whether such special
4651 handling is required.
4653 The variety of operands that have reloads depends on the rest of the
4654 machine description, but typically on a RISC machine these can only be
4655 pseudo registers that did not get hard registers, while on other
4656 machines explicit memory references will get optional reloads.
4658 If a scratch register is required to move an object to or from memory,
4659 it can be allocated using @code{gen_reg_rtx} prior to life analysis.
4661 If there are cases which need scratch registers during or after reload,
4662 you must provide an appropriate secondary_reload target hook.
4664 @findex can_create_pseudo_p
4665 The macro @code{can_create_pseudo_p} can be used to determine if it
4666 is unsafe to create new pseudo registers.  If this variable is nonzero, then
4667 it is unsafe to call @code{gen_reg_rtx} to allocate a new pseudo.
4669 The constraints on a @samp{mov@var{m}} must permit moving any hard
4670 register to any other hard register provided that
4671 @code{TARGET_HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and
4672 @code{TARGET_REGISTER_MOVE_COST} applied to their classes returns a value
4673 of 2.
4675 It is obligatory to support floating point @samp{mov@var{m}}
4676 instructions into and out of any registers that can hold fixed point
4677 values, because unions and structures (which have modes @code{SImode} or
4678 @code{DImode}) can be in those registers and they may have floating
4679 point members.
4681 There may also be a need to support fixed point @samp{mov@var{m}}
4682 instructions in and out of floating point registers.  Unfortunately, I
4683 have forgotten why this was so, and I don't know whether it is still
4684 true.  If @code{TARGET_HARD_REGNO_MODE_OK} rejects fixed point values in
4685 floating point registers, then the constraints of the fixed point
4686 @samp{mov@var{m}} instructions must be designed to avoid ever trying to
4687 reload into a floating point register.
4689 @cindex @code{reload_in} instruction pattern
4690 @cindex @code{reload_out} instruction pattern
4691 @item @samp{reload_in@var{m}}
4692 @itemx @samp{reload_out@var{m}}
4693 These named patterns have been obsoleted by the target hook
4694 @code{secondary_reload}.
4696 Like @samp{mov@var{m}}, but used when a scratch register is required to
4697 move between operand 0 and operand 1.  Operand 2 describes the scratch
4698 register.  See the discussion of the @code{SECONDARY_RELOAD_CLASS}
4699 macro in @pxref{Register Classes}.
4701 There are special restrictions on the form of the @code{match_operand}s
4702 used in these patterns.  First, only the predicate for the reload
4703 operand is examined, i.e., @code{reload_in} examines operand 1, but not
4704 the predicates for operand 0 or 2.  Second, there may be only one
4705 alternative in the constraints.  Third, only a single register class
4706 letter may be used for the constraint; subsequent constraint letters
4707 are ignored.  As a special exception, an empty constraint string
4708 matches the @code{ALL_REGS} register class.  This may relieve ports
4709 of the burden of defining an @code{ALL_REGS} constraint letter just
4710 for these patterns.
4712 @cindex @code{movstrict@var{m}} instruction pattern
4713 @item @samp{movstrict@var{m}}
4714 Like @samp{mov@var{m}} except that if operand 0 is a @code{subreg}
4715 with mode @var{m} of a register whose natural mode is wider,
4716 the @samp{movstrict@var{m}} instruction is guaranteed not to alter
4717 any of the register except the part which belongs to mode @var{m}.
4719 @cindex @code{movmisalign@var{m}} instruction pattern
4720 @item @samp{movmisalign@var{m}}
4721 This variant of a move pattern is designed to load or store a value
4722 from a memory address that is not naturally aligned for its mode.
4723 For a store, the memory will be in operand 0; for a load, the memory
4724 will be in operand 1.  The other operand is guaranteed not to be a
4725 memory, so that it's easy to tell whether this is a load or store.
4727 This pattern is used by the autovectorizer, and when expanding a
4728 @code{MISALIGNED_INDIRECT_REF} expression.
4730 @cindex @code{load_multiple} instruction pattern
4731 @item @samp{load_multiple}
4732 Load several consecutive memory locations into consecutive registers.
4733 Operand 0 is the first of the consecutive registers, operand 1
4734 is the first memory location, and operand 2 is a constant: the
4735 number of consecutive registers.
4737 Define this only if the target machine really has such an instruction;
4738 do not define this if the most efficient way of loading consecutive
4739 registers from memory is to do them one at a time.
4741 On some machines, there are restrictions as to which consecutive
4742 registers can be stored into memory, such as particular starting or
4743 ending register numbers or only a range of valid counts.  For those
4744 machines, use a @code{define_expand} (@pxref{Expander Definitions})
4745 and make the pattern fail if the restrictions are not met.
4747 Write the generated insn as a @code{parallel} with elements being a
4748 @code{set} of one register from the appropriate memory location (you may
4749 also need @code{use} or @code{clobber} elements).  Use a
4750 @code{match_parallel} (@pxref{RTL Template}) to recognize the insn.  See
4751 @file{rs6000.md} for examples of the use of this insn pattern.
4753 @cindex @samp{store_multiple} instruction pattern
4754 @item @samp{store_multiple}
4755 Similar to @samp{load_multiple}, but store several consecutive registers
4756 into consecutive memory locations.  Operand 0 is the first of the
4757 consecutive memory locations, operand 1 is the first register, and
4758 operand 2 is a constant: the number of consecutive registers.
4760 @cindex @code{vec_load_lanes@var{m}@var{n}} instruction pattern
4761 @item @samp{vec_load_lanes@var{m}@var{n}}
4762 Perform an interleaved load of several vectors from memory operand 1
4763 into register operand 0.  Both operands have mode @var{m}.  The register
4764 operand is viewed as holding consecutive vectors of mode @var{n},
4765 while the memory operand is a flat array that contains the same number
4766 of elements.  The operation is equivalent to:
4768 @smallexample
4769 int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
4770 for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
4771   for (i = 0; i < c; i++)
4772     operand0[i][j] = operand1[j * c + i];
4773 @end smallexample
4775 For example, @samp{vec_load_lanestiv4hi} loads 8 16-bit values
4776 from memory into a register of mode @samp{TI}@.  The register
4777 contains two consecutive vectors of mode @samp{V4HI}@.
4779 This pattern can only be used if:
4780 @smallexample
4781 TARGET_ARRAY_MODE_SUPPORTED_P (@var{n}, @var{c})
4782 @end smallexample
4783 is true.  GCC assumes that, if a target supports this kind of
4784 instruction for some mode @var{n}, it also supports unaligned
4785 loads for vectors of mode @var{n}.
4787 This pattern is not allowed to @code{FAIL}.
4789 @cindex @code{vec_mask_load_lanes@var{m}@var{n}} instruction pattern
4790 @item @samp{vec_mask_load_lanes@var{m}@var{n}}
4791 Like @samp{vec_load_lanes@var{m}@var{n}}, but takes an additional
4792 mask operand (operand 2) that specifies which elements of the destination
4793 vectors should be loaded.  Other elements of the destination
4794 vectors are set to zero.  The operation is equivalent to:
4796 @smallexample
4797 int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
4798 for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
4799   if (operand2[j])
4800     for (i = 0; i < c; i++)
4801       operand0[i][j] = operand1[j * c + i];
4802   else
4803     for (i = 0; i < c; i++)
4804       operand0[i][j] = 0;
4805 @end smallexample
4807 This pattern is not allowed to @code{FAIL}.
4809 @cindex @code{vec_store_lanes@var{m}@var{n}} instruction pattern
4810 @item @samp{vec_store_lanes@var{m}@var{n}}
4811 Equivalent to @samp{vec_load_lanes@var{m}@var{n}}, with the memory
4812 and register operands reversed.  That is, the instruction is
4813 equivalent to:
4815 @smallexample
4816 int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
4817 for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
4818   for (i = 0; i < c; i++)
4819     operand0[j * c + i] = operand1[i][j];
4820 @end smallexample
4822 for a memory operand 0 and register operand 1.
4824 This pattern is not allowed to @code{FAIL}.
4826 @cindex @code{vec_mask_store_lanes@var{m}@var{n}} instruction pattern
4827 @item @samp{vec_mask_store_lanes@var{m}@var{n}}
4828 Like @samp{vec_store_lanes@var{m}@var{n}}, but takes an additional
4829 mask operand (operand 2) that specifies which elements of the source
4830 vectors should be stored.  The operation is equivalent to:
4832 @smallexample
4833 int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
4834 for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
4835   if (operand2[j])
4836     for (i = 0; i < c; i++)
4837       operand0[j * c + i] = operand1[i][j];
4838 @end smallexample
4840 This pattern is not allowed to @code{FAIL}.
4842 @cindex @code{gather_load@var{m}@var{n}} instruction pattern
4843 @item @samp{gather_load@var{m}@var{n}}
4844 Load several separate memory locations into a vector of mode @var{m}.
4845 Operand 1 is a scalar base address and operand 2 is a vector of mode @var{n}
4846 containing offsets from that base.  Operand 0 is a destination vector with
4847 the same number of elements as @var{n}.  For each element index @var{i}:
4849 @itemize @bullet
4850 @item
4851 extend the offset element @var{i} to address width, using zero
4852 extension if operand 3 is 1 and sign extension if operand 3 is zero;
4853 @item
4854 multiply the extended offset by operand 4;
4855 @item
4856 add the result to the base; and
4857 @item
4858 load the value at that address into element @var{i} of operand 0.
4859 @end itemize
4861 The value of operand 3 does not matter if the offsets are already
4862 address width.
4864 @cindex @code{mask_gather_load@var{m}@var{n}} instruction pattern
4865 @item @samp{mask_gather_load@var{m}@var{n}}
4866 Like @samp{gather_load@var{m}@var{n}}, but takes an extra mask operand as
4867 operand 5.  Bit @var{i} of the mask is set if element @var{i}
4868 of the result should be loaded from memory and clear if element @var{i}
4869 of the result should be set to zero.
4871 @cindex @code{scatter_store@var{m}@var{n}} instruction pattern
4872 @item @samp{scatter_store@var{m}@var{n}}
4873 Store a vector of mode @var{m} into several distinct memory locations.
4874 Operand 0 is a scalar base address and operand 1 is a vector of mode
4875 @var{n} containing offsets from that base.  Operand 4 is the vector of
4876 values that should be stored, which has the same number of elements as
4877 @var{n}.  For each element index @var{i}:
4879 @itemize @bullet
4880 @item
4881 extend the offset element @var{i} to address width, using zero
4882 extension if operand 2 is 1 and sign extension if operand 2 is zero;
4883 @item
4884 multiply the extended offset by operand 3;
4885 @item
4886 add the result to the base; and
4887 @item
4888 store element @var{i} of operand 4 to that address.
4889 @end itemize
4891 The value of operand 2 does not matter if the offsets are already
4892 address width.
4894 @cindex @code{mask_scatter_store@var{m}@var{n}} instruction pattern
4895 @item @samp{mask_scatter_store@var{m}@var{n}}
4896 Like @samp{scatter_store@var{m}@var{n}}, but takes an extra mask operand as
4897 operand 5.  Bit @var{i} of the mask is set if element @var{i}
4898 of the result should be stored to memory.
4900 @cindex @code{vec_set@var{m}} instruction pattern
4901 @item @samp{vec_set@var{m}}
4902 Set given field in the vector value.  Operand 0 is the vector to modify,
4903 operand 1 is new value of field and operand 2 specify the field index.
4905 @cindex @code{vec_extract@var{m}@var{n}} instruction pattern
4906 @item @samp{vec_extract@var{m}@var{n}}
4907 Extract given field from the vector value.  Operand 1 is the vector, operand 2
4908 specify field index and operand 0 place to store value into.  The
4909 @var{n} mode is the mode of the field or vector of fields that should be
4910 extracted, should be either element mode of the vector mode @var{m}, or
4911 a vector mode with the same element mode and smaller number of elements.
4912 If @var{n} is a vector mode, the index is counted in units of that mode.
4914 @cindex @code{vec_init@var{m}@var{n}} instruction pattern
4915 @item @samp{vec_init@var{m}@var{n}}
4916 Initialize the vector to given values.  Operand 0 is the vector to initialize
4917 and operand 1 is parallel containing values for individual fields.  The
4918 @var{n} mode is the mode of the elements, should be either element mode of
4919 the vector mode @var{m}, or a vector mode with the same element mode and
4920 smaller number of elements.
4922 @cindex @code{vec_duplicate@var{m}} instruction pattern
4923 @item @samp{vec_duplicate@var{m}}
4924 Initialize vector output operand 0 so that each element has the value given
4925 by scalar input operand 1.  The vector has mode @var{m} and the scalar has
4926 the mode appropriate for one element of @var{m}.
4928 This pattern only handles duplicates of non-constant inputs.  Constant
4929 vectors go through the @code{mov@var{m}} pattern instead.
4931 This pattern is not allowed to @code{FAIL}.
4933 @cindex @code{vec_series@var{m}} instruction pattern
4934 @item @samp{vec_series@var{m}}
4935 Initialize vector output operand 0 so that element @var{i} is equal to
4936 operand 1 plus @var{i} times operand 2.  In other words, create a linear
4937 series whose base value is operand 1 and whose step is operand 2.
4939 The vector output has mode @var{m} and the scalar inputs have the mode
4940 appropriate for one element of @var{m}.  This pattern is not used for
4941 floating-point vectors, in order to avoid having to specify the
4942 rounding behavior for @var{i} > 1.
4944 This pattern is not allowed to @code{FAIL}.
4946 @cindex @code{while_ult@var{m}@var{n}} instruction pattern
4947 @item @code{while_ult@var{m}@var{n}}
4948 Set operand 0 to a mask that is true while incrementing operand 1
4949 gives a value that is less than operand 2, for a vector length up to operand 3.
4950 Operand 0 has mode @var{n} and operands 1 and 2 are scalar integers of mode
4951 @var{m}.  Operand 3 should be omitted when @var{n} is a vector mode, and
4952 a @code{CONST_INT} otherwise.  The operation for vector modes is equivalent to:
4954 @smallexample
4955 operand0[0] = operand1 < operand2;
4956 for (i = 1; i < GET_MODE_NUNITS (@var{n}); i++)
4957   operand0[i] = operand0[i - 1] && (operand1 + i < operand2);
4958 @end smallexample
4960 And for non-vector modes the operation is equivalent to:
4962 @smallexample
4963 operand0[0] = operand1 < operand2;
4964 for (i = 1; i < operand3; i++)
4965   operand0[i] = operand0[i - 1] && (operand1 + i < operand2);
4966 @end smallexample
4968 @cindex @code{check_raw_ptrs@var{m}} instruction pattern
4969 @item @samp{check_raw_ptrs@var{m}}
4970 Check whether, given two pointers @var{a} and @var{b} and a length @var{len},
4971 a write of @var{len} bytes at @var{a} followed by a read of @var{len} bytes
4972 at @var{b} can be split into interleaved byte accesses
4973 @samp{@var{a}[0], @var{b}[0], @var{a}[1], @var{b}[1], @dots{}}
4974 without affecting the dependencies between the bytes.  Set operand 0
4975 to true if the split is possible and false otherwise.
4977 Operands 1, 2 and 3 provide the values of @var{a}, @var{b} and @var{len}
4978 respectively.  Operand 4 is a constant integer that provides the known
4979 common alignment of @var{a} and @var{b}.  All inputs have mode @var{m}.
4981 This split is possible if:
4983 @smallexample
4984 @var{a} == @var{b} || @var{a} + @var{len} <= @var{b} || @var{b} + @var{len} <= @var{a}
4985 @end smallexample
4987 You should only define this pattern if the target has a way of accelerating
4988 the test without having to do the individual comparisons.
4990 @cindex @code{check_war_ptrs@var{m}} instruction pattern
4991 @item @samp{check_war_ptrs@var{m}}
4992 Like @samp{check_raw_ptrs@var{m}}, but with the read and write swapped round.
4993 The split is possible in this case if:
4995 @smallexample
4996 @var{b} <= @var{a} || @var{a} + @var{len} <= @var{b}
4997 @end smallexample
4999 @cindex @code{vec_cmp@var{m}@var{n}} instruction pattern
5000 @item @samp{vec_cmp@var{m}@var{n}}
5001 Output a vector comparison.  Operand 0 of mode @var{n} is the destination for
5002 predicate in operand 1 which is a signed vector comparison with operands of
5003 mode @var{m} in operands 2 and 3.  Predicate is computed by element-wise
5004 evaluation of the vector comparison with a truth value of all-ones and a false
5005 value of all-zeros.
5007 @cindex @code{vec_cmpu@var{m}@var{n}} instruction pattern
5008 @item @samp{vec_cmpu@var{m}@var{n}}
5009 Similar to @code{vec_cmp@var{m}@var{n}} but perform unsigned vector comparison.
5011 @cindex @code{vec_cmpeq@var{m}@var{n}} instruction pattern
5012 @item @samp{vec_cmpeq@var{m}@var{n}}
5013 Similar to @code{vec_cmp@var{m}@var{n}} but perform equality or non-equality
5014 vector comparison only.  If @code{vec_cmp@var{m}@var{n}}
5015 or @code{vec_cmpu@var{m}@var{n}} instruction pattern is supported,
5016 it will be preferred over @code{vec_cmpeq@var{m}@var{n}}, so there is
5017 no need to define this instruction pattern if the others are supported.
5019 @cindex @code{vcond@var{m}@var{n}} instruction pattern
5020 @item @samp{vcond@var{m}@var{n}}
5021 Output a conditional vector move.  Operand 0 is the destination to
5022 receive a combination of operand 1 and operand 2, which are of mode @var{m},
5023 dependent on the outcome of the predicate in operand 3 which is a signed
5024 vector comparison with operands of mode @var{n} in operands 4 and 5.  The
5025 modes @var{m} and @var{n} should have the same size.  Operand 0
5026 will be set to the value @var{op1} & @var{msk} | @var{op2} & ~@var{msk}
5027 where @var{msk} is computed by element-wise evaluation of the vector
5028 comparison with a truth value of all-ones and a false value of all-zeros.
5030 @cindex @code{vcondu@var{m}@var{n}} instruction pattern
5031 @item @samp{vcondu@var{m}@var{n}}
5032 Similar to @code{vcond@var{m}@var{n}} but performs unsigned vector
5033 comparison.
5035 @cindex @code{vcondeq@var{m}@var{n}} instruction pattern
5036 @item @samp{vcondeq@var{m}@var{n}}
5037 Similar to @code{vcond@var{m}@var{n}} but performs equality or
5038 non-equality vector comparison only.  If @code{vcond@var{m}@var{n}}
5039 or @code{vcondu@var{m}@var{n}} instruction pattern is supported,
5040 it will be preferred over @code{vcondeq@var{m}@var{n}}, so there is
5041 no need to define this instruction pattern if the others are supported.
5043 @cindex @code{vcond_mask_@var{m}@var{n}} instruction pattern
5044 @item @samp{vcond_mask_@var{m}@var{n}}
5045 Similar to @code{vcond@var{m}@var{n}} but operand 3 holds a pre-computed
5046 result of vector comparison.
5048 @cindex @code{maskload@var{m}@var{n}} instruction pattern
5049 @item @samp{maskload@var{m}@var{n}}
5050 Perform a masked load of vector from memory operand 1 of mode @var{m}
5051 into register operand 0.  Mask is provided in register operand 2 of
5052 mode @var{n}.
5054 This pattern is not allowed to @code{FAIL}.
5056 @cindex @code{maskstore@var{m}@var{n}} instruction pattern
5057 @item @samp{maskstore@var{m}@var{n}}
5058 Perform a masked store of vector from register operand 1 of mode @var{m}
5059 into memory operand 0.  Mask is provided in register operand 2 of
5060 mode @var{n}.
5062 This pattern is not allowed to @code{FAIL}.
5064 @cindex @code{len_load_@var{m}} instruction pattern
5065 @item @samp{len_load_@var{m}}
5066 Load (operand 2 - operand 3) elements from vector memory operand 1
5067 into vector register operand 0, setting the other elements of
5068 operand 0 to undefined values.  Operands 0 and 1 have mode @var{m},
5069 which must be a vector mode.  Operand 2 has whichever integer mode the
5070 target prefers.  Operand 3 conceptually has mode @code{QI}.
5072 Operand 2 can be a variable or a constant amount.  Operand 3 specifies a
5073 constant bias: it is either a constant 0 or a constant -1.  The predicate on
5074 operand 3 must only accept the bias values that the target actually supports.
5075 GCC handles a bias of 0 more efficiently than a bias of -1.
5077 If (operand 2 - operand 3) exceeds the number of elements in mode
5078 @var{m}, the behavior is undefined.
5080 If the target prefers the length to be measured in bytes rather than
5081 elements, it should only implement this pattern for vectors of @code{QI}
5082 elements.
5084 This pattern is not allowed to @code{FAIL}.
5086 @cindex @code{len_store_@var{m}} instruction pattern
5087 @item @samp{len_store_@var{m}}
5088 Store (operand 2 - operand 3) vector elements from vector register operand 1
5089 into memory operand 0, leaving the other elements of
5090 operand 0 unchanged.  Operands 0 and 1 have mode @var{m}, which must be
5091 a vector mode.  Operand 2 has whichever integer mode the target prefers.
5092 Operand 3 conceptually has mode @code{QI}.
5094 Operand 2 can be a variable or a constant amount.  Operand 3 specifies a
5095 constant bias: it is either a constant 0 or a constant -1.  The predicate on
5096 operand 3 must only accept the bias values that the target actually supports.
5097 GCC handles a bias of 0 more efficiently than a bias of -1.
5099 If (operand 2 - operand 3) exceeds the number of elements in mode
5100 @var{m}, the behavior is undefined.
5102 If the target prefers the length to be measured in bytes
5103 rather than elements, it should only implement this pattern for vectors
5104 of @code{QI} elements.
5106 This pattern is not allowed to @code{FAIL}.
5108 @cindex @code{vec_perm@var{m}} instruction pattern
5109 @item @samp{vec_perm@var{m}}
5110 Output a (variable) vector permutation.  Operand 0 is the destination
5111 to receive elements from operand 1 and operand 2, which are of mode
5112 @var{m}.  Operand 3 is the @dfn{selector}.  It is an integral mode
5113 vector of the same width and number of elements as mode @var{m}.
5115 The input elements are numbered from 0 in operand 1 through
5116 @math{2*@var{N}-1} in operand 2.  The elements of the selector must
5117 be computed modulo @math{2*@var{N}}.  Note that if
5118 @code{rtx_equal_p(operand1, operand2)}, this can be implemented
5119 with just operand 1 and selector elements modulo @var{N}.
5121 In order to make things easy for a number of targets, if there is no
5122 @samp{vec_perm} pattern for mode @var{m}, but there is for mode @var{q}
5123 where @var{q} is a vector of @code{QImode} of the same width as @var{m},
5124 the middle-end will lower the mode @var{m} @code{VEC_PERM_EXPR} to
5125 mode @var{q}.
5127 See also @code{TARGET_VECTORIZER_VEC_PERM_CONST}, which performs
5128 the analogous operation for constant selectors.
5130 @cindex @code{push@var{m}1} instruction pattern
5131 @item @samp{push@var{m}1}
5132 Output a push instruction.  Operand 0 is value to push.  Used only when
5133 @code{PUSH_ROUNDING} is defined.  For historical reason, this pattern may be
5134 missing and in such case an @code{mov} expander is used instead, with a
5135 @code{MEM} expression forming the push operation.  The @code{mov} expander
5136 method is deprecated.
5138 @cindex @code{add@var{m}3} instruction pattern
5139 @item @samp{add@var{m}3}
5140 Add operand 2 and operand 1, storing the result in operand 0.  All operands
5141 must have mode @var{m}.  This can be used even on two-address machines, by
5142 means of constraints requiring operands 1 and 0 to be the same location.
5144 @cindex @code{ssadd@var{m}3} instruction pattern
5145 @cindex @code{usadd@var{m}3} instruction pattern
5146 @cindex @code{sub@var{m}3} instruction pattern
5147 @cindex @code{sssub@var{m}3} instruction pattern
5148 @cindex @code{ussub@var{m}3} instruction pattern
5149 @cindex @code{mul@var{m}3} instruction pattern
5150 @cindex @code{ssmul@var{m}3} instruction pattern
5151 @cindex @code{usmul@var{m}3} instruction pattern
5152 @cindex @code{div@var{m}3} instruction pattern
5153 @cindex @code{ssdiv@var{m}3} instruction pattern
5154 @cindex @code{udiv@var{m}3} instruction pattern
5155 @cindex @code{usdiv@var{m}3} instruction pattern
5156 @cindex @code{mod@var{m}3} instruction pattern
5157 @cindex @code{umod@var{m}3} instruction pattern
5158 @cindex @code{umin@var{m}3} instruction pattern
5159 @cindex @code{umax@var{m}3} instruction pattern
5160 @cindex @code{and@var{m}3} instruction pattern
5161 @cindex @code{ior@var{m}3} instruction pattern
5162 @cindex @code{xor@var{m}3} instruction pattern
5163 @item @samp{ssadd@var{m}3}, @samp{usadd@var{m}3}
5164 @itemx @samp{sub@var{m}3}, @samp{sssub@var{m}3}, @samp{ussub@var{m}3}
5165 @itemx @samp{mul@var{m}3}, @samp{ssmul@var{m}3}, @samp{usmul@var{m}3}
5166 @itemx @samp{div@var{m}3}, @samp{ssdiv@var{m}3}
5167 @itemx @samp{udiv@var{m}3}, @samp{usdiv@var{m}3}
5168 @itemx @samp{mod@var{m}3}, @samp{umod@var{m}3}
5169 @itemx @samp{umin@var{m}3}, @samp{umax@var{m}3}
5170 @itemx @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3}
5171 Similar, for other arithmetic operations.
5173 @cindex @code{addv@var{m}4} instruction pattern
5174 @item @samp{addv@var{m}4}
5175 Like @code{add@var{m}3} but takes a @code{code_label} as operand 3 and
5176 emits code to jump to it if signed overflow occurs during the addition.
5177 This pattern is used to implement the built-in functions performing
5178 signed integer addition with overflow checking.
5180 @cindex @code{subv@var{m}4} instruction pattern
5181 @cindex @code{mulv@var{m}4} instruction pattern
5182 @item @samp{subv@var{m}4}, @samp{mulv@var{m}4}
5183 Similar, for other signed arithmetic operations.
5185 @cindex @code{uaddv@var{m}4} instruction pattern
5186 @item @samp{uaddv@var{m}4}
5187 Like @code{addv@var{m}4} but for unsigned addition.  That is to
5188 say, the operation is the same as signed addition but the jump
5189 is taken only on unsigned overflow.
5191 @cindex @code{usubv@var{m}4} instruction pattern
5192 @cindex @code{umulv@var{m}4} instruction pattern
5193 @item @samp{usubv@var{m}4}, @samp{umulv@var{m}4}
5194 Similar, for other unsigned arithmetic operations.
5196 @cindex @code{addptr@var{m}3} instruction pattern
5197 @item @samp{addptr@var{m}3}
5198 Like @code{add@var{m}3} but is guaranteed to only be used for address
5199 calculations.  The expanded code is not allowed to clobber the
5200 condition code.  It only needs to be defined if @code{add@var{m}3}
5201 sets the condition code.  If adds used for address calculations and
5202 normal adds are not compatible it is required to expand a distinct
5203 pattern (e.g.@: using an unspec).  The pattern is used by LRA to emit
5204 address calculations.  @code{add@var{m}3} is used if
5205 @code{addptr@var{m}3} is not defined.
5207 @cindex @code{fma@var{m}4} instruction pattern
5208 @item @samp{fma@var{m}4}
5209 Multiply operand 2 and operand 1, then add operand 3, storing the
5210 result in operand 0 without doing an intermediate rounding step.  All
5211 operands must have mode @var{m}.  This pattern is used to implement
5212 the @code{fma}, @code{fmaf}, and @code{fmal} builtin functions from
5213 the ISO C99 standard.
5215 @cindex @code{fms@var{m}4} instruction pattern
5216 @item @samp{fms@var{m}4}
5217 Like @code{fma@var{m}4}, except operand 3 subtracted from the
5218 product instead of added to the product.  This is represented
5219 in the rtl as
5221 @smallexample
5222 (fma:@var{m} @var{op1} @var{op2} (neg:@var{m} @var{op3}))
5223 @end smallexample
5225 @cindex @code{fnma@var{m}4} instruction pattern
5226 @item @samp{fnma@var{m}4}
5227 Like @code{fma@var{m}4} except that the intermediate product
5228 is negated before being added to operand 3.  This is represented
5229 in the rtl as
5231 @smallexample
5232 (fma:@var{m} (neg:@var{m} @var{op1}) @var{op2} @var{op3})
5233 @end smallexample
5235 @cindex @code{fnms@var{m}4} instruction pattern
5236 @item @samp{fnms@var{m}4}
5237 Like @code{fms@var{m}4} except that the intermediate product
5238 is negated before subtracting operand 3.  This is represented
5239 in the rtl as
5241 @smallexample
5242 (fma:@var{m} (neg:@var{m} @var{op1}) @var{op2} (neg:@var{m} @var{op3}))
5243 @end smallexample
5245 @cindex @code{min@var{m}3} instruction pattern
5246 @cindex @code{max@var{m}3} instruction pattern
5247 @item @samp{smin@var{m}3}, @samp{smax@var{m}3}
5248 Signed minimum and maximum operations.  When used with floating point,
5249 if both operands are zeros, or if either operand is @code{NaN}, then
5250 it is unspecified which of the two operands is returned as the result.
5252 @cindex @code{fmin@var{m}3} instruction pattern
5253 @cindex @code{fmax@var{m}3} instruction pattern
5254 @item @samp{fmin@var{m}3}, @samp{fmax@var{m}3}
5255 IEEE-conformant minimum and maximum operations.  If one operand is a quiet
5256 @code{NaN}, then the other operand is returned.  If both operands are quiet
5257 @code{NaN}, then a quiet @code{NaN} is returned.  In the case when gcc supports
5258 signaling @code{NaN} (-fsignaling-nans) an invalid floating point exception is
5259 raised and a quiet @code{NaN} is returned.
5261 All operands have mode @var{m}, which is a scalar or vector
5262 floating-point mode.  These patterns are not allowed to @code{FAIL}.
5264 @cindex @code{reduc_smin_scal_@var{m}} instruction pattern
5265 @cindex @code{reduc_smax_scal_@var{m}} instruction pattern
5266 @item @samp{reduc_smin_scal_@var{m}}, @samp{reduc_smax_scal_@var{m}}
5267 Find the signed minimum/maximum of the elements of a vector. The vector is
5268 operand 1, and operand 0 is the scalar result, with mode equal to the mode of
5269 the elements of the input vector.
5271 @cindex @code{reduc_umin_scal_@var{m}} instruction pattern
5272 @cindex @code{reduc_umax_scal_@var{m}} instruction pattern
5273 @item @samp{reduc_umin_scal_@var{m}}, @samp{reduc_umax_scal_@var{m}}
5274 Find the unsigned minimum/maximum of the elements of a vector. The vector is
5275 operand 1, and operand 0 is the scalar result, with mode equal to the mode of
5276 the elements of the input vector.
5278 @cindex @code{reduc_fmin_scal_@var{m}} instruction pattern
5279 @cindex @code{reduc_fmax_scal_@var{m}} instruction pattern
5280 @item @samp{reduc_fmin_scal_@var{m}}, @samp{reduc_fmax_scal_@var{m}}
5281 Find the floating-point minimum/maximum of the elements of a vector,
5282 using the same rules as @code{fmin@var{m}3} and @code{fmax@var{m}3}.
5283 Operand 1 is a vector of mode @var{m} and operand 0 is the scalar
5284 result, which has mode @code{GET_MODE_INNER (@var{m})}.
5286 @cindex @code{reduc_plus_scal_@var{m}} instruction pattern
5287 @item @samp{reduc_plus_scal_@var{m}}
5288 Compute the sum of the elements of a vector. The vector is operand 1, and
5289 operand 0 is the scalar result, with mode equal to the mode of the elements of
5290 the input vector.
5292 @cindex @code{reduc_and_scal_@var{m}} instruction pattern
5293 @cindex @code{reduc_ior_scal_@var{m}} instruction pattern
5294 @cindex @code{reduc_xor_scal_@var{m}} instruction pattern
5295 @item @samp{reduc_and_scal_@var{m}}
5296 @itemx @samp{reduc_ior_scal_@var{m}}
5297 @itemx @samp{reduc_xor_scal_@var{m}}
5298 Compute the bitwise @code{AND}/@code{IOR}/@code{XOR} reduction of the elements
5299 of a vector of mode @var{m}.  Operand 1 is the vector input and operand 0
5300 is the scalar result.  The mode of the scalar result is the same as one
5301 element of @var{m}.
5303 @cindex @code{extract_last_@var{m}} instruction pattern
5304 @item @code{extract_last_@var{m}}
5305 Find the last set bit in mask operand 1 and extract the associated element
5306 of vector operand 2.  Store the result in scalar operand 0.  Operand 2
5307 has vector mode @var{m} while operand 0 has the mode appropriate for one
5308 element of @var{m}.  Operand 1 has the usual mask mode for vectors of mode
5309 @var{m}; see @code{TARGET_VECTORIZE_GET_MASK_MODE}.
5311 @cindex @code{fold_extract_last_@var{m}} instruction pattern
5312 @item @code{fold_extract_last_@var{m}}
5313 If any bits of mask operand 2 are set, find the last set bit, extract
5314 the associated element from vector operand 3, and store the result
5315 in operand 0.  Store operand 1 in operand 0 otherwise.  Operand 3
5316 has mode @var{m} and operands 0 and 1 have the mode appropriate for
5317 one element of @var{m}.  Operand 2 has the usual mask mode for vectors
5318 of mode @var{m}; see @code{TARGET_VECTORIZE_GET_MASK_MODE}.
5320 @cindex @code{fold_left_plus_@var{m}} instruction pattern
5321 @item @code{fold_left_plus_@var{m}}
5322 Take scalar operand 1 and successively add each element from vector
5323 operand 2.  Store the result in scalar operand 0.  The vector has
5324 mode @var{m} and the scalars have the mode appropriate for one
5325 element of @var{m}.  The operation is strictly in-order: there is
5326 no reassociation.
5328 @cindex @code{mask_fold_left_plus_@var{m}} instruction pattern
5329 @item @code{mask_fold_left_plus_@var{m}}
5330 Like @samp{fold_left_plus_@var{m}}, but takes an additional mask operand
5331 (operand 3) that specifies which elements of the source vector should be added.
5333 @cindex @code{sdot_prod@var{m}} instruction pattern
5334 @item @samp{sdot_prod@var{m}}
5336 Compute the sum of the products of two signed elements.
5337 Operand 1 and operand 2 are of the same mode. Their
5338 product, which is of a wider mode, is computed and added to operand 3.
5339 Operand 3 is of a mode equal or wider than the mode of the product. The
5340 result is placed in operand 0, which is of the same mode as operand 3.
5342 Semantically the expressions perform the multiplication in the following signs
5344 @smallexample
5345 sdot<signed op0, signed op1, signed op2, signed op3> ==
5346    op0 = sign-ext (op1) * sign-ext (op2) + op3
5347 @dots{}
5348 @end smallexample
5350 @cindex @code{udot_prod@var{m}} instruction pattern
5351 @item @samp{udot_prod@var{m}}
5353 Compute the sum of the products of two unsigned elements.
5354 Operand 1 and operand 2 are of the same mode. Their
5355 product, which is of a wider mode, is computed and added to operand 3.
5356 Operand 3 is of a mode equal or wider than the mode of the product. The
5357 result is placed in operand 0, which is of the same mode as operand 3.
5359 Semantically the expressions perform the multiplication in the following signs
5361 @smallexample
5362 udot<unsigned op0, unsigned op1, unsigned op2, unsigned op3> ==
5363    op0 = zero-ext (op1) * zero-ext (op2) + op3
5364 @dots{}
5365 @end smallexample
5367 @cindex @code{usdot_prod@var{m}} instruction pattern
5368 @item @samp{usdot_prod@var{m}}
5369 Compute the sum of the products of elements of different signs.
5370 Operand 1 must be unsigned and operand 2 signed. Their
5371 product, which is of a wider mode, is computed and added to operand 3.
5372 Operand 3 is of a mode equal or wider than the mode of the product. The
5373 result is placed in operand 0, which is of the same mode as operand 3.
5375 Semantically the expressions perform the multiplication in the following signs
5377 @smallexample
5378 usdot<signed op0, unsigned op1, signed op2, signed op3> ==
5379    op0 = ((signed-conv) zero-ext (op1)) * sign-ext (op2) + op3
5380 @dots{}
5381 @end smallexample
5383 @cindex @code{ssad@var{m}} instruction pattern
5384 @cindex @code{usad@var{m}} instruction pattern
5385 @item @samp{ssad@var{m}}
5386 @item @samp{usad@var{m}}
5387 Compute the sum of absolute differences of two signed/unsigned elements.
5388 Operand 1 and operand 2 are of the same mode. Their absolute difference, which
5389 is of a wider mode, is computed and added to operand 3. Operand 3 is of a mode
5390 equal or wider than the mode of the absolute difference. The result is placed
5391 in operand 0, which is of the same mode as operand 3.
5393 @cindex @code{widen_ssum@var{m3}} instruction pattern
5394 @cindex @code{widen_usum@var{m3}} instruction pattern
5395 @item @samp{widen_ssum@var{m3}}
5396 @itemx @samp{widen_usum@var{m3}}
5397 Operands 0 and 2 are of the same mode, which is wider than the mode of
5398 operand 1. Add operand 1 to operand 2 and place the widened result in
5399 operand 0. (This is used express accumulation of elements into an accumulator
5400 of a wider mode.)
5402 @cindex @code{smulhs@var{m3}} instruction pattern
5403 @cindex @code{umulhs@var{m3}} instruction pattern
5404 @item @samp{smulhs@var{m3}}
5405 @itemx @samp{umulhs@var{m3}}
5406 Signed/unsigned multiply high with scale. This is equivalent to the C code:
5407 @smallexample
5408 narrow op0, op1, op2;
5409 @dots{}
5410 op0 = (narrow) (((wide) op1 * (wide) op2) >> (N / 2 - 1));
5411 @end smallexample
5412 where the sign of @samp{narrow} determines whether this is a signed
5413 or unsigned operation, and @var{N} is the size of @samp{wide} in bits.
5415 @cindex @code{smulhrs@var{m3}} instruction pattern
5416 @cindex @code{umulhrs@var{m3}} instruction pattern
5417 @item @samp{smulhrs@var{m3}}
5418 @itemx @samp{umulhrs@var{m3}}
5419 Signed/unsigned multiply high with round and scale. This is
5420 equivalent to the C code:
5421 @smallexample
5422 narrow op0, op1, op2;
5423 @dots{}
5424 op0 = (narrow) (((((wide) op1 * (wide) op2) >> (N / 2 - 2)) + 1) >> 1);
5425 @end smallexample
5426 where the sign of @samp{narrow} determines whether this is a signed
5427 or unsigned operation, and @var{N} is the size of @samp{wide} in bits.
5429 @cindex @code{sdiv_pow2@var{m3}} instruction pattern
5430 @cindex @code{sdiv_pow2@var{m3}} instruction pattern
5431 @item @samp{sdiv_pow2@var{m3}}
5432 @itemx @samp{sdiv_pow2@var{m3}}
5433 Signed division by power-of-2 immediate. Equivalent to:
5434 @smallexample
5435 signed op0, op1;
5436 @dots{}
5437 op0 = op1 / (1 << imm);
5438 @end smallexample
5440 @cindex @code{vec_shl_insert_@var{m}} instruction pattern
5441 @item @samp{vec_shl_insert_@var{m}}
5442 Shift the elements in vector input operand 1 left one element (i.e.@:
5443 away from element 0) and fill the vacated element 0 with the scalar
5444 in operand 2.  Store the result in vector output operand 0.  Operands
5445 0 and 1 have mode @var{m} and operand 2 has the mode appropriate for
5446 one element of @var{m}.
5448 @cindex @code{vec_shl_@var{m}} instruction pattern
5449 @item @samp{vec_shl_@var{m}}
5450 Whole vector left shift in bits, i.e.@: away from element 0.
5451 Operand 1 is a vector to be shifted.
5452 Operand 2 is an integer shift amount in bits.
5453 Operand 0 is where the resulting shifted vector is stored.
5454 The output and input vectors should have the same modes.
5456 @cindex @code{vec_shr_@var{m}} instruction pattern
5457 @item @samp{vec_shr_@var{m}}
5458 Whole vector right shift in bits, i.e.@: towards element 0.
5459 Operand 1 is a vector to be shifted.
5460 Operand 2 is an integer shift amount in bits.
5461 Operand 0 is where the resulting shifted vector is stored.
5462 The output and input vectors should have the same modes.
5464 @cindex @code{vec_pack_trunc_@var{m}} instruction pattern
5465 @item @samp{vec_pack_trunc_@var{m}}
5466 Narrow (demote) and merge the elements of two vectors. Operands 1 and 2
5467 are vectors of the same mode having N integral or floating point elements
5468 of size S@.  Operand 0 is the resulting vector in which 2*N elements of
5469 size S/2 are concatenated after narrowing them down using truncation.
5471 @cindex @code{vec_pack_sbool_trunc_@var{m}} instruction pattern
5472 @item @samp{vec_pack_sbool_trunc_@var{m}}
5473 Narrow and merge the elements of two vectors.  Operands 1 and 2 are vectors
5474 of the same type having N boolean elements.  Operand 0 is the resulting
5475 vector in which 2*N elements are concatenated.  The last operand (operand 3)
5476 is the number of elements in the output vector 2*N as a @code{CONST_INT}.
5477 This instruction pattern is used when all the vector input and output
5478 operands have the same scalar mode @var{m} and thus using
5479 @code{vec_pack_trunc_@var{m}} would be ambiguous.
5481 @cindex @code{vec_pack_ssat_@var{m}} instruction pattern
5482 @cindex @code{vec_pack_usat_@var{m}} instruction pattern
5483 @item @samp{vec_pack_ssat_@var{m}}, @samp{vec_pack_usat_@var{m}}
5484 Narrow (demote) and merge the elements of two vectors.  Operands 1 and 2
5485 are vectors of the same mode having N integral elements of size S.
5486 Operand 0 is the resulting vector in which the elements of the two input
5487 vectors are concatenated after narrowing them down using signed/unsigned
5488 saturating arithmetic.
5490 @cindex @code{vec_pack_sfix_trunc_@var{m}} instruction pattern
5491 @cindex @code{vec_pack_ufix_trunc_@var{m}} instruction pattern
5492 @item @samp{vec_pack_sfix_trunc_@var{m}}, @samp{vec_pack_ufix_trunc_@var{m}}
5493 Narrow, convert to signed/unsigned integral type and merge the elements
5494 of two vectors.  Operands 1 and 2 are vectors of the same mode having N
5495 floating point elements of size S@.  Operand 0 is the resulting vector
5496 in which 2*N elements of size S/2 are concatenated.
5498 @cindex @code{vec_packs_float_@var{m}} instruction pattern
5499 @cindex @code{vec_packu_float_@var{m}} instruction pattern
5500 @item @samp{vec_packs_float_@var{m}}, @samp{vec_packu_float_@var{m}}
5501 Narrow, convert to floating point type and merge the elements
5502 of two vectors.  Operands 1 and 2 are vectors of the same mode having N
5503 signed/unsigned integral elements of size S@.  Operand 0 is the resulting vector
5504 in which 2*N elements of size S/2 are concatenated.
5506 @cindex @code{vec_unpacks_hi_@var{m}} instruction pattern
5507 @cindex @code{vec_unpacks_lo_@var{m}} instruction pattern
5508 @item @samp{vec_unpacks_hi_@var{m}}, @samp{vec_unpacks_lo_@var{m}}
5509 Extract and widen (promote) the high/low part of a vector of signed
5510 integral or floating point elements.  The input vector (operand 1) has N
5511 elements of size S@.  Widen (promote) the high/low elements of the vector
5512 using signed or floating point extension and place the resulting N/2
5513 values of size 2*S in the output vector (operand 0).
5515 @cindex @code{vec_unpacku_hi_@var{m}} instruction pattern
5516 @cindex @code{vec_unpacku_lo_@var{m}} instruction pattern
5517 @item @samp{vec_unpacku_hi_@var{m}}, @samp{vec_unpacku_lo_@var{m}}
5518 Extract and widen (promote) the high/low part of a vector of unsigned
5519 integral elements.  The input vector (operand 1) has N elements of size S.
5520 Widen (promote) the high/low elements of the vector using zero extension and
5521 place the resulting N/2 values of size 2*S in the output vector (operand 0).
5523 @cindex @code{vec_unpacks_sbool_hi_@var{m}} instruction pattern
5524 @cindex @code{vec_unpacks_sbool_lo_@var{m}} instruction pattern
5525 @item @samp{vec_unpacks_sbool_hi_@var{m}}, @samp{vec_unpacks_sbool_lo_@var{m}}
5526 Extract the high/low part of a vector of boolean elements that have scalar
5527 mode @var{m}.  The input vector (operand 1) has N elements, the output
5528 vector (operand 0) has N/2 elements.  The last operand (operand 2) is the
5529 number of elements of the input vector N as a @code{CONST_INT}.  These
5530 patterns are used if both the input and output vectors have the same scalar
5531 mode @var{m} and thus using @code{vec_unpacks_hi_@var{m}} or
5532 @code{vec_unpacks_lo_@var{m}} would be ambiguous.
5534 @cindex @code{vec_unpacks_float_hi_@var{m}} instruction pattern
5535 @cindex @code{vec_unpacks_float_lo_@var{m}} instruction pattern
5536 @cindex @code{vec_unpacku_float_hi_@var{m}} instruction pattern
5537 @cindex @code{vec_unpacku_float_lo_@var{m}} instruction pattern
5538 @item @samp{vec_unpacks_float_hi_@var{m}}, @samp{vec_unpacks_float_lo_@var{m}}
5539 @itemx @samp{vec_unpacku_float_hi_@var{m}}, @samp{vec_unpacku_float_lo_@var{m}}
5540 Extract, convert to floating point type and widen the high/low part of a
5541 vector of signed/unsigned integral elements.  The input vector (operand 1)
5542 has N elements of size S@.  Convert the high/low elements of the vector using
5543 floating point conversion and place the resulting N/2 values of size 2*S in
5544 the output vector (operand 0).
5546 @cindex @code{vec_unpack_sfix_trunc_hi_@var{m}} instruction pattern
5547 @cindex @code{vec_unpack_sfix_trunc_lo_@var{m}} instruction pattern
5548 @cindex @code{vec_unpack_ufix_trunc_hi_@var{m}} instruction pattern
5549 @cindex @code{vec_unpack_ufix_trunc_lo_@var{m}} instruction pattern
5550 @item @samp{vec_unpack_sfix_trunc_hi_@var{m}},
5551 @itemx @samp{vec_unpack_sfix_trunc_lo_@var{m}}
5552 @itemx @samp{vec_unpack_ufix_trunc_hi_@var{m}}
5553 @itemx @samp{vec_unpack_ufix_trunc_lo_@var{m}}
5554 Extract, convert to signed/unsigned integer type and widen the high/low part of a
5555 vector of floating point elements.  The input vector (operand 1)
5556 has N elements of size S@.  Convert the high/low elements of the vector
5557 to integers and place the resulting N/2 values of size 2*S in
5558 the output vector (operand 0).
5560 @cindex @code{vec_widen_umult_hi_@var{m}} instruction pattern
5561 @cindex @code{vec_widen_umult_lo_@var{m}} instruction pattern
5562 @cindex @code{vec_widen_smult_hi_@var{m}} instruction pattern
5563 @cindex @code{vec_widen_smult_lo_@var{m}} instruction pattern
5564 @cindex @code{vec_widen_umult_even_@var{m}} instruction pattern
5565 @cindex @code{vec_widen_umult_odd_@var{m}} instruction pattern
5566 @cindex @code{vec_widen_smult_even_@var{m}} instruction pattern
5567 @cindex @code{vec_widen_smult_odd_@var{m}} instruction pattern
5568 @item @samp{vec_widen_umult_hi_@var{m}}, @samp{vec_widen_umult_lo_@var{m}}
5569 @itemx @samp{vec_widen_smult_hi_@var{m}}, @samp{vec_widen_smult_lo_@var{m}}
5570 @itemx @samp{vec_widen_umult_even_@var{m}}, @samp{vec_widen_umult_odd_@var{m}}
5571 @itemx @samp{vec_widen_smult_even_@var{m}}, @samp{vec_widen_smult_odd_@var{m}}
5572 Signed/Unsigned widening multiplication.  The two inputs (operands 1 and 2)
5573 are vectors with N signed/unsigned elements of size S@.  Multiply the high/low
5574 or even/odd elements of the two vectors, and put the N/2 products of size 2*S
5575 in the output vector (operand 0). A target shouldn't implement even/odd pattern
5576 pair if it is less efficient than lo/hi one.
5578 @cindex @code{vec_widen_ushiftl_hi_@var{m}} instruction pattern
5579 @cindex @code{vec_widen_ushiftl_lo_@var{m}} instruction pattern
5580 @cindex @code{vec_widen_sshiftl_hi_@var{m}} instruction pattern
5581 @cindex @code{vec_widen_sshiftl_lo_@var{m}} instruction pattern
5582 @item @samp{vec_widen_ushiftl_hi_@var{m}}, @samp{vec_widen_ushiftl_lo_@var{m}}
5583 @itemx @samp{vec_widen_sshiftl_hi_@var{m}}, @samp{vec_widen_sshiftl_lo_@var{m}}
5584 Signed/Unsigned widening shift left.  The first input (operand 1) is a vector
5585 with N signed/unsigned elements of size S@.  Operand 2 is a constant.  Shift
5586 the high/low elements of operand 1, and put the N/2 results of size 2*S in the
5587 output vector (operand 0).
5589 @cindex @code{vec_widen_saddl_hi_@var{m}} instruction pattern
5590 @cindex @code{vec_widen_saddl_lo_@var{m}} instruction pattern
5591 @cindex @code{vec_widen_uaddl_hi_@var{m}} instruction pattern
5592 @cindex @code{vec_widen_uaddl_lo_@var{m}} instruction pattern
5593 @item @samp{vec_widen_uaddl_hi_@var{m}}, @samp{vec_widen_uaddl_lo_@var{m}}
5594 @itemx @samp{vec_widen_saddl_hi_@var{m}}, @samp{vec_widen_saddl_lo_@var{m}}
5595 Signed/Unsigned widening add long.  Operands 1 and 2 are vectors with N
5596 signed/unsigned elements of size S@.  Add the high/low elements of 1 and 2
5597 together, widen the resulting elements and put the N/2 results of size 2*S in
5598 the output vector (operand 0).
5600 @cindex @code{vec_widen_ssubl_hi_@var{m}} instruction pattern
5601 @cindex @code{vec_widen_ssubl_lo_@var{m}} instruction pattern
5602 @cindex @code{vec_widen_usubl_hi_@var{m}} instruction pattern
5603 @cindex @code{vec_widen_usubl_lo_@var{m}} instruction pattern
5604 @item @samp{vec_widen_usubl_hi_@var{m}}, @samp{vec_widen_usubl_lo_@var{m}}
5605 @itemx @samp{vec_widen_ssubl_hi_@var{m}}, @samp{vec_widen_ssubl_lo_@var{m}}
5606 Signed/Unsigned widening subtract long.  Operands 1 and 2 are vectors with N
5607 signed/unsigned elements of size S@.  Subtract the high/low elements of 2 from
5608 1 and widen the resulting elements. Put the N/2 results of size 2*S in the
5609 output vector (operand 0).
5611 @cindex @code{vec_addsub@var{m}3} instruction pattern
5612 @item @samp{vec_addsub@var{m}3}
5613 Alternating subtract, add with even lanes doing subtract and odd
5614 lanes doing addition.  Operands 1 and 2 and the outout operand are vectors
5615 with mode @var{m}.
5617 @cindex @code{vec_fmaddsub@var{m}4} instruction pattern
5618 @item @samp{vec_fmaddsub@var{m}4}
5619 Alternating multiply subtract, add with even lanes doing subtract and odd
5620 lanes doing addition of the third operand to the multiplication result
5621 of the first two operands.  Operands 1, 2 and 3 and the outout operand are vectors
5622 with mode @var{m}.
5624 @cindex @code{vec_fmsubadd@var{m}4} instruction pattern
5625 @item @samp{vec_fmsubadd@var{m}4}
5626 Alternating multiply add, subtract with even lanes doing addition and odd
5627 lanes doing subtraction of the third operand to the multiplication result
5628 of the first two operands.  Operands 1, 2 and 3 and the outout operand are vectors
5629 with mode @var{m}.
5631 These instructions are not allowed to @code{FAIL}.
5633 @cindex @code{mulhisi3} instruction pattern
5634 @item @samp{mulhisi3}
5635 Multiply operands 1 and 2, which have mode @code{HImode}, and store
5636 a @code{SImode} product in operand 0.
5638 @cindex @code{mulqihi3} instruction pattern
5639 @cindex @code{mulsidi3} instruction pattern
5640 @item @samp{mulqihi3}, @samp{mulsidi3}
5641 Similar widening-multiplication instructions of other widths.
5643 @cindex @code{umulqihi3} instruction pattern
5644 @cindex @code{umulhisi3} instruction pattern
5645 @cindex @code{umulsidi3} instruction pattern
5646 @item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3}
5647 Similar widening-multiplication instructions that do unsigned
5648 multiplication.
5650 @cindex @code{usmulqihi3} instruction pattern
5651 @cindex @code{usmulhisi3} instruction pattern
5652 @cindex @code{usmulsidi3} instruction pattern
5653 @item @samp{usmulqihi3}, @samp{usmulhisi3}, @samp{usmulsidi3}
5654 Similar widening-multiplication instructions that interpret the first
5655 operand as unsigned and the second operand as signed, then do a signed
5656 multiplication.
5658 @cindex @code{smul@var{m}3_highpart} instruction pattern
5659 @item @samp{smul@var{m}3_highpart}
5660 Perform a signed multiplication of operands 1 and 2, which have mode
5661 @var{m}, and store the most significant half of the product in operand 0.
5662 The least significant half of the product is discarded.  This may be
5663 represented in RTL using a @code{smul_highpart} RTX expression.
5665 @cindex @code{umul@var{m}3_highpart} instruction pattern
5666 @item @samp{umul@var{m}3_highpart}
5667 Similar, but the multiplication is unsigned.  This may be represented
5668 in RTL using an @code{umul_highpart} RTX expression.
5670 @cindex @code{madd@var{m}@var{n}4} instruction pattern
5671 @item @samp{madd@var{m}@var{n}4}
5672 Multiply operands 1 and 2, sign-extend them to mode @var{n}, add
5673 operand 3, and store the result in operand 0.  Operands 1 and 2
5674 have mode @var{m} and operands 0 and 3 have mode @var{n}.
5675 Both modes must be integer or fixed-point modes and @var{n} must be twice
5676 the size of @var{m}.
5678 In other words, @code{madd@var{m}@var{n}4} is like
5679 @code{mul@var{m}@var{n}3} except that it also adds operand 3.
5681 These instructions are not allowed to @code{FAIL}.
5683 @cindex @code{umadd@var{m}@var{n}4} instruction pattern
5684 @item @samp{umadd@var{m}@var{n}4}
5685 Like @code{madd@var{m}@var{n}4}, but zero-extend the multiplication
5686 operands instead of sign-extending them.
5688 @cindex @code{ssmadd@var{m}@var{n}4} instruction pattern
5689 @item @samp{ssmadd@var{m}@var{n}4}
5690 Like @code{madd@var{m}@var{n}4}, but all involved operations must be
5691 signed-saturating.
5693 @cindex @code{usmadd@var{m}@var{n}4} instruction pattern
5694 @item @samp{usmadd@var{m}@var{n}4}
5695 Like @code{umadd@var{m}@var{n}4}, but all involved operations must be
5696 unsigned-saturating.
5698 @cindex @code{msub@var{m}@var{n}4} instruction pattern
5699 @item @samp{msub@var{m}@var{n}4}
5700 Multiply operands 1 and 2, sign-extend them to mode @var{n}, subtract the
5701 result from operand 3, and store the result in operand 0.  Operands 1 and 2
5702 have mode @var{m} and operands 0 and 3 have mode @var{n}.
5703 Both modes must be integer or fixed-point modes and @var{n} must be twice
5704 the size of @var{m}.
5706 In other words, @code{msub@var{m}@var{n}4} is like
5707 @code{mul@var{m}@var{n}3} except that it also subtracts the result
5708 from operand 3.
5710 These instructions are not allowed to @code{FAIL}.
5712 @cindex @code{umsub@var{m}@var{n}4} instruction pattern
5713 @item @samp{umsub@var{m}@var{n}4}
5714 Like @code{msub@var{m}@var{n}4}, but zero-extend the multiplication
5715 operands instead of sign-extending them.
5717 @cindex @code{ssmsub@var{m}@var{n}4} instruction pattern
5718 @item @samp{ssmsub@var{m}@var{n}4}
5719 Like @code{msub@var{m}@var{n}4}, but all involved operations must be
5720 signed-saturating.
5722 @cindex @code{usmsub@var{m}@var{n}4} instruction pattern
5723 @item @samp{usmsub@var{m}@var{n}4}
5724 Like @code{umsub@var{m}@var{n}4}, but all involved operations must be
5725 unsigned-saturating.
5727 @cindex @code{divmod@var{m}4} instruction pattern
5728 @item @samp{divmod@var{m}4}
5729 Signed division that produces both a quotient and a remainder.
5730 Operand 1 is divided by operand 2 to produce a quotient stored
5731 in operand 0 and a remainder stored in operand 3.
5733 For machines with an instruction that produces both a quotient and a
5734 remainder, provide a pattern for @samp{divmod@var{m}4} but do not
5735 provide patterns for @samp{div@var{m}3} and @samp{mod@var{m}3}.  This
5736 allows optimization in the relatively common case when both the quotient
5737 and remainder are computed.
5739 If an instruction that just produces a quotient or just a remainder
5740 exists and is more efficient than the instruction that produces both,
5741 write the output routine of @samp{divmod@var{m}4} to call
5742 @code{find_reg_note} and look for a @code{REG_UNUSED} note on the
5743 quotient or remainder and generate the appropriate instruction.
5745 @cindex @code{udivmod@var{m}4} instruction pattern
5746 @item @samp{udivmod@var{m}4}
5747 Similar, but does unsigned division.
5749 @anchor{shift patterns}
5750 @cindex @code{ashl@var{m}3} instruction pattern
5751 @cindex @code{ssashl@var{m}3} instruction pattern
5752 @cindex @code{usashl@var{m}3} instruction pattern
5753 @item @samp{ashl@var{m}3}, @samp{ssashl@var{m}3}, @samp{usashl@var{m}3}
5754 Arithmetic-shift operand 1 left by a number of bits specified by operand
5755 2, and store the result in operand 0.  Here @var{m} is the mode of
5756 operand 0 and operand 1; operand 2's mode is specified by the
5757 instruction pattern, and the compiler will convert the operand to that
5758 mode before generating the instruction.  The shift or rotate expander
5759 or instruction pattern should explicitly specify the mode of the operand 2,
5760 it should never be @code{VOIDmode}.  The meaning of out-of-range shift
5761 counts can optionally be specified by @code{TARGET_SHIFT_TRUNCATION_MASK}.
5762 @xref{TARGET_SHIFT_TRUNCATION_MASK}.  Operand 2 is always a scalar type.
5764 @cindex @code{ashr@var{m}3} instruction pattern
5765 @cindex @code{lshr@var{m}3} instruction pattern
5766 @cindex @code{rotl@var{m}3} instruction pattern
5767 @cindex @code{rotr@var{m}3} instruction pattern
5768 @item @samp{ashr@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3}
5769 Other shift and rotate instructions, analogous to the
5770 @code{ashl@var{m}3} instructions.  Operand 2 is always a scalar type.
5772 @cindex @code{vashl@var{m}3} instruction pattern
5773 @cindex @code{vashr@var{m}3} instruction pattern
5774 @cindex @code{vlshr@var{m}3} instruction pattern
5775 @cindex @code{vrotl@var{m}3} instruction pattern
5776 @cindex @code{vrotr@var{m}3} instruction pattern
5777 @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}
5778 Vector shift and rotate instructions that take vectors as operand 2
5779 instead of a scalar type.
5781 @cindex @code{avg@var{m}3_floor} instruction pattern
5782 @cindex @code{uavg@var{m}3_floor} instruction pattern
5783 @item @samp{avg@var{m}3_floor}
5784 @itemx @samp{uavg@var{m}3_floor}
5785 Signed and unsigned average instructions.  These instructions add
5786 operands 1 and 2 without truncation, divide the result by 2,
5787 round towards -Inf, and store the result in operand 0.  This is
5788 equivalent to the C code:
5789 @smallexample
5790 narrow op0, op1, op2;
5791 @dots{}
5792 op0 = (narrow) (((wide) op1 + (wide) op2) >> 1);
5793 @end smallexample
5794 where the sign of @samp{narrow} determines whether this is a signed
5795 or unsigned operation.
5797 @cindex @code{avg@var{m}3_ceil} instruction pattern
5798 @cindex @code{uavg@var{m}3_ceil} instruction pattern
5799 @item @samp{avg@var{m}3_ceil}
5800 @itemx @samp{uavg@var{m}3_ceil}
5801 Like @samp{avg@var{m}3_floor} and @samp{uavg@var{m}3_floor}, but round
5802 towards +Inf.  This is equivalent to the C code:
5803 @smallexample
5804 narrow op0, op1, op2;
5805 @dots{}
5806 op0 = (narrow) (((wide) op1 + (wide) op2 + 1) >> 1);
5807 @end smallexample
5809 @cindex @code{bswap@var{m}2} instruction pattern
5810 @item @samp{bswap@var{m}2}
5811 Reverse the order of bytes of operand 1 and store the result in operand 0.
5813 @cindex @code{neg@var{m}2} instruction pattern
5814 @cindex @code{ssneg@var{m}2} instruction pattern
5815 @cindex @code{usneg@var{m}2} instruction pattern
5816 @item @samp{neg@var{m}2}, @samp{ssneg@var{m}2}, @samp{usneg@var{m}2}
5817 Negate operand 1 and store the result in operand 0.
5819 @cindex @code{negv@var{m}3} instruction pattern
5820 @item @samp{negv@var{m}3}
5821 Like @code{neg@var{m}2} but takes a @code{code_label} as operand 2 and
5822 emits code to jump to it if signed overflow occurs during the negation.
5824 @cindex @code{abs@var{m}2} instruction pattern
5825 @item @samp{abs@var{m}2}
5826 Store the absolute value of operand 1 into operand 0.
5828 @cindex @code{sqrt@var{m}2} instruction pattern
5829 @item @samp{sqrt@var{m}2}
5830 Store the square root of operand 1 into operand 0.  Both operands have
5831 mode @var{m}, which is a scalar or vector floating-point mode.
5833 This pattern is not allowed to @code{FAIL}.
5835 @cindex @code{rsqrt@var{m}2} instruction pattern
5836 @item @samp{rsqrt@var{m}2}
5837 Store the reciprocal of the square root of operand 1 into operand 0.
5838 Both operands have mode @var{m}, which is a scalar or vector
5839 floating-point mode.
5841 On most architectures this pattern is only approximate, so either
5842 its C condition or the @code{TARGET_OPTAB_SUPPORTED_P} hook should
5843 check for the appropriate math flags.  (Using the C condition is
5844 more direct, but using @code{TARGET_OPTAB_SUPPORTED_P} can be useful
5845 if a target-specific built-in also uses the @samp{rsqrt@var{m}2}
5846 pattern.)
5848 This pattern is not allowed to @code{FAIL}.
5850 @cindex @code{fmod@var{m}3} instruction pattern
5851 @item @samp{fmod@var{m}3}
5852 Store the remainder of dividing operand 1 by operand 2 into
5853 operand 0, rounded towards zero to an integer.  All operands have
5854 mode @var{m}, which is a scalar or vector floating-point mode.
5856 This pattern is not allowed to @code{FAIL}.
5858 @cindex @code{remainder@var{m}3} instruction pattern
5859 @item @samp{remainder@var{m}3}
5860 Store the remainder of dividing operand 1 by operand 2 into
5861 operand 0, rounded to the nearest integer.  All operands have
5862 mode @var{m}, which is a scalar or vector floating-point mode.
5864 This pattern is not allowed to @code{FAIL}.
5866 @cindex @code{scalb@var{m}3} instruction pattern
5867 @item @samp{scalb@var{m}3}
5868 Raise @code{FLT_RADIX} to the power of operand 2, multiply it by
5869 operand 1, and store the result in operand 0.  All operands have
5870 mode @var{m}, which is a scalar or vector floating-point mode.
5872 This pattern is not allowed to @code{FAIL}.
5874 @cindex @code{ldexp@var{m}3} instruction pattern
5875 @item @samp{ldexp@var{m}3}
5876 Raise 2 to the power of operand 2, multiply it by operand 1, and store
5877 the result in operand 0.  Operands 0 and 1 have mode @var{m}, which is
5878 a scalar or vector floating-point mode.  Operand 2's mode has
5879 the same number of elements as @var{m} and each element is wide
5880 enough to store an @code{int}.  The integers are signed.
5882 This pattern is not allowed to @code{FAIL}.
5884 @cindex @code{cos@var{m}2} instruction pattern
5885 @item @samp{cos@var{m}2}
5886 Store the cosine of operand 1 into operand 0.  Both operands have
5887 mode @var{m}, which is a scalar or vector floating-point mode.
5889 This pattern is not allowed to @code{FAIL}.
5891 @cindex @code{sin@var{m}2} instruction pattern
5892 @item @samp{sin@var{m}2}
5893 Store the sine of operand 1 into operand 0.  Both operands have
5894 mode @var{m}, which is a scalar or vector floating-point mode.
5896 This pattern is not allowed to @code{FAIL}.
5898 @cindex @code{sincos@var{m}3} instruction pattern
5899 @item @samp{sincos@var{m}3}
5900 Store the cosine of operand 2 into operand 0 and the sine of
5901 operand 2 into operand 1.  All operands have mode @var{m},
5902 which is a scalar or vector floating-point mode.
5904 Targets that can calculate the sine and cosine simultaneously can
5905 implement this pattern as opposed to implementing individual
5906 @code{sin@var{m}2} and @code{cos@var{m}2} patterns.  The @code{sin}
5907 and @code{cos} built-in functions will then be expanded to the
5908 @code{sincos@var{m}3} pattern, with one of the output values
5909 left unused.
5911 @cindex @code{tan@var{m}2} instruction pattern
5912 @item @samp{tan@var{m}2}
5913 Store the tangent of operand 1 into operand 0.  Both operands have
5914 mode @var{m}, which is a scalar or vector floating-point mode.
5916 This pattern is not allowed to @code{FAIL}.
5918 @cindex @code{asin@var{m}2} instruction pattern
5919 @item @samp{asin@var{m}2}
5920 Store the arc sine of operand 1 into operand 0.  Both operands have
5921 mode @var{m}, which is a scalar or vector floating-point mode.
5923 This pattern is not allowed to @code{FAIL}.
5925 @cindex @code{acos@var{m}2} instruction pattern
5926 @item @samp{acos@var{m}2}
5927 Store the arc cosine of operand 1 into operand 0.  Both operands have
5928 mode @var{m}, which is a scalar or vector floating-point mode.
5930 This pattern is not allowed to @code{FAIL}.
5932 @cindex @code{atan@var{m}2} instruction pattern
5933 @item @samp{atan@var{m}2}
5934 Store the arc tangent of operand 1 into operand 0.  Both operands have
5935 mode @var{m}, which is a scalar or vector floating-point mode.
5937 This pattern is not allowed to @code{FAIL}.
5939 @cindex @code{fegetround@var{m}} instruction pattern
5940 @item @samp{fegetround@var{m}}
5941 Store the current machine floating-point rounding mode into operand 0.
5942 Operand 0 has mode @var{m}, which is scalar.  This pattern is used to
5943 implement the @code{fegetround} function from the ISO C99 standard.
5945 @cindex @code{feclearexcept@var{m}} instruction pattern
5946 @cindex @code{feraiseexcept@var{m}} instruction pattern
5947 @item @samp{feclearexcept@var{m}}
5948 @item @samp{feraiseexcept@var{m}}
5949 Clears or raises the supported machine floating-point exceptions
5950 represented by the bits in operand 1.  Error status is stored as
5951 nonzero value in operand 0.  Both operands have mode @var{m}, which is
5952 a scalar.  These patterns are used to implement the
5953 @code{feclearexcept} and @code{feraiseexcept} functions from the ISO
5954 C99 standard.
5956 @cindex @code{exp@var{m}2} instruction pattern
5957 @item @samp{exp@var{m}2}
5958 Raise e (the base of natural logarithms) to the power of operand 1
5959 and store the result in operand 0.  Both operands have mode @var{m},
5960 which is a scalar or vector floating-point mode.
5962 This pattern is not allowed to @code{FAIL}.
5964 @cindex @code{expm1@var{m}2} instruction pattern
5965 @item @samp{expm1@var{m}2}
5966 Raise e (the base of natural logarithms) to the power of operand 1,
5967 subtract 1, and store the result in operand 0.  Both operands have
5968 mode @var{m}, which is a scalar or vector floating-point mode.
5970 For inputs close to zero, the pattern is expected to be more
5971 accurate than a separate @code{exp@var{m}2} and @code{sub@var{m}3}
5972 would be.
5974 This pattern is not allowed to @code{FAIL}.
5976 @cindex @code{exp10@var{m}2} instruction pattern
5977 @item @samp{exp10@var{m}2}
5978 Raise 10 to the power of operand 1 and store the result in operand 0.
5979 Both operands have mode @var{m}, which is a scalar or vector
5980 floating-point mode.
5982 This pattern is not allowed to @code{FAIL}.
5984 @cindex @code{exp2@var{m}2} instruction pattern
5985 @item @samp{exp2@var{m}2}
5986 Raise 2 to the power of operand 1 and store the result in operand 0.
5987 Both operands have mode @var{m}, which is a scalar or vector
5988 floating-point mode.
5990 This pattern is not allowed to @code{FAIL}.
5992 @cindex @code{log@var{m}2} instruction pattern
5993 @item @samp{log@var{m}2}
5994 Store the natural logarithm of operand 1 into operand 0.  Both operands
5995 have mode @var{m}, which is a scalar or vector floating-point mode.
5997 This pattern is not allowed to @code{FAIL}.
5999 @cindex @code{log1p@var{m}2} instruction pattern
6000 @item @samp{log1p@var{m}2}
6001 Add 1 to operand 1, compute the natural logarithm, and store
6002 the result in operand 0.  Both operands have mode @var{m}, which is
6003 a scalar or vector floating-point mode.
6005 For inputs close to zero, the pattern is expected to be more
6006 accurate than a separate @code{add@var{m}3} and @code{log@var{m}2}
6007 would be.
6009 This pattern is not allowed to @code{FAIL}.
6011 @cindex @code{log10@var{m}2} instruction pattern
6012 @item @samp{log10@var{m}2}
6013 Store the base-10 logarithm of operand 1 into operand 0.  Both operands
6014 have mode @var{m}, which is a scalar or vector floating-point mode.
6016 This pattern is not allowed to @code{FAIL}.
6018 @cindex @code{log2@var{m}2} instruction pattern
6019 @item @samp{log2@var{m}2}
6020 Store the base-2 logarithm of operand 1 into operand 0.  Both operands
6021 have mode @var{m}, which is a scalar or vector floating-point mode.
6023 This pattern is not allowed to @code{FAIL}.
6025 @cindex @code{logb@var{m}2} instruction pattern
6026 @item @samp{logb@var{m}2}
6027 Store the base-@code{FLT_RADIX} logarithm of operand 1 into operand 0.
6028 Both operands have mode @var{m}, which is a scalar or vector
6029 floating-point mode.
6031 This pattern is not allowed to @code{FAIL}.
6033 @cindex @code{signbit@var{m}2} instruction pattern
6034 @item @samp{signbit@var{m}2}
6035 Store the sign bit of floating-point operand 1 in operand 0.
6036 @var{m} is either a scalar or vector mode.  When it is a scalar,
6037 operand 1 has mode @var{m} but operand 0 must have mode @code{SImode}.
6038 When @var{m} is a vector, operand 1 has the mode @var{m}.
6039 operand 0's mode should be an vector integer mode which has
6040 the same number of elements and the same size as mode @var{m}.
6042 This pattern is not allowed to @code{FAIL}.
6044 @cindex @code{significand@var{m}2} instruction pattern
6045 @item @samp{significand@var{m}2}
6046 Store the significand of floating-point operand 1 in operand 0.
6047 Both operands have mode @var{m}, which is a scalar or vector
6048 floating-point mode.
6050 This pattern is not allowed to @code{FAIL}.
6052 @cindex @code{pow@var{m}3} instruction pattern
6053 @item @samp{pow@var{m}3}
6054 Store the value of operand 1 raised to the exponent operand 2
6055 into operand 0.  All operands have mode @var{m}, which is a scalar
6056 or vector floating-point mode.
6058 This pattern is not allowed to @code{FAIL}.
6060 @cindex @code{atan2@var{m}3} instruction pattern
6061 @item @samp{atan2@var{m}3}
6062 Store the arc tangent (inverse tangent) of operand 1 divided by
6063 operand 2 into operand 0, using the signs of both arguments to
6064 determine the quadrant of the result.  All operands have mode
6065 @var{m}, which is a scalar or vector floating-point mode.
6067 This pattern is not allowed to @code{FAIL}.
6069 @cindex @code{floor@var{m}2} instruction pattern
6070 @item @samp{floor@var{m}2}
6071 Store the largest integral value not greater than operand 1 in operand 0.
6072 Both operands have mode @var{m}, which is a scalar or vector
6073 floating-point mode.  If @option{-ffp-int-builtin-inexact} is in
6074 effect, the ``inexact'' exception may be raised for noninteger
6075 operands; otherwise, it may not.
6077 This pattern is not allowed to @code{FAIL}.
6079 @cindex @code{btrunc@var{m}2} instruction pattern
6080 @item @samp{btrunc@var{m}2}
6081 Round operand 1 to an integer, towards zero, and store the result in
6082 operand 0.  Both operands have mode @var{m}, which is a scalar or
6083 vector floating-point mode.  If @option{-ffp-int-builtin-inexact} is
6084 in effect, the ``inexact'' exception may be raised for noninteger
6085 operands; otherwise, it may not.
6087 This pattern is not allowed to @code{FAIL}.
6089 @cindex @code{round@var{m}2} instruction pattern
6090 @item @samp{round@var{m}2}
6091 Round operand 1 to the nearest integer, rounding away from zero in the
6092 event of a tie, and store the result in operand 0.  Both operands have
6093 mode @var{m}, which is a scalar or vector floating-point mode.  If
6094 @option{-ffp-int-builtin-inexact} is in effect, the ``inexact''
6095 exception may be raised for noninteger operands; otherwise, it may
6096 not.
6098 This pattern is not allowed to @code{FAIL}.
6100 @cindex @code{ceil@var{m}2} instruction pattern
6101 @item @samp{ceil@var{m}2}
6102 Store the smallest integral value not less than operand 1 in operand 0.
6103 Both operands have mode @var{m}, which is a scalar or vector
6104 floating-point mode.  If @option{-ffp-int-builtin-inexact} is in
6105 effect, the ``inexact'' exception may be raised for noninteger
6106 operands; otherwise, it may not.
6108 This pattern is not allowed to @code{FAIL}.
6110 @cindex @code{nearbyint@var{m}2} instruction pattern
6111 @item @samp{nearbyint@var{m}2}
6112 Round operand 1 to an integer, using the current rounding mode, and
6113 store the result in operand 0.  Do not raise an inexact condition when
6114 the result is different from the argument.  Both operands have mode
6115 @var{m}, which is a scalar or vector floating-point mode.
6117 This pattern is not allowed to @code{FAIL}.
6119 @cindex @code{rint@var{m}2} instruction pattern
6120 @item @samp{rint@var{m}2}
6121 Round operand 1 to an integer, using the current rounding mode, and
6122 store the result in operand 0.  Raise an inexact condition when
6123 the result is different from the argument.  Both operands have mode
6124 @var{m}, which is a scalar or vector floating-point mode.
6126 This pattern is not allowed to @code{FAIL}.
6128 @cindex @code{lrint@var{m}@var{n}2}
6129 @item @samp{lrint@var{m}@var{n}2}
6130 Convert operand 1 (valid for floating point mode @var{m}) to fixed
6131 point mode @var{n} as a signed number according to the current
6132 rounding mode and store in operand 0 (which has mode @var{n}).
6134 @cindex @code{lround@var{m}@var{n}2}
6135 @item @samp{lround@var{m}@var{n}2}
6136 Convert operand 1 (valid for floating point mode @var{m}) to fixed
6137 point mode @var{n} as a signed number rounding to nearest and away
6138 from zero and store in operand 0 (which has mode @var{n}).
6140 @cindex @code{lfloor@var{m}@var{n}2}
6141 @item @samp{lfloor@var{m}@var{n}2}
6142 Convert operand 1 (valid for floating point mode @var{m}) to fixed
6143 point mode @var{n} as a signed number rounding down and store in
6144 operand 0 (which has mode @var{n}).
6146 @cindex @code{lceil@var{m}@var{n}2}
6147 @item @samp{lceil@var{m}@var{n}2}
6148 Convert operand 1 (valid for floating point mode @var{m}) to fixed
6149 point mode @var{n} as a signed number rounding up and store in
6150 operand 0 (which has mode @var{n}).
6152 @cindex @code{copysign@var{m}3} instruction pattern
6153 @item @samp{copysign@var{m}3}
6154 Store a value with the magnitude of operand 1 and the sign of operand
6155 2 into operand 0.  All operands have mode @var{m}, which is a scalar or
6156 vector floating-point mode.
6158 This pattern is not allowed to @code{FAIL}.
6160 @cindex @code{xorsign@var{m}3} instruction pattern
6161 @item @samp{xorsign@var{m}3}
6162 Equivalent to @samp{op0 = op1 * copysign (1.0, op2)}: store a value with
6163 the magnitude of operand 1 and the sign of operand 2 into operand 0.
6164 All operands have mode @var{m}, which is a scalar or vector
6165 floating-point mode.
6167 This pattern is not allowed to @code{FAIL}.
6169 @cindex @code{issignaling@var{m}2} instruction pattern
6170 @item @samp{issignaling@var{m}2}
6171 Set operand 0 to 1 if operand 1 is a signaling NaN and to 0 otherwise.
6173 @cindex @code{cadd90@var{m}3} instruction pattern
6174 @item @samp{cadd90@var{m}3}
6175 Perform vector add and subtract on even/odd number pairs.  The operation being
6176 matched is semantically described as
6178 @smallexample
6179   for (int i = 0; i < N; i += 2)
6180     @{
6181       c[i] = a[i] - b[i+1];
6182       c[i+1] = a[i+1] + b[i];
6183     @}
6184 @end smallexample
6186 This operation is semantically equivalent to performing a vector addition of
6187 complex numbers in operand 1 with operand 2 rotated by 90 degrees around
6188 the argand plane and storing the result in operand 0.
6190 In GCC lane ordering the real part of the number must be in the even lanes with
6191 the imaginary part in the odd lanes.
6193 The operation is only supported for vector modes @var{m}.
6195 This pattern is not allowed to @code{FAIL}.
6197 @cindex @code{cadd270@var{m}3} instruction pattern
6198 @item @samp{cadd270@var{m}3}
6199 Perform vector add and subtract on even/odd number pairs.  The operation being
6200 matched is semantically described as
6202 @smallexample
6203   for (int i = 0; i < N; i += 2)
6204     @{
6205       c[i] = a[i] + b[i+1];
6206       c[i+1] = a[i+1] - b[i];
6207     @}
6208 @end smallexample
6210 This operation is semantically equivalent to performing a vector addition of
6211 complex numbers in operand 1 with operand 2 rotated by 270 degrees around
6212 the argand plane and storing the result in operand 0.
6214 In GCC lane ordering the real part of the number must be in the even lanes with
6215 the imaginary part in the odd lanes.
6217 The operation is only supported for vector modes @var{m}.
6219 This pattern is not allowed to @code{FAIL}.
6221 @cindex @code{cmla@var{m}4} instruction pattern
6222 @item @samp{cmla@var{m}4}
6223 Perform a vector multiply and accumulate that is semantically the same as
6224 a multiply and accumulate of complex numbers.
6226 @smallexample
6227   complex TYPE op0[N];
6228   complex TYPE op1[N];
6229   complex TYPE op2[N];
6230   complex TYPE op3[N];
6231   for (int i = 0; i < N; i += 1)
6232     @{
6233       op0[i] = op1[i] * op2[i] + op3[i];
6234     @}
6235 @end smallexample
6237 In GCC lane ordering the real part of the number must be in the even lanes with
6238 the imaginary part in the odd lanes.
6240 The operation is only supported for vector modes @var{m}.
6242 This pattern is not allowed to @code{FAIL}.
6244 @cindex @code{cmla_conj@var{m}4} instruction pattern
6245 @item @samp{cmla_conj@var{m}4}
6246 Perform a vector multiply by conjugate and accumulate that is semantically
6247 the same as a multiply and accumulate of complex numbers where the second
6248 multiply arguments is conjugated.
6250 @smallexample
6251   complex TYPE op0[N];
6252   complex TYPE op1[N];
6253   complex TYPE op2[N];
6254   complex TYPE op3[N];
6255   for (int i = 0; i < N; i += 1)
6256     @{
6257       op0[i] = op1[i] * conj (op2[i]) + op3[i];
6258     @}
6259 @end smallexample
6261 In GCC lane ordering the real part of the number must be in the even lanes with
6262 the imaginary part in the odd lanes.
6264 The operation is only supported for vector modes @var{m}.
6266 This pattern is not allowed to @code{FAIL}.
6268 @cindex @code{cmls@var{m}4} instruction pattern
6269 @item @samp{cmls@var{m}4}
6270 Perform a vector multiply and subtract that is semantically the same as
6271 a multiply and subtract of complex numbers.
6273 @smallexample
6274   complex TYPE op0[N];
6275   complex TYPE op1[N];
6276   complex TYPE op2[N];
6277   complex TYPE op3[N];
6278   for (int i = 0; i < N; i += 1)
6279     @{
6280       op0[i] = op1[i] * op2[i] - op3[i];
6281     @}
6282 @end smallexample
6284 In GCC lane ordering the real part of the number must be in the even lanes with
6285 the imaginary part in the odd lanes.
6287 The operation is only supported for vector modes @var{m}.
6289 This pattern is not allowed to @code{FAIL}.
6291 @cindex @code{cmls_conj@var{m}4} instruction pattern
6292 @item @samp{cmls_conj@var{m}4}
6293 Perform a vector multiply by conjugate and subtract that is semantically
6294 the same as a multiply and subtract of complex numbers where the second
6295 multiply arguments is conjugated.
6297 @smallexample
6298   complex TYPE op0[N];
6299   complex TYPE op1[N];
6300   complex TYPE op2[N];
6301   complex TYPE op3[N];
6302   for (int i = 0; i < N; i += 1)
6303     @{
6304       op0[i] = op1[i] * conj (op2[i]) - op3[i];
6305     @}
6306 @end smallexample
6308 In GCC lane ordering the real part of the number must be in the even lanes with
6309 the imaginary part in the odd lanes.
6311 The operation is only supported for vector modes @var{m}.
6313 This pattern is not allowed to @code{FAIL}.
6315 @cindex @code{cmul@var{m}4} instruction pattern
6316 @item @samp{cmul@var{m}4}
6317 Perform a vector multiply that is semantically the same as multiply of
6318 complex numbers.
6320 @smallexample
6321   complex TYPE op0[N];
6322   complex TYPE op1[N];
6323   complex TYPE op2[N];
6324   for (int i = 0; i < N; i += 1)
6325     @{
6326       op0[i] = op1[i] * op2[i];
6327     @}
6328 @end smallexample
6330 In GCC lane ordering the real part of the number must be in the even lanes with
6331 the imaginary part in the odd lanes.
6333 The operation is only supported for vector modes @var{m}.
6335 This pattern is not allowed to @code{FAIL}.
6337 @cindex @code{cmul_conj@var{m}4} instruction pattern
6338 @item @samp{cmul_conj@var{m}4}
6339 Perform a vector multiply by conjugate that is semantically the same as a
6340 multiply of complex numbers where the second multiply arguments is conjugated.
6342 @smallexample
6343   complex TYPE op0[N];
6344   complex TYPE op1[N];
6345   complex TYPE op2[N];
6346   for (int i = 0; i < N; i += 1)
6347     @{
6348       op0[i] = op1[i] * conj (op2[i]);
6349     @}
6350 @end smallexample
6352 In GCC lane ordering the real part of the number must be in the even lanes with
6353 the imaginary part in the odd lanes.
6355 The operation is only supported for vector modes @var{m}.
6357 This pattern is not allowed to @code{FAIL}.
6359 @cindex @code{ffs@var{m}2} instruction pattern
6360 @item @samp{ffs@var{m}2}
6361 Store into operand 0 one plus the index of the least significant 1-bit
6362 of operand 1.  If operand 1 is zero, store zero.
6364 @var{m} is either a scalar or vector integer mode.  When it is a scalar,
6365 operand 1 has mode @var{m} but operand 0 can have whatever scalar
6366 integer mode is suitable for the target.  The compiler will insert
6367 conversion instructions as necessary (typically to convert the result
6368 to the same width as @code{int}).  When @var{m} is a vector, both
6369 operands must have mode @var{m}.
6371 This pattern is not allowed to @code{FAIL}.
6373 @cindex @code{clrsb@var{m}2} instruction pattern
6374 @item @samp{clrsb@var{m}2}
6375 Count leading redundant sign bits.
6376 Store into operand 0 the number of redundant sign bits in operand 1, starting
6377 at the most significant bit position.
6378 A redundant sign bit is defined as any sign bit after the first. As such,
6379 this count will be one less than the count of leading sign bits.
6381 @var{m} is either a scalar or vector integer mode.  When it is a scalar,
6382 operand 1 has mode @var{m} but operand 0 can have whatever scalar
6383 integer mode is suitable for the target.  The compiler will insert
6384 conversion instructions as necessary (typically to convert the result
6385 to the same width as @code{int}).  When @var{m} is a vector, both
6386 operands must have mode @var{m}.
6388 This pattern is not allowed to @code{FAIL}.
6390 @cindex @code{clz@var{m}2} instruction pattern
6391 @item @samp{clz@var{m}2}
6392 Store into operand 0 the number of leading 0-bits in operand 1, starting
6393 at the most significant bit position.  If operand 1 is 0, the
6394 @code{CLZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}) macro defines if
6395 the result is undefined or has a useful value.
6397 @var{m} is either a scalar or vector integer mode.  When it is a scalar,
6398 operand 1 has mode @var{m} but operand 0 can have whatever scalar
6399 integer mode is suitable for the target.  The compiler will insert
6400 conversion instructions as necessary (typically to convert the result
6401 to the same width as @code{int}).  When @var{m} is a vector, both
6402 operands must have mode @var{m}.
6404 This pattern is not allowed to @code{FAIL}.
6406 @cindex @code{ctz@var{m}2} instruction pattern
6407 @item @samp{ctz@var{m}2}
6408 Store into operand 0 the number of trailing 0-bits in operand 1, starting
6409 at the least significant bit position.  If operand 1 is 0, the
6410 @code{CTZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}) macro defines if
6411 the result is undefined or has a useful value.
6413 @var{m} is either a scalar or vector integer mode.  When it is a scalar,
6414 operand 1 has mode @var{m} but operand 0 can have whatever scalar
6415 integer mode is suitable for the target.  The compiler will insert
6416 conversion instructions as necessary (typically to convert the result
6417 to the same width as @code{int}).  When @var{m} is a vector, both
6418 operands must have mode @var{m}.
6420 This pattern is not allowed to @code{FAIL}.
6422 @cindex @code{popcount@var{m}2} instruction pattern
6423 @item @samp{popcount@var{m}2}
6424 Store into operand 0 the number of 1-bits in operand 1.
6426 @var{m} is either a scalar or vector integer mode.  When it is a scalar,
6427 operand 1 has mode @var{m} but operand 0 can have whatever scalar
6428 integer mode is suitable for the target.  The compiler will insert
6429 conversion instructions as necessary (typically to convert the result
6430 to the same width as @code{int}).  When @var{m} is a vector, both
6431 operands must have mode @var{m}.
6433 This pattern is not allowed to @code{FAIL}.
6435 @cindex @code{parity@var{m}2} instruction pattern
6436 @item @samp{parity@var{m}2}
6437 Store into operand 0 the parity of operand 1, i.e.@: the number of 1-bits
6438 in operand 1 modulo 2.
6440 @var{m} is either a scalar or vector integer mode.  When it is a scalar,
6441 operand 1 has mode @var{m} but operand 0 can have whatever scalar
6442 integer mode is suitable for the target.  The compiler will insert
6443 conversion instructions as necessary (typically to convert the result
6444 to the same width as @code{int}).  When @var{m} is a vector, both
6445 operands must have mode @var{m}.
6447 This pattern is not allowed to @code{FAIL}.
6449 @cindex @code{one_cmpl@var{m}2} instruction pattern
6450 @item @samp{one_cmpl@var{m}2}
6451 Store the bitwise-complement of operand 1 into operand 0.
6453 @cindex @code{cpymem@var{m}} instruction pattern
6454 @item @samp{cpymem@var{m}}
6455 Block copy instruction.  The destination and source blocks of memory
6456 are the first two operands, and both are @code{mem:BLK}s with an
6457 address in mode @code{Pmode}.
6459 The number of bytes to copy is the third operand, in mode @var{m}.
6460 Usually, you specify @code{Pmode} for @var{m}.  However, if you can
6461 generate better code knowing the range of valid lengths is smaller than
6462 those representable in a full Pmode pointer, you should provide
6463 a pattern with a
6464 mode corresponding to the range of values you can handle efficiently
6465 (e.g., @code{QImode} for values in the range 0--127; note we avoid numbers
6466 that appear negative) and also a pattern with @code{Pmode}.
6468 The fourth operand is the known shared alignment of the source and
6469 destination, in the form of a @code{const_int} rtx.  Thus, if the
6470 compiler knows that both source and destination are word-aligned,
6471 it may provide the value 4 for this operand.
6473 Optional operands 5 and 6 specify expected alignment and size of block
6474 respectively.  The expected alignment differs from alignment in operand 4
6475 in a way that the blocks are not required to be aligned according to it in
6476 all cases. This expected alignment is also in bytes, just like operand 4.
6477 Expected size, when unknown, is set to @code{(const_int -1)}.
6479 Descriptions of multiple @code{cpymem@var{m}} patterns can only be
6480 beneficial if the patterns for smaller modes have fewer restrictions
6481 on their first, second and fourth operands.  Note that the mode @var{m}
6482 in @code{cpymem@var{m}} does not impose any restriction on the mode of
6483 individually copied data units in the block.
6485 The @code{cpymem@var{m}} patterns need not give special consideration
6486 to the possibility that the source and destination strings might
6487 overlap. These patterns are used to do inline expansion of
6488 @code{__builtin_memcpy}.
6490 @cindex @code{movmem@var{m}} instruction pattern
6491 @item @samp{movmem@var{m}}
6492 Block move instruction.  The destination and source blocks of memory
6493 are the first two operands, and both are @code{mem:BLK}s with an
6494 address in mode @code{Pmode}.
6496 The number of bytes to copy is the third operand, in mode @var{m}.
6497 Usually, you specify @code{Pmode} for @var{m}.  However, if you can
6498 generate better code knowing the range of valid lengths is smaller than
6499 those representable in a full Pmode pointer, you should provide
6500 a pattern with a
6501 mode corresponding to the range of values you can handle efficiently
6502 (e.g., @code{QImode} for values in the range 0--127; note we avoid numbers
6503 that appear negative) and also a pattern with @code{Pmode}.
6505 The fourth operand is the known shared alignment of the source and
6506 destination, in the form of a @code{const_int} rtx.  Thus, if the
6507 compiler knows that both source and destination are word-aligned,
6508 it may provide the value 4 for this operand.
6510 Optional operands 5 and 6 specify expected alignment and size of block
6511 respectively.  The expected alignment differs from alignment in operand 4
6512 in a way that the blocks are not required to be aligned according to it in
6513 all cases. This expected alignment is also in bytes, just like operand 4.
6514 Expected size, when unknown, is set to @code{(const_int -1)}.
6516 Descriptions of multiple @code{movmem@var{m}} patterns can only be
6517 beneficial if the patterns for smaller modes have fewer restrictions
6518 on their first, second and fourth operands.  Note that the mode @var{m}
6519 in @code{movmem@var{m}} does not impose any restriction on the mode of
6520 individually copied data units in the block.
6522 The @code{movmem@var{m}} patterns must correctly handle the case where
6523 the source and destination strings overlap. These patterns are used to
6524 do inline expansion of @code{__builtin_memmove}.
6526 @cindex @code{movstr} instruction pattern
6527 @item @samp{movstr}
6528 String copy instruction, with @code{stpcpy} semantics.  Operand 0 is
6529 an output operand in mode @code{Pmode}.  The addresses of the
6530 destination and source strings are operands 1 and 2, and both are
6531 @code{mem:BLK}s with addresses in mode @code{Pmode}.  The execution of
6532 the expansion of this pattern should store in operand 0 the address in
6533 which the @code{NUL} terminator was stored in the destination string.
6535 This pattern has also several optional operands that are same as in
6536 @code{setmem}.
6538 @cindex @code{setmem@var{m}} instruction pattern
6539 @item @samp{setmem@var{m}}
6540 Block set instruction.  The destination string is the first operand,
6541 given as a @code{mem:BLK} whose address is in mode @code{Pmode}.  The
6542 number of bytes to set is the second operand, in mode @var{m}.  The value to
6543 initialize the memory with is the third operand. Targets that only support the
6544 clearing of memory should reject any value that is not the constant 0.  See
6545 @samp{cpymem@var{m}} for a discussion of the choice of mode.
6547 The fourth operand is the known alignment of the destination, in the form
6548 of a @code{const_int} rtx.  Thus, if the compiler knows that the
6549 destination is word-aligned, it may provide the value 4 for this
6550 operand.
6552 Optional operands 5 and 6 specify expected alignment and size of block
6553 respectively.  The expected alignment differs from alignment in operand 4
6554 in a way that the blocks are not required to be aligned according to it in
6555 all cases. This expected alignment is also in bytes, just like operand 4.
6556 Expected size, when unknown, is set to @code{(const_int -1)}.
6557 Operand 7 is the minimal size of the block and operand 8 is the
6558 maximal size of the block (NULL if it cannot be represented as CONST_INT).
6559 Operand 9 is the probable maximal size (i.e.@: we cannot rely on it for
6560 correctness, but it can be used for choosing proper code sequence for a
6561 given size).
6563 The use for multiple @code{setmem@var{m}} is as for @code{cpymem@var{m}}.
6565 @cindex @code{cmpstrn@var{m}} instruction pattern
6566 @item @samp{cmpstrn@var{m}}
6567 String compare instruction, with five operands.  Operand 0 is the output;
6568 it has mode @var{m}.  The remaining four operands are like the operands
6569 of @samp{cpymem@var{m}}.  The two memory blocks specified are compared
6570 byte by byte in lexicographic order starting at the beginning of each
6571 string.  The instruction is not allowed to prefetch more than one byte
6572 at a time since either string may end in the first byte and reading past
6573 that may access an invalid page or segment and cause a fault.  The
6574 comparison terminates early if the fetched bytes are different or if
6575 they are equal to zero.  The effect of the instruction is to store a
6576 value in operand 0 whose sign indicates the result of the comparison.
6578 @cindex @code{cmpstr@var{m}} instruction pattern
6579 @item @samp{cmpstr@var{m}}
6580 String compare instruction, without known maximum length.  Operand 0 is the
6581 output; it has mode @var{m}.  The second and third operand are the blocks of
6582 memory to be compared; both are @code{mem:BLK} with an address in mode
6583 @code{Pmode}.
6585 The fourth operand is the known shared alignment of the source and
6586 destination, in the form of a @code{const_int} rtx.  Thus, if the
6587 compiler knows that both source and destination are word-aligned,
6588 it may provide the value 4 for this operand.
6590 The two memory blocks specified are compared byte by byte in lexicographic
6591 order starting at the beginning of each string.  The instruction is not allowed
6592 to prefetch more than one byte at a time since either string may end in the
6593 first byte and reading past that may access an invalid page or segment and
6594 cause a fault.  The comparison will terminate when the fetched bytes
6595 are different or if they are equal to zero.  The effect of the
6596 instruction is to store a value in operand 0 whose sign indicates the
6597 result of the comparison.
6599 @cindex @code{cmpmem@var{m}} instruction pattern
6600 @item @samp{cmpmem@var{m}}
6601 Block compare instruction, with five operands like the operands
6602 of @samp{cmpstr@var{m}}.  The two memory blocks specified are compared
6603 byte by byte in lexicographic order starting at the beginning of each
6604 block.  Unlike @samp{cmpstr@var{m}} the instruction can prefetch
6605 any bytes in the two memory blocks.  Also unlike @samp{cmpstr@var{m}}
6606 the comparison will not stop if both bytes are zero.  The effect of
6607 the instruction is to store a value in operand 0 whose sign indicates
6608 the result of the comparison.
6610 @cindex @code{strlen@var{m}} instruction pattern
6611 @item @samp{strlen@var{m}}
6612 Compute the length of a string, with three operands.
6613 Operand 0 is the result (of mode @var{m}), operand 1 is
6614 a @code{mem} referring to the first character of the string,
6615 operand 2 is the character to search for (normally zero),
6616 and operand 3 is a constant describing the known alignment
6617 of the beginning of the string.
6619 @cindex @code{rawmemchr@var{m}} instruction pattern
6620 @item @samp{rawmemchr@var{m}}
6621 Scan memory referred to by operand 1 for the first occurrence of operand 2.
6622 Operand 1 is a @code{mem} and operand 2 a @code{const_int} of mode @var{m}.
6623 Operand 0 is the result, i.e., a pointer to the first occurrence of operand 2
6624 in the memory block given by operand 1.
6626 @cindex @code{float@var{m}@var{n}2} instruction pattern
6627 @item @samp{float@var{m}@var{n}2}
6628 Convert signed integer operand 1 (valid for fixed point mode @var{m}) to
6629 floating point mode @var{n} and store in operand 0 (which has mode
6630 @var{n}).
6632 @cindex @code{floatuns@var{m}@var{n}2} instruction pattern
6633 @item @samp{floatuns@var{m}@var{n}2}
6634 Convert unsigned integer operand 1 (valid for fixed point mode @var{m})
6635 to floating point mode @var{n} and store in operand 0 (which has mode
6636 @var{n}).
6638 @cindex @code{fix@var{m}@var{n}2} instruction pattern
6639 @item @samp{fix@var{m}@var{n}2}
6640 Convert operand 1 (valid for floating point mode @var{m}) to fixed
6641 point mode @var{n} as a signed number and store in operand 0 (which
6642 has mode @var{n}).  This instruction's result is defined only when
6643 the value of operand 1 is an integer.
6645 If the machine description defines this pattern, it also needs to
6646 define the @code{ftrunc} pattern.
6648 @cindex @code{fixuns@var{m}@var{n}2} instruction pattern
6649 @item @samp{fixuns@var{m}@var{n}2}
6650 Convert operand 1 (valid for floating point mode @var{m}) to fixed
6651 point mode @var{n} as an unsigned number and store in operand 0 (which
6652 has mode @var{n}).  This instruction's result is defined only when the
6653 value of operand 1 is an integer.
6655 @cindex @code{ftrunc@var{m}2} instruction pattern
6656 @item @samp{ftrunc@var{m}2}
6657 Convert operand 1 (valid for floating point mode @var{m}) to an
6658 integer value, still represented in floating point mode @var{m}, and
6659 store it in operand 0 (valid for floating point mode @var{m}).
6661 @cindex @code{fix_trunc@var{m}@var{n}2} instruction pattern
6662 @item @samp{fix_trunc@var{m}@var{n}2}
6663 Like @samp{fix@var{m}@var{n}2} but works for any floating point value
6664 of mode @var{m} by converting the value to an integer.
6666 @cindex @code{fixuns_trunc@var{m}@var{n}2} instruction pattern
6667 @item @samp{fixuns_trunc@var{m}@var{n}2}
6668 Like @samp{fixuns@var{m}@var{n}2} but works for any floating point
6669 value of mode @var{m} by converting the value to an integer.
6671 @cindex @code{trunc@var{m}@var{n}2} instruction pattern
6672 @item @samp{trunc@var{m}@var{n}2}
6673 Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and
6674 store in operand 0 (which has mode @var{n}).  Both modes must be fixed
6675 point or both floating point.
6677 @cindex @code{extend@var{m}@var{n}2} instruction pattern
6678 @item @samp{extend@var{m}@var{n}2}
6679 Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
6680 store in operand 0 (which has mode @var{n}).  Both modes must be fixed
6681 point or both floating point.
6683 @cindex @code{zero_extend@var{m}@var{n}2} instruction pattern
6684 @item @samp{zero_extend@var{m}@var{n}2}
6685 Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
6686 store in operand 0 (which has mode @var{n}).  Both modes must be fixed
6687 point.
6689 @cindex @code{fract@var{m}@var{n}2} instruction pattern
6690 @item @samp{fract@var{m}@var{n}2}
6691 Convert operand 1 of mode @var{m} to mode @var{n} and store in
6692 operand 0 (which has mode @var{n}).  Mode @var{m} and mode @var{n}
6693 could be fixed-point to fixed-point, signed integer to fixed-point,
6694 fixed-point to signed integer, floating-point to fixed-point,
6695 or fixed-point to floating-point.
6696 When overflows or underflows happen, the results are undefined.
6698 @cindex @code{satfract@var{m}@var{n}2} instruction pattern
6699 @item @samp{satfract@var{m}@var{n}2}
6700 Convert operand 1 of mode @var{m} to mode @var{n} and store in
6701 operand 0 (which has mode @var{n}).  Mode @var{m} and mode @var{n}
6702 could be fixed-point to fixed-point, signed integer to fixed-point,
6703 or floating-point to fixed-point.
6704 When overflows or underflows happen, the instruction saturates the
6705 results to the maximum or the minimum.
6707 @cindex @code{fractuns@var{m}@var{n}2} instruction pattern
6708 @item @samp{fractuns@var{m}@var{n}2}
6709 Convert operand 1 of mode @var{m} to mode @var{n} and store in
6710 operand 0 (which has mode @var{n}).  Mode @var{m} and mode @var{n}
6711 could be unsigned integer to fixed-point, or
6712 fixed-point to unsigned integer.
6713 When overflows or underflows happen, the results are undefined.
6715 @cindex @code{satfractuns@var{m}@var{n}2} instruction pattern
6716 @item @samp{satfractuns@var{m}@var{n}2}
6717 Convert unsigned integer operand 1 of mode @var{m} to fixed-point mode
6718 @var{n} and store in operand 0 (which has mode @var{n}).
6719 When overflows or underflows happen, the instruction saturates the
6720 results to the maximum or the minimum.
6722 @cindex @code{extv@var{m}} instruction pattern
6723 @item @samp{extv@var{m}}
6724 Extract a bit-field from register operand 1, sign-extend it, and store
6725 it in operand 0.  Operand 2 specifies the width of the field in bits
6726 and operand 3 the starting bit, which counts from the most significant
6727 bit if @samp{BITS_BIG_ENDIAN} is true and from the least significant bit
6728 otherwise.
6730 Operands 0 and 1 both have mode @var{m}.  Operands 2 and 3 have a
6731 target-specific mode.
6733 @cindex @code{extvmisalign@var{m}} instruction pattern
6734 @item @samp{extvmisalign@var{m}}
6735 Extract a bit-field from memory operand 1, sign extend it, and store
6736 it in operand 0.  Operand 2 specifies the width in bits and operand 3
6737 the starting bit.  The starting bit is always somewhere in the first byte of
6738 operand 1; it counts from the most significant bit if @samp{BITS_BIG_ENDIAN}
6739 is true and from the least significant bit otherwise.
6741 Operand 0 has mode @var{m} while operand 1 has @code{BLK} mode.
6742 Operands 2 and 3 have a target-specific mode.
6744 The instruction must not read beyond the last byte of the bit-field.
6746 @cindex @code{extzv@var{m}} instruction pattern
6747 @item @samp{extzv@var{m}}
6748 Like @samp{extv@var{m}} except that the bit-field value is zero-extended.
6750 @cindex @code{extzvmisalign@var{m}} instruction pattern
6751 @item @samp{extzvmisalign@var{m}}
6752 Like @samp{extvmisalign@var{m}} except that the bit-field value is
6753 zero-extended.
6755 @cindex @code{insv@var{m}} instruction pattern
6756 @item @samp{insv@var{m}}
6757 Insert operand 3 into a bit-field of register operand 0.  Operand 1
6758 specifies the width of the field in bits and operand 2 the starting bit,
6759 which counts from the most significant bit if @samp{BITS_BIG_ENDIAN}
6760 is true and from the least significant bit otherwise.
6762 Operands 0 and 3 both have mode @var{m}.  Operands 1 and 2 have a
6763 target-specific mode.
6765 @cindex @code{insvmisalign@var{m}} instruction pattern
6766 @item @samp{insvmisalign@var{m}}
6767 Insert operand 3 into a bit-field of memory operand 0.  Operand 1
6768 specifies the width of the field in bits and operand 2 the starting bit.
6769 The starting bit is always somewhere in the first byte of operand 0;
6770 it counts from the most significant bit if @samp{BITS_BIG_ENDIAN}
6771 is true and from the least significant bit otherwise.
6773 Operand 3 has mode @var{m} while operand 0 has @code{BLK} mode.
6774 Operands 1 and 2 have a target-specific mode.
6776 The instruction must not read or write beyond the last byte of the bit-field.
6778 @cindex @code{extv} instruction pattern
6779 @item @samp{extv}
6780 Extract a bit-field from operand 1 (a register or memory operand), where
6781 operand 2 specifies the width in bits and operand 3 the starting bit,
6782 and store it in operand 0.  Operand 0 must have mode @code{word_mode}.
6783 Operand 1 may have mode @code{byte_mode} or @code{word_mode}; often
6784 @code{word_mode} is allowed only for registers.  Operands 2 and 3 must
6785 be valid for @code{word_mode}.
6787 The RTL generation pass generates this instruction only with constants
6788 for operands 2 and 3 and the constant is never zero for operand 2.
6790 The bit-field value is sign-extended to a full word integer
6791 before it is stored in operand 0.
6793 This pattern is deprecated; please use @samp{extv@var{m}} and
6794 @code{extvmisalign@var{m}} instead.
6796 @cindex @code{extzv} instruction pattern
6797 @item @samp{extzv}
6798 Like @samp{extv} except that the bit-field value is zero-extended.
6800 This pattern is deprecated; please use @samp{extzv@var{m}} and
6801 @code{extzvmisalign@var{m}} instead.
6803 @cindex @code{insv} instruction pattern
6804 @item @samp{insv}
6805 Store operand 3 (which must be valid for @code{word_mode}) into a
6806 bit-field in operand 0, where operand 1 specifies the width in bits and
6807 operand 2 the starting bit.  Operand 0 may have mode @code{byte_mode} or
6808 @code{word_mode}; often @code{word_mode} is allowed only for registers.
6809 Operands 1 and 2 must be valid for @code{word_mode}.
6811 The RTL generation pass generates this instruction only with constants
6812 for operands 1 and 2 and the constant is never zero for operand 1.
6814 This pattern is deprecated; please use @samp{insv@var{m}} and
6815 @code{insvmisalign@var{m}} instead.
6817 @cindex @code{mov@var{mode}cc} instruction pattern
6818 @item @samp{mov@var{mode}cc}
6819 Conditionally move operand 2 or operand 3 into operand 0 according to the
6820 comparison in operand 1.  If the comparison is true, operand 2 is moved
6821 into operand 0, otherwise operand 3 is moved.
6823 The mode of the operands being compared need not be the same as the operands
6824 being moved.  Some machines, sparc64 for example, have instructions that
6825 conditionally move an integer value based on the floating point condition
6826 codes and vice versa.
6828 If the machine does not have conditional move instructions, do not
6829 define these patterns.
6831 @cindex @code{add@var{mode}cc} instruction pattern
6832 @item @samp{add@var{mode}cc}
6833 Similar to @samp{mov@var{mode}cc} but for conditional addition.  Conditionally
6834 move operand 2 or (operands 2 + operand 3) into operand 0 according to the
6835 comparison in operand 1.  If the comparison is false, operand 2 is moved into
6836 operand 0, otherwise (operand 2 + operand 3) is moved.
6838 @cindex @code{cond_add@var{mode}} instruction pattern
6839 @cindex @code{cond_sub@var{mode}} instruction pattern
6840 @cindex @code{cond_mul@var{mode}} instruction pattern
6841 @cindex @code{cond_div@var{mode}} instruction pattern
6842 @cindex @code{cond_udiv@var{mode}} instruction pattern
6843 @cindex @code{cond_mod@var{mode}} instruction pattern
6844 @cindex @code{cond_umod@var{mode}} instruction pattern
6845 @cindex @code{cond_and@var{mode}} instruction pattern
6846 @cindex @code{cond_ior@var{mode}} instruction pattern
6847 @cindex @code{cond_xor@var{mode}} instruction pattern
6848 @cindex @code{cond_smin@var{mode}} instruction pattern
6849 @cindex @code{cond_smax@var{mode}} instruction pattern
6850 @cindex @code{cond_umin@var{mode}} instruction pattern
6851 @cindex @code{cond_umax@var{mode}} instruction pattern
6852 @cindex @code{cond_fmin@var{mode}} instruction pattern
6853 @cindex @code{cond_fmax@var{mode}} instruction pattern
6854 @cindex @code{cond_ashl@var{mode}} instruction pattern
6855 @cindex @code{cond_ashr@var{mode}} instruction pattern
6856 @cindex @code{cond_lshr@var{mode}} instruction pattern
6857 @item @samp{cond_add@var{mode}}
6858 @itemx @samp{cond_sub@var{mode}}
6859 @itemx @samp{cond_mul@var{mode}}
6860 @itemx @samp{cond_div@var{mode}}
6861 @itemx @samp{cond_udiv@var{mode}}
6862 @itemx @samp{cond_mod@var{mode}}
6863 @itemx @samp{cond_umod@var{mode}}
6864 @itemx @samp{cond_and@var{mode}}
6865 @itemx @samp{cond_ior@var{mode}}
6866 @itemx @samp{cond_xor@var{mode}}
6867 @itemx @samp{cond_smin@var{mode}}
6868 @itemx @samp{cond_smax@var{mode}}
6869 @itemx @samp{cond_umin@var{mode}}
6870 @itemx @samp{cond_umax@var{mode}}
6871 @itemx @samp{cond_fmin@var{mode}}
6872 @itemx @samp{cond_fmax@var{mode}}
6873 @itemx @samp{cond_ashl@var{mode}}
6874 @itemx @samp{cond_ashr@var{mode}}
6875 @itemx @samp{cond_lshr@var{mode}}
6876 When operand 1 is true, perform an operation on operands 2 and 3 and
6877 store the result in operand 0, otherwise store operand 4 in operand 0.
6878 The operation works elementwise if the operands are vectors.
6880 The scalar case is equivalent to:
6882 @smallexample
6883 op0 = op1 ? op2 @var{op} op3 : op4;
6884 @end smallexample
6886 while the vector case is equivalent to:
6888 @smallexample
6889 for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
6890   op0[i] = op1[i] ? op2[i] @var{op} op3[i] : op4[i];
6891 @end smallexample
6893 where, for example, @var{op} is @code{+} for @samp{cond_add@var{mode}}.
6895 When defined for floating-point modes, the contents of @samp{op3[i]}
6896 are not interpreted if @samp{op1[i]} is false, just like they would not
6897 be in a normal C @samp{?:} condition.
6899 Operands 0, 2, 3 and 4 all have mode @var{m}.  Operand 1 is a scalar
6900 integer if @var{m} is scalar, otherwise it has the mode returned by
6901 @code{TARGET_VECTORIZE_GET_MASK_MODE}.
6903 @samp{cond_@var{op}@var{mode}} generally corresponds to a conditional
6904 form of @samp{@var{op}@var{mode}3}.  As an exception, the vector forms
6905 of shifts correspond to patterns like @code{vashl@var{mode}3} rather
6906 than patterns like @code{ashl@var{mode}3}.
6908 @cindex @code{cond_fma@var{mode}} instruction pattern
6909 @cindex @code{cond_fms@var{mode}} instruction pattern
6910 @cindex @code{cond_fnma@var{mode}} instruction pattern
6911 @cindex @code{cond_fnms@var{mode}} instruction pattern
6912 @item @samp{cond_fma@var{mode}}
6913 @itemx @samp{cond_fms@var{mode}}
6914 @itemx @samp{cond_fnma@var{mode}}
6915 @itemx @samp{cond_fnms@var{mode}}
6916 Like @samp{cond_add@var{m}}, except that the conditional operation
6917 takes 3 operands rather than two.  For example, the vector form of
6918 @samp{cond_fma@var{mode}} is equivalent to:
6920 @smallexample
6921 for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
6922   op0[i] = op1[i] ? fma (op2[i], op3[i], op4[i]) : op5[i];
6923 @end smallexample
6925 @cindex @code{neg@var{mode}cc} instruction pattern
6926 @item @samp{neg@var{mode}cc}
6927 Similar to @samp{mov@var{mode}cc} but for conditional negation.  Conditionally
6928 move the negation of operand 2 or the unchanged operand 3 into operand 0
6929 according to the comparison in operand 1.  If the comparison is true, the negation
6930 of operand 2 is moved into operand 0, otherwise operand 3 is moved.
6932 @cindex @code{not@var{mode}cc} instruction pattern
6933 @item @samp{not@var{mode}cc}
6934 Similar to @samp{neg@var{mode}cc} but for conditional complement.
6935 Conditionally move the bitwise complement of operand 2 or the unchanged
6936 operand 3 into operand 0 according to the comparison in operand 1.
6937 If the comparison is true, the complement of operand 2 is moved into
6938 operand 0, otherwise operand 3 is moved.
6940 @cindex @code{cstore@var{mode}4} instruction pattern
6941 @item @samp{cstore@var{mode}4}
6942 Store zero or nonzero in operand 0 according to whether a comparison
6943 is true.  Operand 1 is a comparison operator.  Operand 2 and operand 3
6944 are the first and second operand of the comparison, respectively.
6945 You specify the mode that operand 0 must have when you write the
6946 @code{match_operand} expression.  The compiler automatically sees which
6947 mode you have used and supplies an operand of that mode.
6949 The value stored for a true condition must have 1 as its low bit, or
6950 else must be negative.  Otherwise the instruction is not suitable and
6951 you should omit it from the machine description.  You describe to the
6952 compiler exactly which value is stored by defining the macro
6953 @code{STORE_FLAG_VALUE} (@pxref{Misc}).  If a description cannot be
6954 found that can be used for all the possible comparison operators, you
6955 should pick one and use a @code{define_expand} to map all results
6956 onto the one you chose.
6958 These operations may @code{FAIL}, but should do so only in relatively
6959 uncommon cases; if they would @code{FAIL} for common cases involving
6960 integer comparisons, it is best to restrict the predicates to not
6961 allow these operands.  Likewise if a given comparison operator will
6962 always fail, independent of the operands (for floating-point modes, the
6963 @code{ordered_comparison_operator} predicate is often useful in this case).
6965 If this pattern is omitted, the compiler will generate a conditional
6966 branch---for example, it may copy a constant one to the target and branching
6967 around an assignment of zero to the target---or a libcall.  If the predicate
6968 for operand 1 only rejects some operators, it will also try reordering the
6969 operands and/or inverting the result value (e.g.@: by an exclusive OR).
6970 These possibilities could be cheaper or equivalent to the instructions
6971 used for the @samp{cstore@var{mode}4} pattern followed by those required
6972 to convert a positive result from @code{STORE_FLAG_VALUE} to 1; in this
6973 case, you can and should make operand 1's predicate reject some operators
6974 in the @samp{cstore@var{mode}4} pattern, or remove the pattern altogether
6975 from the machine description.
6977 @cindex @code{tbranch_@var{op}@var{mode}3} instruction pattern
6978 @item @samp{tbranch_@var{op}@var{mode}3}
6979 Conditional branch instruction combined with a bit test-and-compare
6980 instruction. Operand 0 is the operand of the comparison.  Operand 1 is the bit
6981 position of Operand 1 to test.  Operand 3 is the @code{code_label} to jump to.
6982 @var{op} is one of @var{eq} or @var{ne}.
6984 @cindex @code{cbranch@var{mode}4} instruction pattern
6985 @item @samp{cbranch@var{mode}4}
6986 Conditional branch instruction combined with a compare instruction.
6987 Operand 0 is a comparison operator.  Operand 1 and operand 2 are the
6988 first and second operands of the comparison, respectively.  Operand 3
6989 is the @code{code_label} to jump to.
6991 @cindex @code{jump} instruction pattern
6992 @item @samp{jump}
6993 A jump inside a function; an unconditional branch.  Operand 0 is the
6994 @code{code_label} to jump to.  This pattern name is mandatory on all
6995 machines.
6997 @cindex @code{call} instruction pattern
6998 @item @samp{call}
6999 Subroutine call instruction returning no value.  Operand 0 is the
7000 function to call; operand 1 is the number of bytes of arguments pushed
7001 as a @code{const_int}.  Operand 2 is the result of calling the target
7002 hook @code{TARGET_FUNCTION_ARG} with the second argument @code{arg}
7003 yielding true for @code{arg.end_marker_p ()}, in a call after all
7004 parameters have been passed to that hook.  By default this is the first
7005 register beyond those used for arguments in the call, or @code{NULL} if
7006 all the argument-registers are used in the call.
7008 On most machines, operand 2 is not actually stored into the RTL
7009 pattern.  It is supplied for the sake of some RISC machines which need
7010 to put this information into the assembler code; they can put it in
7011 the RTL instead of operand 1.
7013 Operand 0 should be a @code{mem} RTX whose address is the address of the
7014 function.  Note, however, that this address can be a @code{symbol_ref}
7015 expression even if it would not be a legitimate memory address on the
7016 target machine.  If it is also not a valid argument for a call
7017 instruction, the pattern for this operation should be a
7018 @code{define_expand} (@pxref{Expander Definitions}) that places the
7019 address into a register and uses that register in the call instruction.
7021 @cindex @code{call_value} instruction pattern
7022 @item @samp{call_value}
7023 Subroutine call instruction returning a value.  Operand 0 is the hard
7024 register in which the value is returned.  There are three more
7025 operands, the same as the three operands of the @samp{call}
7026 instruction (but with numbers increased by one).
7028 Subroutines that return @code{BLKmode} objects use the @samp{call}
7029 insn.
7031 @cindex @code{call_pop} instruction pattern
7032 @cindex @code{call_value_pop} instruction pattern
7033 @item @samp{call_pop}, @samp{call_value_pop}
7034 Similar to @samp{call} and @samp{call_value}, except used if defined and
7035 if @code{RETURN_POPS_ARGS} is nonzero.  They should emit a @code{parallel}
7036 that contains both the function call and a @code{set} to indicate the
7037 adjustment made to the frame pointer.
7039 For machines where @code{RETURN_POPS_ARGS} can be nonzero, the use of these
7040 patterns increases the number of functions for which the frame pointer
7041 can be eliminated, if desired.
7043 @cindex @code{untyped_call} instruction pattern
7044 @item @samp{untyped_call}
7045 Subroutine call instruction returning a value of any type.  Operand 0 is
7046 the function to call; operand 1 is a memory location where the result of
7047 calling the function is to be stored; operand 2 is a @code{parallel}
7048 expression where each element is a @code{set} expression that indicates
7049 the saving of a function return value into the result block.
7051 This instruction pattern should be defined to support
7052 @code{__builtin_apply} on machines where special instructions are needed
7053 to call a subroutine with arbitrary arguments or to save the value
7054 returned.  This instruction pattern is required on machines that have
7055 multiple registers that can hold a return value
7056 (i.e.@: @code{FUNCTION_VALUE_REGNO_P} is true for more than one register).
7058 @cindex @code{return} instruction pattern
7059 @item @samp{return}
7060 Subroutine return instruction.  This instruction pattern name should be
7061 defined only if a single instruction can do all the work of returning
7062 from a function.
7064 Like the @samp{mov@var{m}} patterns, this pattern is also used after the
7065 RTL generation phase.  In this case it is to support machines where
7066 multiple instructions are usually needed to return from a function, but
7067 some class of functions only requires one instruction to implement a
7068 return.  Normally, the applicable functions are those which do not need
7069 to save any registers or allocate stack space.
7071 It is valid for this pattern to expand to an instruction using
7072 @code{simple_return} if no epilogue is required.
7074 @cindex @code{simple_return} instruction pattern
7075 @item @samp{simple_return}
7076 Subroutine return instruction.  This instruction pattern name should be
7077 defined only if a single instruction can do all the work of returning
7078 from a function on a path where no epilogue is required.  This pattern
7079 is very similar to the @code{return} instruction pattern, but it is emitted
7080 only by the shrink-wrapping optimization on paths where the function
7081 prologue has not been executed, and a function return should occur without
7082 any of the effects of the epilogue.  Additional uses may be introduced on
7083 paths where both the prologue and the epilogue have executed.
7085 @findex reload_completed
7086 @findex leaf_function_p
7087 For such machines, the condition specified in this pattern should only
7088 be true when @code{reload_completed} is nonzero and the function's
7089 epilogue would only be a single instruction.  For machines with register
7090 windows, the routine @code{leaf_function_p} may be used to determine if
7091 a register window push is required.
7093 Machines that have conditional return instructions should define patterns
7094 such as
7096 @smallexample
7097 (define_insn ""
7098   [(set (pc)
7099         (if_then_else (match_operator
7100                          0 "comparison_operator"
7101                          [(reg:CC CC_REG) (const_int 0)])
7102                       (return)
7103                       (pc)))]
7104   "@var{condition}"
7105   "@dots{}")
7106 @end smallexample
7108 where @var{condition} would normally be the same condition specified on the
7109 named @samp{return} pattern.
7111 @cindex @code{untyped_return} instruction pattern
7112 @item @samp{untyped_return}
7113 Untyped subroutine return instruction.  This instruction pattern should
7114 be defined to support @code{__builtin_return} on machines where special
7115 instructions are needed to return a value of any type.
7117 Operand 0 is a memory location where the result of calling a function
7118 with @code{__builtin_apply} is stored; operand 1 is a @code{parallel}
7119 expression where each element is a @code{set} expression that indicates
7120 the restoring of a function return value from the result block.
7122 @cindex @code{nop} instruction pattern
7123 @item @samp{nop}
7124 No-op instruction.  This instruction pattern name should always be defined
7125 to output a no-op in assembler code.  @code{(const_int 0)} will do as an
7126 RTL pattern.
7128 @cindex @code{indirect_jump} instruction pattern
7129 @item @samp{indirect_jump}
7130 An instruction to jump to an address which is operand zero.
7131 This pattern name is mandatory on all machines.
7133 @cindex @code{casesi} instruction pattern
7134 @item @samp{casesi}
7135 Instruction to jump through a dispatch table, including bounds checking.
7136 This instruction takes five operands:
7138 @enumerate
7139 @item
7140 The index to dispatch on, which has mode @code{SImode}.
7142 @item
7143 The lower bound for indices in the table, an integer constant.
7145 @item
7146 The total range of indices in the table---the largest index
7147 minus the smallest one (both inclusive).
7149 @item
7150 A label that precedes the table itself.
7152 @item
7153 A label to jump to if the index has a value outside the bounds.
7154 @end enumerate
7156 The table is an @code{addr_vec} or @code{addr_diff_vec} inside of a
7157 @code{jump_table_data}.  The number of elements in the table is one plus the
7158 difference between the upper bound and the lower bound.
7160 @cindex @code{tablejump} instruction pattern
7161 @item @samp{tablejump}
7162 Instruction to jump to a variable address.  This is a low-level
7163 capability which can be used to implement a dispatch table when there
7164 is no @samp{casesi} pattern.
7166 This pattern requires two operands: the address or offset, and a label
7167 which should immediately precede the jump table.  If the macro
7168 @code{CASE_VECTOR_PC_RELATIVE} evaluates to a nonzero value then the first
7169 operand is an offset which counts from the address of the table; otherwise,
7170 it is an absolute address to jump to.  In either case, the first operand has
7171 mode @code{Pmode}.
7173 The @samp{tablejump} insn is always the last insn before the jump
7174 table it uses.  Its assembler code normally has no need to use the
7175 second operand, but you should incorporate it in the RTL pattern so
7176 that the jump optimizer will not delete the table as unreachable code.
7179 @cindex @code{doloop_end} instruction pattern
7180 @item @samp{doloop_end}
7181 Conditional branch instruction that decrements a register and
7182 jumps if the register is nonzero.  Operand 0 is the register to
7183 decrement and test; operand 1 is the label to jump to if the
7184 register is nonzero.
7185 @xref{Looping Patterns}.
7187 This optional instruction pattern should be defined for machines with
7188 low-overhead looping instructions as the loop optimizer will try to
7189 modify suitable loops to utilize it.  The target hook
7190 @code{TARGET_CAN_USE_DOLOOP_P} controls the conditions under which
7191 low-overhead loops can be used.
7193 @cindex @code{doloop_begin} instruction pattern
7194 @item @samp{doloop_begin}
7195 Companion instruction to @code{doloop_end} required for machines that
7196 need to perform some initialization, such as loading a special counter
7197 register.  Operand 1 is the associated @code{doloop_end} pattern and
7198 operand 0 is the register that it decrements.
7200 If initialization insns do not always need to be emitted, use a
7201 @code{define_expand} (@pxref{Expander Definitions}) and make it fail.
7203 @cindex @code{canonicalize_funcptr_for_compare} instruction pattern
7204 @item @samp{canonicalize_funcptr_for_compare}
7205 Canonicalize the function pointer in operand 1 and store the result
7206 into operand 0.
7208 Operand 0 is always a @code{reg} and has mode @code{Pmode}; operand 1
7209 may be a @code{reg}, @code{mem}, @code{symbol_ref}, @code{const_int}, etc
7210 and also has mode @code{Pmode}.
7212 Canonicalization of a function pointer usually involves computing
7213 the address of the function which would be called if the function
7214 pointer were used in an indirect call.
7216 Only define this pattern if function pointers on the target machine
7217 can have different values but still call the same function when
7218 used in an indirect call.
7220 @cindex @code{save_stack_block} instruction pattern
7221 @cindex @code{save_stack_function} instruction pattern
7222 @cindex @code{save_stack_nonlocal} instruction pattern
7223 @cindex @code{restore_stack_block} instruction pattern
7224 @cindex @code{restore_stack_function} instruction pattern
7225 @cindex @code{restore_stack_nonlocal} instruction pattern
7226 @item @samp{save_stack_block}
7227 @itemx @samp{save_stack_function}
7228 @itemx @samp{save_stack_nonlocal}
7229 @itemx @samp{restore_stack_block}
7230 @itemx @samp{restore_stack_function}
7231 @itemx @samp{restore_stack_nonlocal}
7232 Most machines save and restore the stack pointer by copying it to or
7233 from an object of mode @code{Pmode}.  Do not define these patterns on
7234 such machines.
7236 Some machines require special handling for stack pointer saves and
7237 restores.  On those machines, define the patterns corresponding to the
7238 non-standard cases by using a @code{define_expand} (@pxref{Expander
7239 Definitions}) that produces the required insns.  The three types of
7240 saves and restores are:
7242 @enumerate
7243 @item
7244 @samp{save_stack_block} saves the stack pointer at the start of a block
7245 that allocates a variable-sized object, and @samp{restore_stack_block}
7246 restores the stack pointer when the block is exited.
7248 @item
7249 @samp{save_stack_function} and @samp{restore_stack_function} do a
7250 similar job for the outermost block of a function and are used when the
7251 function allocates variable-sized objects or calls @code{alloca}.  Only
7252 the epilogue uses the restored stack pointer, allowing a simpler save or
7253 restore sequence on some machines.
7255 @item
7256 @samp{save_stack_nonlocal} is used in functions that contain labels
7257 branched to by nested functions.  It saves the stack pointer in such a
7258 way that the inner function can use @samp{restore_stack_nonlocal} to
7259 restore the stack pointer.  The compiler generates code to restore the
7260 frame and argument pointer registers, but some machines require saving
7261 and restoring additional data such as register window information or
7262 stack backchains.  Place insns in these patterns to save and restore any
7263 such required data.
7264 @end enumerate
7266 When saving the stack pointer, operand 0 is the save area and operand 1
7267 is the stack pointer.  The mode used to allocate the save area defaults
7268 to @code{Pmode} but you can override that choice by defining the
7269 @code{STACK_SAVEAREA_MODE} macro (@pxref{Storage Layout}).  You must
7270 specify an integral mode, or @code{VOIDmode} if no save area is needed
7271 for a particular type of save (either because no save is needed or
7272 because a machine-specific save area can be used).  Operand 0 is the
7273 stack pointer and operand 1 is the save area for restore operations.  If
7274 @samp{save_stack_block} is defined, operand 0 must not be
7275 @code{VOIDmode} since these saves can be arbitrarily nested.
7277 A save area is a @code{mem} that is at a constant offset from
7278 @code{virtual_stack_vars_rtx} when the stack pointer is saved for use by
7279 nonlocal gotos and a @code{reg} in the other two cases.
7281 @cindex @code{allocate_stack} instruction pattern
7282 @item @samp{allocate_stack}
7283 Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 1 from
7284 the stack pointer to create space for dynamically allocated data.
7286 Store the resultant pointer to this space into operand 0.  If you
7287 are allocating space from the main stack, do this by emitting a
7288 move insn to copy @code{virtual_stack_dynamic_rtx} to operand 0.
7289 If you are allocating the space elsewhere, generate code to copy the
7290 location of the space to operand 0.  In the latter case, you must
7291 ensure this space gets freed when the corresponding space on the main
7292 stack is free.
7294 Do not define this pattern if all that must be done is the subtraction.
7295 Some machines require other operations such as stack probes or
7296 maintaining the back chain.  Define this pattern to emit those
7297 operations in addition to updating the stack pointer.
7299 @cindex @code{check_stack} instruction pattern
7300 @item @samp{check_stack}
7301 If stack checking (@pxref{Stack Checking}) cannot be done on your system by
7302 probing the stack, define this pattern to perform the needed check and signal
7303 an error if the stack has overflowed.  The single operand is the address in
7304 the stack farthest from the current stack pointer that you need to validate.
7305 Normally, on platforms where this pattern is needed, you would obtain the
7306 stack limit from a global or thread-specific variable or register.
7308 @cindex @code{probe_stack_address} instruction pattern
7309 @item @samp{probe_stack_address}
7310 If stack checking (@pxref{Stack Checking}) can be done on your system by
7311 probing the stack but without the need to actually access it, define this
7312 pattern and signal an error if the stack has overflowed.  The single operand
7313 is the memory address in the stack that needs to be probed.
7315 @cindex @code{probe_stack} instruction pattern
7316 @item @samp{probe_stack}
7317 If stack checking (@pxref{Stack Checking}) can be done on your system by
7318 probing the stack but doing it with a ``store zero'' instruction is not valid
7319 or optimal, define this pattern to do the probing differently and signal an
7320 error if the stack has overflowed.  The single operand is the memory reference
7321 in the stack that needs to be probed.
7323 @cindex @code{nonlocal_goto} instruction pattern
7324 @item @samp{nonlocal_goto}
7325 Emit code to generate a non-local goto, e.g., a jump from one function
7326 to a label in an outer function.  This pattern has four arguments,
7327 each representing a value to be used in the jump.  The first
7328 argument is to be loaded into the frame pointer, the second is
7329 the address to branch to (code to dispatch to the actual label),
7330 the third is the address of a location where the stack is saved,
7331 and the last is the address of the label, to be placed in the
7332 location for the incoming static chain.
7334 On most machines you need not define this pattern, since GCC will
7335 already generate the correct code, which is to load the frame pointer
7336 and static chain, restore the stack (using the
7337 @samp{restore_stack_nonlocal} pattern, if defined), and jump indirectly
7338 to the dispatcher.  You need only define this pattern if this code will
7339 not work on your machine.
7341 @cindex @code{nonlocal_goto_receiver} instruction pattern
7342 @item @samp{nonlocal_goto_receiver}
7343 This pattern, if defined, contains code needed at the target of a
7344 nonlocal goto after the code already generated by GCC@.  You will not
7345 normally need to define this pattern.  A typical reason why you might
7346 need this pattern is if some value, such as a pointer to a global table,
7347 must be restored when the frame pointer is restored.  Note that a nonlocal
7348 goto only occurs within a unit-of-translation, so a global table pointer
7349 that is shared by all functions of a given module need not be restored.
7350 There are no arguments.
7352 @cindex @code{exception_receiver} instruction pattern
7353 @item @samp{exception_receiver}
7354 This pattern, if defined, contains code needed at the site of an
7355 exception handler that isn't needed at the site of a nonlocal goto.  You
7356 will not normally need to define this pattern.  A typical reason why you
7357 might need this pattern is if some value, such as a pointer to a global
7358 table, must be restored after control flow is branched to the handler of
7359 an exception.  There are no arguments.
7361 @cindex @code{builtin_setjmp_setup} instruction pattern
7362 @item @samp{builtin_setjmp_setup}
7363 This pattern, if defined, contains additional code needed to initialize
7364 the @code{jmp_buf}.  You will not normally need to define this pattern.
7365 A typical reason why you might need this pattern is if some value, such
7366 as a pointer to a global table, must be restored.  Though it is
7367 preferred that the pointer value be recalculated if possible (given the
7368 address of a label for instance).  The single argument is a pointer to
7369 the @code{jmp_buf}.  Note that the buffer is five words long and that
7370 the first three are normally used by the generic mechanism.
7372 @cindex @code{builtin_setjmp_receiver} instruction pattern
7373 @item @samp{builtin_setjmp_receiver}
7374 This pattern, if defined, contains code needed at the site of a
7375 built-in setjmp that isn't needed at the site of a nonlocal goto.  You
7376 will not normally need to define this pattern.  A typical reason why you
7377 might need this pattern is if some value, such as a pointer to a global
7378 table, must be restored.  It takes one argument, which is the label
7379 to which builtin_longjmp transferred control; this pattern may be emitted
7380 at a small offset from that label.
7382 @cindex @code{builtin_longjmp} instruction pattern
7383 @item @samp{builtin_longjmp}
7384 This pattern, if defined, performs the entire action of the longjmp.
7385 You will not normally need to define this pattern unless you also define
7386 @code{builtin_setjmp_setup}.  The single argument is a pointer to the
7387 @code{jmp_buf}.
7389 @cindex @code{eh_return} instruction pattern
7390 @item @samp{eh_return}
7391 This pattern, if defined, affects the way @code{__builtin_eh_return},
7392 and thence the call frame exception handling library routines, are
7393 built.  It is intended to handle non-trivial actions needed along
7394 the abnormal return path.
7396 The address of the exception handler to which the function should return
7397 is passed as operand to this pattern.  It will normally need to copied by
7398 the pattern to some special register or memory location.
7399 If the pattern needs to determine the location of the target call
7400 frame in order to do so, it may use @code{EH_RETURN_STACKADJ_RTX},
7401 if defined; it will have already been assigned.
7403 If this pattern is not defined, the default action will be to simply
7404 copy the return address to @code{EH_RETURN_HANDLER_RTX}.  Either
7405 that macro or this pattern needs to be defined if call frame exception
7406 handling is to be used.
7408 @cindex @code{prologue} instruction pattern
7409 @anchor{prologue instruction pattern}
7410 @item @samp{prologue}
7411 This pattern, if defined, emits RTL for entry to a function.  The function
7412 entry is responsible for setting up the stack frame, initializing the frame
7413 pointer register, saving callee saved registers, etc.
7415 Using a prologue pattern is generally preferred over defining
7416 @code{TARGET_ASM_FUNCTION_PROLOGUE} to emit assembly code for the prologue.
7418 The @code{prologue} pattern is particularly useful for targets which perform
7419 instruction scheduling.
7421 @cindex @code{window_save} instruction pattern
7422 @anchor{window_save instruction pattern}
7423 @item @samp{window_save}
7424 This pattern, if defined, emits RTL for a register window save.  It should
7425 be defined if the target machine has register windows but the window events
7426 are decoupled from calls to subroutines.  The canonical example is the SPARC
7427 architecture.
7429 @cindex @code{epilogue} instruction pattern
7430 @anchor{epilogue instruction pattern}
7431 @item @samp{epilogue}
7432 This pattern emits RTL for exit from a function.  The function
7433 exit is responsible for deallocating the stack frame, restoring callee saved
7434 registers and emitting the return instruction.
7436 Using an epilogue pattern is generally preferred over defining
7437 @code{TARGET_ASM_FUNCTION_EPILOGUE} to emit assembly code for the epilogue.
7439 The @code{epilogue} pattern is particularly useful for targets which perform
7440 instruction scheduling or which have delay slots for their return instruction.
7442 @cindex @code{sibcall_epilogue} instruction pattern
7443 @item @samp{sibcall_epilogue}
7444 This pattern, if defined, emits RTL for exit from a function without the final
7445 branch back to the calling function.  This pattern will be emitted before any
7446 sibling call (aka tail call) sites.
7448 The @code{sibcall_epilogue} pattern must not clobber any arguments used for
7449 parameter passing or any stack slots for arguments passed to the current
7450 function.
7452 @cindex @code{trap} instruction pattern
7453 @item @samp{trap}
7454 This pattern, if defined, signals an error, typically by causing some
7455 kind of signal to be raised.
7457 @cindex @code{ctrap@var{MM}4} instruction pattern
7458 @item @samp{ctrap@var{MM}4}
7459 Conditional trap instruction.  Operand 0 is a piece of RTL which
7460 performs a comparison, and operands 1 and 2 are the arms of the
7461 comparison.  Operand 3 is the trap code, an integer.
7463 A typical @code{ctrap} pattern looks like
7465 @smallexample
7466 (define_insn "ctrapsi4"
7467   [(trap_if (match_operator 0 "trap_operator"
7468              [(match_operand 1 "register_operand")
7469               (match_operand 2 "immediate_operand")])
7470             (match_operand 3 "const_int_operand" "i"))]
7471   ""
7472   "@dots{}")
7473 @end smallexample
7475 @cindex @code{prefetch} instruction pattern
7476 @item @samp{prefetch}
7477 This pattern, if defined, emits code for a non-faulting data prefetch
7478 instruction.  Operand 0 is the address of the memory to prefetch.  Operand 1
7479 is a constant 1 if the prefetch is preparing for a write to the memory
7480 address, or a constant 0 otherwise.  Operand 2 is the expected degree of
7481 temporal locality of the data and is a value between 0 and 3, inclusive; 0
7482 means that the data has no temporal locality, so it need not be left in the
7483 cache after the access; 3 means that the data has a high degree of temporal
7484 locality and should be left in all levels of cache possible;  1 and 2 mean,
7485 respectively, a low or moderate degree of temporal locality.
7487 Targets that do not support write prefetches or locality hints can ignore
7488 the values of operands 1 and 2.
7490 @cindex @code{blockage} instruction pattern
7491 @item @samp{blockage}
7492 This pattern defines a pseudo insn that prevents the instruction
7493 scheduler and other passes from moving instructions and using register
7494 equivalences across the boundary defined by the blockage insn.
7495 This needs to be an UNSPEC_VOLATILE pattern or a volatile ASM.
7497 @cindex @code{memory_blockage} instruction pattern
7498 @item @samp{memory_blockage}
7499 This pattern, if defined, represents a compiler memory barrier, and will be
7500 placed at points across which RTL passes may not propagate memory accesses.
7501 This instruction needs to read and write volatile BLKmode memory.  It does
7502 not need to generate any machine instruction.  If this pattern is not defined,
7503 the compiler falls back to emitting an instruction corresponding
7504 to @code{asm volatile ("" ::: "memory")}.
7506 @cindex @code{memory_barrier} instruction pattern
7507 @item @samp{memory_barrier}
7508 If the target memory model is not fully synchronous, then this pattern
7509 should be defined to an instruction that orders both loads and stores
7510 before the instruction with respect to loads and stores after the instruction.
7511 This pattern has no operands.
7513 @cindex @code{speculation_barrier} instruction pattern
7514 @item @samp{speculation_barrier}
7515 If the target can support speculative execution, then this pattern should
7516 be defined to an instruction that will block subsequent execution until
7517 any prior speculation conditions has been resolved.  The pattern must also
7518 ensure that the compiler cannot move memory operations past the barrier,
7519 so it needs to be an UNSPEC_VOLATILE pattern.  The pattern has no
7520 operands.
7522 If this pattern is not defined then the default expansion of
7523 @code{__builtin_speculation_safe_value} will emit a warning.  You can
7524 suppress this warning by defining this pattern with a final condition
7525 of @code{0} (zero), which tells the compiler that a speculation
7526 barrier is not needed for this target.
7528 @cindex @code{sync_compare_and_swap@var{mode}} instruction pattern
7529 @item @samp{sync_compare_and_swap@var{mode}}
7530 This pattern, if defined, emits code for an atomic compare-and-swap
7531 operation.  Operand 1 is the memory on which the atomic operation is
7532 performed.  Operand 2 is the ``old'' value to be compared against the
7533 current contents of the memory location.  Operand 3 is the ``new'' value
7534 to store in the memory if the compare succeeds.  Operand 0 is the result
7535 of the operation; it should contain the contents of the memory
7536 before the operation.  If the compare succeeds, this should obviously be
7537 a copy of operand 2.
7539 This pattern must show that both operand 0 and operand 1 are modified.
7541 This pattern must issue any memory barrier instructions such that all
7542 memory operations before the atomic operation occur before the atomic
7543 operation and all memory operations after the atomic operation occur
7544 after the atomic operation.
7546 For targets where the success or failure of the compare-and-swap
7547 operation is available via the status flags, it is possible to
7548 avoid a separate compare operation and issue the subsequent
7549 branch or store-flag operation immediately after the compare-and-swap.
7550 To this end, GCC will look for a @code{MODE_CC} set in the
7551 output of @code{sync_compare_and_swap@var{mode}}; if the machine
7552 description includes such a set, the target should also define special
7553 @code{cbranchcc4} and/or @code{cstorecc4} instructions.  GCC will then
7554 be able to take the destination of the @code{MODE_CC} set and pass it
7555 to the @code{cbranchcc4} or @code{cstorecc4} pattern as the first
7556 operand of the comparison (the second will be @code{(const_int 0)}).
7558 For targets where the operating system may provide support for this
7559 operation via library calls, the @code{sync_compare_and_swap_optab}
7560 may be initialized to a function with the same interface as the
7561 @code{__sync_val_compare_and_swap_@var{n}} built-in.  If the entire
7562 set of @var{__sync} builtins are supported via library calls, the
7563 target can initialize all of the optabs at once with
7564 @code{init_sync_libfuncs}.
7565 For the purposes of C++11 @code{std::atomic::is_lock_free}, it is
7566 assumed that these library calls do @emph{not} use any kind of
7567 interruptable locking.
7569 @cindex @code{sync_add@var{mode}} instruction pattern
7570 @cindex @code{sync_sub@var{mode}} instruction pattern
7571 @cindex @code{sync_ior@var{mode}} instruction pattern
7572 @cindex @code{sync_and@var{mode}} instruction pattern
7573 @cindex @code{sync_xor@var{mode}} instruction pattern
7574 @cindex @code{sync_nand@var{mode}} instruction pattern
7575 @item @samp{sync_add@var{mode}}, @samp{sync_sub@var{mode}}
7576 @itemx @samp{sync_ior@var{mode}}, @samp{sync_and@var{mode}}
7577 @itemx @samp{sync_xor@var{mode}}, @samp{sync_nand@var{mode}}
7578 These patterns emit code for an atomic operation on memory.
7579 Operand 0 is the memory on which the atomic operation is performed.
7580 Operand 1 is the second operand to the binary operator.
7582 This pattern must issue any memory barrier instructions such that all
7583 memory operations before the atomic operation occur before the atomic
7584 operation and all memory operations after the atomic operation occur
7585 after the atomic operation.
7587 If these patterns are not defined, the operation will be constructed
7588 from a compare-and-swap operation, if defined.
7590 @cindex @code{sync_old_add@var{mode}} instruction pattern
7591 @cindex @code{sync_old_sub@var{mode}} instruction pattern
7592 @cindex @code{sync_old_ior@var{mode}} instruction pattern
7593 @cindex @code{sync_old_and@var{mode}} instruction pattern
7594 @cindex @code{sync_old_xor@var{mode}} instruction pattern
7595 @cindex @code{sync_old_nand@var{mode}} instruction pattern
7596 @item @samp{sync_old_add@var{mode}}, @samp{sync_old_sub@var{mode}}
7597 @itemx @samp{sync_old_ior@var{mode}}, @samp{sync_old_and@var{mode}}
7598 @itemx @samp{sync_old_xor@var{mode}}, @samp{sync_old_nand@var{mode}}
7599 These patterns emit code for an atomic operation on memory,
7600 and return the value that the memory contained before the operation.
7601 Operand 0 is the result value, operand 1 is the memory on which the
7602 atomic operation is performed, and operand 2 is the second operand
7603 to the binary operator.
7605 This pattern must issue any memory barrier instructions such that all
7606 memory operations before the atomic operation occur before the atomic
7607 operation and all memory operations after the atomic operation occur
7608 after the atomic operation.
7610 If these patterns are not defined, the operation will be constructed
7611 from a compare-and-swap operation, if defined.
7613 @cindex @code{sync_new_add@var{mode}} instruction pattern
7614 @cindex @code{sync_new_sub@var{mode}} instruction pattern
7615 @cindex @code{sync_new_ior@var{mode}} instruction pattern
7616 @cindex @code{sync_new_and@var{mode}} instruction pattern
7617 @cindex @code{sync_new_xor@var{mode}} instruction pattern
7618 @cindex @code{sync_new_nand@var{mode}} instruction pattern
7619 @item @samp{sync_new_add@var{mode}}, @samp{sync_new_sub@var{mode}}
7620 @itemx @samp{sync_new_ior@var{mode}}, @samp{sync_new_and@var{mode}}
7621 @itemx @samp{sync_new_xor@var{mode}}, @samp{sync_new_nand@var{mode}}
7622 These patterns are like their @code{sync_old_@var{op}} counterparts,
7623 except that they return the value that exists in the memory location
7624 after the operation, rather than before the operation.
7626 @cindex @code{sync_lock_test_and_set@var{mode}} instruction pattern
7627 @item @samp{sync_lock_test_and_set@var{mode}}
7628 This pattern takes two forms, based on the capabilities of the target.
7629 In either case, operand 0 is the result of the operand, operand 1 is
7630 the memory on which the atomic operation is performed, and operand 2
7631 is the value to set in the lock.
7633 In the ideal case, this operation is an atomic exchange operation, in
7634 which the previous value in memory operand is copied into the result
7635 operand, and the value operand is stored in the memory operand.
7637 For less capable targets, any value operand that is not the constant 1
7638 should be rejected with @code{FAIL}.  In this case the target may use
7639 an atomic test-and-set bit operation.  The result operand should contain
7640 1 if the bit was previously set and 0 if the bit was previously clear.
7641 The true contents of the memory operand are implementation defined.
7643 This pattern must issue any memory barrier instructions such that the
7644 pattern as a whole acts as an acquire barrier, that is all memory
7645 operations after the pattern do not occur until the lock is acquired.
7647 If this pattern is not defined, the operation will be constructed from
7648 a compare-and-swap operation, if defined.
7650 @cindex @code{sync_lock_release@var{mode}} instruction pattern
7651 @item @samp{sync_lock_release@var{mode}}
7652 This pattern, if defined, releases a lock set by
7653 @code{sync_lock_test_and_set@var{mode}}.  Operand 0 is the memory
7654 that contains the lock; operand 1 is the value to store in the lock.
7656 If the target doesn't implement full semantics for
7657 @code{sync_lock_test_and_set@var{mode}}, any value operand which is not
7658 the constant 0 should be rejected with @code{FAIL}, and the true contents
7659 of the memory operand are implementation defined.
7661 This pattern must issue any memory barrier instructions such that the
7662 pattern as a whole acts as a release barrier, that is the lock is
7663 released only after all previous memory operations have completed.
7665 If this pattern is not defined, then a @code{memory_barrier} pattern
7666 will be emitted, followed by a store of the value to the memory operand.
7668 @cindex @code{atomic_compare_and_swap@var{mode}} instruction pattern
7669 @item @samp{atomic_compare_and_swap@var{mode}} 
7670 This pattern, if defined, emits code for an atomic compare-and-swap
7671 operation with memory model semantics.  Operand 2 is the memory on which
7672 the atomic operation is performed.  Operand 0 is an output operand which
7673 is set to true or false based on whether the operation succeeded.  Operand
7674 1 is an output operand which is set to the contents of the memory before
7675 the operation was attempted.  Operand 3 is the value that is expected to
7676 be in memory.  Operand 4 is the value to put in memory if the expected
7677 value is found there.  Operand 5 is set to 1 if this compare and swap is to
7678 be treated as a weak operation.  Operand 6 is the memory model to be used
7679 if the operation is a success.  Operand 7 is the memory model to be used
7680 if the operation fails.
7682 If memory referred to in operand 2 contains the value in operand 3, then
7683 operand 4 is stored in memory pointed to by operand 2 and fencing based on
7684 the memory model in operand 6 is issued.  
7686 If memory referred to in operand 2 does not contain the value in operand 3,
7687 then fencing based on the memory model in operand 7 is issued.
7689 If a target does not support weak compare-and-swap operations, or the port
7690 elects not to implement weak operations, the argument in operand 5 can be
7691 ignored.  Note a strong implementation must be provided.
7693 If this pattern is not provided, the @code{__atomic_compare_exchange}
7694 built-in functions will utilize the legacy @code{sync_compare_and_swap}
7695 pattern with an @code{__ATOMIC_SEQ_CST} memory model.
7697 @cindex @code{atomic_load@var{mode}} instruction pattern
7698 @item @samp{atomic_load@var{mode}}
7699 This pattern implements an atomic load operation with memory model
7700 semantics.  Operand 1 is the memory address being loaded from.  Operand 0
7701 is the result of the load.  Operand 2 is the memory model to be used for
7702 the load operation.
7704 If not present, the @code{__atomic_load} built-in function will either
7705 resort to a normal load with memory barriers, or a compare-and-swap
7706 operation if a normal load would not be atomic.
7708 @cindex @code{atomic_store@var{mode}} instruction pattern
7709 @item @samp{atomic_store@var{mode}}
7710 This pattern implements an atomic store operation with memory model
7711 semantics.  Operand 0 is the memory address being stored to.  Operand 1
7712 is the value to be written.  Operand 2 is the memory model to be used for
7713 the operation.
7715 If not present, the @code{__atomic_store} built-in function will attempt to
7716 perform a normal store and surround it with any required memory fences.  If
7717 the store would not be atomic, then an @code{__atomic_exchange} is
7718 attempted with the result being ignored.
7720 @cindex @code{atomic_exchange@var{mode}} instruction pattern
7721 @item @samp{atomic_exchange@var{mode}}
7722 This pattern implements an atomic exchange operation with memory model
7723 semantics.  Operand 1 is the memory location the operation is performed on.
7724 Operand 0 is an output operand which is set to the original value contained
7725 in the memory pointed to by operand 1.  Operand 2 is the value to be
7726 stored.  Operand 3 is the memory model to be used.
7728 If this pattern is not present, the built-in function
7729 @code{__atomic_exchange} will attempt to preform the operation with a
7730 compare and swap loop.
7732 @cindex @code{atomic_add@var{mode}} instruction pattern
7733 @cindex @code{atomic_sub@var{mode}} instruction pattern
7734 @cindex @code{atomic_or@var{mode}} instruction pattern
7735 @cindex @code{atomic_and@var{mode}} instruction pattern
7736 @cindex @code{atomic_xor@var{mode}} instruction pattern
7737 @cindex @code{atomic_nand@var{mode}} instruction pattern
7738 @item @samp{atomic_add@var{mode}}, @samp{atomic_sub@var{mode}}
7739 @itemx @samp{atomic_or@var{mode}}, @samp{atomic_and@var{mode}}
7740 @itemx @samp{atomic_xor@var{mode}}, @samp{atomic_nand@var{mode}}
7741 These patterns emit code for an atomic operation on memory with memory
7742 model semantics. Operand 0 is the memory on which the atomic operation is
7743 performed.  Operand 1 is the second operand to the binary operator.
7744 Operand 2 is the memory model to be used by the operation.
7746 If these patterns are not defined, attempts will be made to use legacy
7747 @code{sync} patterns, or equivalent patterns which return a result.  If
7748 none of these are available a compare-and-swap loop will be used.
7750 @cindex @code{atomic_fetch_add@var{mode}} instruction pattern
7751 @cindex @code{atomic_fetch_sub@var{mode}} instruction pattern
7752 @cindex @code{atomic_fetch_or@var{mode}} instruction pattern
7753 @cindex @code{atomic_fetch_and@var{mode}} instruction pattern
7754 @cindex @code{atomic_fetch_xor@var{mode}} instruction pattern
7755 @cindex @code{atomic_fetch_nand@var{mode}} instruction pattern
7756 @item @samp{atomic_fetch_add@var{mode}}, @samp{atomic_fetch_sub@var{mode}}
7757 @itemx @samp{atomic_fetch_or@var{mode}}, @samp{atomic_fetch_and@var{mode}}
7758 @itemx @samp{atomic_fetch_xor@var{mode}}, @samp{atomic_fetch_nand@var{mode}}
7759 These patterns emit code for an atomic operation on memory with memory
7760 model semantics, and return the original value. Operand 0 is an output 
7761 operand which contains the value of the memory location before the 
7762 operation was performed.  Operand 1 is the memory on which the atomic 
7763 operation is performed.  Operand 2 is the second operand to the binary
7764 operator.  Operand 3 is the memory model to be used by the operation.
7766 If these patterns are not defined, attempts will be made to use legacy
7767 @code{sync} patterns.  If none of these are available a compare-and-swap
7768 loop will be used.
7770 @cindex @code{atomic_add_fetch@var{mode}} instruction pattern
7771 @cindex @code{atomic_sub_fetch@var{mode}} instruction pattern
7772 @cindex @code{atomic_or_fetch@var{mode}} instruction pattern
7773 @cindex @code{atomic_and_fetch@var{mode}} instruction pattern
7774 @cindex @code{atomic_xor_fetch@var{mode}} instruction pattern
7775 @cindex @code{atomic_nand_fetch@var{mode}} instruction pattern
7776 @item @samp{atomic_add_fetch@var{mode}}, @samp{atomic_sub_fetch@var{mode}}
7777 @itemx @samp{atomic_or_fetch@var{mode}}, @samp{atomic_and_fetch@var{mode}}
7778 @itemx @samp{atomic_xor_fetch@var{mode}}, @samp{atomic_nand_fetch@var{mode}}
7779 These patterns emit code for an atomic operation on memory with memory
7780 model semantics and return the result after the operation is performed.
7781 Operand 0 is an output operand which contains the value after the
7782 operation.  Operand 1 is the memory on which the atomic operation is
7783 performed.  Operand 2 is the second operand to the binary operator.
7784 Operand 3 is the memory model to be used by the operation.
7786 If these patterns are not defined, attempts will be made to use legacy
7787 @code{sync} patterns, or equivalent patterns which return the result before
7788 the operation followed by the arithmetic operation required to produce the
7789 result.  If none of these are available a compare-and-swap loop will be
7790 used.
7792 @cindex @code{atomic_test_and_set} instruction pattern
7793 @item @samp{atomic_test_and_set}
7794 This pattern emits code for @code{__builtin_atomic_test_and_set}.
7795 Operand 0 is an output operand which is set to true if the previous
7796 previous contents of the byte was "set", and false otherwise.  Operand 1
7797 is the @code{QImode} memory to be modified.  Operand 2 is the memory
7798 model to be used.
7800 The specific value that defines "set" is implementation defined, and
7801 is normally based on what is performed by the native atomic test and set
7802 instruction.
7804 @cindex @code{atomic_bit_test_and_set@var{mode}} instruction pattern
7805 @cindex @code{atomic_bit_test_and_complement@var{mode}} instruction pattern
7806 @cindex @code{atomic_bit_test_and_reset@var{mode}} instruction pattern
7807 @item @samp{atomic_bit_test_and_set@var{mode}}
7808 @itemx @samp{atomic_bit_test_and_complement@var{mode}}
7809 @itemx @samp{atomic_bit_test_and_reset@var{mode}}
7810 These patterns emit code for an atomic bitwise operation on memory with memory
7811 model semantics, and return the original value of the specified bit.
7812 Operand 0 is an output operand which contains the value of the specified bit
7813 from the memory location before the operation was performed.  Operand 1 is the
7814 memory on which the atomic operation is performed.  Operand 2 is the bit within
7815 the operand, starting with least significant bit.  Operand 3 is the memory model
7816 to be used by the operation.  Operand 4 is a flag - it is @code{const1_rtx}
7817 if operand 0 should contain the original value of the specified bit in the
7818 least significant bit of the operand, and @code{const0_rtx} if the bit should
7819 be in its original position in the operand.
7820 @code{atomic_bit_test_and_set@var{mode}} atomically sets the specified bit after
7821 remembering its original value, @code{atomic_bit_test_and_complement@var{mode}}
7822 inverts the specified bit and @code{atomic_bit_test_and_reset@var{mode}} clears
7823 the specified bit.
7825 If these patterns are not defined, attempts will be made to use
7826 @code{atomic_fetch_or@var{mode}}, @code{atomic_fetch_xor@var{mode}} or
7827 @code{atomic_fetch_and@var{mode}} instruction patterns, or their @code{sync}
7828 counterparts.  If none of these are available a compare-and-swap
7829 loop will be used.
7831 @cindex @code{atomic_add_fetch_cmp_0@var{mode}} instruction pattern
7832 @cindex @code{atomic_sub_fetch_cmp_0@var{mode}} instruction pattern
7833 @cindex @code{atomic_and_fetch_cmp_0@var{mode}} instruction pattern
7834 @cindex @code{atomic_or_fetch_cmp_0@var{mode}} instruction pattern
7835 @cindex @code{atomic_xor_fetch_cmp_0@var{mode}} instruction pattern
7836 @item @samp{atomic_add_fetch_cmp_0@var{mode}}
7837 @itemx @samp{atomic_sub_fetch_cmp_0@var{mode}}
7838 @itemx @samp{atomic_and_fetch_cmp_0@var{mode}}
7839 @itemx @samp{atomic_or_fetch_cmp_0@var{mode}}
7840 @itemx @samp{atomic_xor_fetch_cmp_0@var{mode}}
7841 These patterns emit code for an atomic operation on memory with memory
7842 model semantics if the fetch result is used only in a comparison against
7843 zero.
7844 Operand 0 is an output operand which contains a boolean result of comparison
7845 of the value after the operation against zero.  Operand 1 is the memory on
7846 which the atomic operation is performed.  Operand 2 is the second operand
7847 to the binary operator.  Operand 3 is the memory model to be used by the
7848 operation.  Operand 4 is an integer holding the comparison code, one of
7849 @code{EQ}, @code{NE}, @code{LT}, @code{GT}, @code{LE} or @code{GE}.
7851 If these patterns are not defined, attempts will be made to use separate
7852 atomic operation and fetch pattern followed by comparison of the result
7853 against zero.
7855 @cindex @code{mem_thread_fence} instruction pattern
7856 @item @samp{mem_thread_fence}
7857 This pattern emits code required to implement a thread fence with
7858 memory model semantics.  Operand 0 is the memory model to be used.
7860 For the @code{__ATOMIC_RELAXED} model no instructions need to be issued
7861 and this expansion is not invoked.
7863 The compiler always emits a compiler memory barrier regardless of what
7864 expanding this pattern produced.
7866 If this pattern is not defined, the compiler falls back to expanding the
7867 @code{memory_barrier} pattern, then to emitting @code{__sync_synchronize}
7868 library call, and finally to just placing a compiler memory barrier.
7870 @cindex @code{get_thread_pointer@var{mode}} instruction pattern
7871 @cindex @code{set_thread_pointer@var{mode}} instruction pattern
7872 @item @samp{get_thread_pointer@var{mode}}
7873 @itemx @samp{set_thread_pointer@var{mode}}
7874 These patterns emit code that reads/sets the TLS thread pointer. Currently,
7875 these are only needed if the target needs to support the
7876 @code{__builtin_thread_pointer} and @code{__builtin_set_thread_pointer}
7877 builtins.
7879 The get/set patterns have a single output/input operand respectively,
7880 with @var{mode} intended to be @code{Pmode}.
7882 @cindex @code{stack_protect_combined_set} instruction pattern
7883 @item @samp{stack_protect_combined_set}
7884 This pattern, if defined, moves a @code{ptr_mode} value from an address
7885 whose declaration RTX is given in operand 1 to the memory in operand 0
7886 without leaving the value in a register afterward.  If several
7887 instructions are needed by the target to perform the operation (eg. to
7888 load the address from a GOT entry then load the @code{ptr_mode} value
7889 and finally store it), it is the backend's responsibility to ensure no
7890 intermediate result gets spilled.  This is to avoid leaking the value
7891 some place that an attacker might use to rewrite the stack guard slot
7892 after having clobbered it.
7894 If this pattern is not defined, then the address declaration is
7895 expanded first in the standard way and a @code{stack_protect_set}
7896 pattern is then generated to move the value from that address to the
7897 address in operand 0.
7899 @cindex @code{stack_protect_set} instruction pattern
7900 @item @samp{stack_protect_set}
7901 This pattern, if defined, moves a @code{ptr_mode} value from the valid
7902 memory location in operand 1 to the memory in operand 0 without leaving
7903 the value in a register afterward.  This is to avoid leaking the value
7904 some place that an attacker might use to rewrite the stack guard slot
7905 after having clobbered it.
7907 Note: on targets where the addressing modes do not allow to load
7908 directly from stack guard address, the address is expanded in a standard
7909 way first which could cause some spills.
7911 If this pattern is not defined, then a plain move pattern is generated.
7913 @cindex @code{stack_protect_combined_test} instruction pattern
7914 @item @samp{stack_protect_combined_test}
7915 This pattern, if defined, compares a @code{ptr_mode} value from an
7916 address whose declaration RTX is given in operand 1 with the memory in
7917 operand 0 without leaving the value in a register afterward and
7918 branches to operand 2 if the values were equal.  If several
7919 instructions are needed by the target to perform the operation (eg. to
7920 load the address from a GOT entry then load the @code{ptr_mode} value
7921 and finally store it), it is the backend's responsibility to ensure no
7922 intermediate result gets spilled.  This is to avoid leaking the value
7923 some place that an attacker might use to rewrite the stack guard slot
7924 after having clobbered it.
7926 If this pattern is not defined, then the address declaration is
7927 expanded first in the standard way and a @code{stack_protect_test}
7928 pattern is then generated to compare the value from that address to the
7929 value at the memory in operand 0.
7931 @cindex @code{stack_protect_test} instruction pattern
7932 @item @samp{stack_protect_test}
7933 This pattern, if defined, compares a @code{ptr_mode} value from the
7934 valid memory location in operand 1 with the memory in operand 0 without
7935 leaving the value in a register afterward and branches to operand 2 if
7936 the values were equal.
7938 If this pattern is not defined, then a plain compare pattern and
7939 conditional branch pattern is used.
7941 @cindex @code{clear_cache} instruction pattern
7942 @item @samp{clear_cache}
7943 This pattern, if defined, flushes the instruction cache for a region of
7944 memory.  The region is bounded to by the Pmode pointers in operand 0
7945 inclusive and operand 1 exclusive.
7947 If this pattern is not defined, a call to the library function
7948 @code{__clear_cache} is used.
7950 @cindex @code{spaceship@var{m}3} instruction pattern
7951 @item @samp{spaceship@var{m}3}
7952 Initialize output operand 0 with mode of integer type to -1, 0, 1 or 2
7953 if operand 1 with mode @var{m} compares less than operand 2, equal to
7954 operand 2, greater than operand 2 or is unordered with operand 2.
7955 @var{m} should be a scalar floating point mode.
7957 This pattern is not allowed to @code{FAIL}.
7959 @end table
7961 @end ifset
7962 @c Each of the following nodes are wrapped in separate
7963 @c "@ifset INTERNALS" to work around memory limits for the default
7964 @c configuration in older tetex distributions.  Known to not work:
7965 @c tetex-1.0.7, known to work: tetex-2.0.2.
7966 @ifset INTERNALS
7967 @node Pattern Ordering
7968 @section When the Order of Patterns Matters
7969 @cindex Pattern Ordering
7970 @cindex Ordering of Patterns
7972 Sometimes an insn can match more than one instruction pattern.  Then the
7973 pattern that appears first in the machine description is the one used.
7974 Therefore, more specific patterns (patterns that will match fewer things)
7975 and faster instructions (those that will produce better code when they
7976 do match) should usually go first in the description.
7978 In some cases the effect of ordering the patterns can be used to hide
7979 a pattern when it is not valid.  For example, the 68000 has an
7980 instruction for converting a fullword to floating point and another
7981 for converting a byte to floating point.  An instruction converting
7982 an integer to floating point could match either one.  We put the
7983 pattern to convert the fullword first to make sure that one will
7984 be used rather than the other.  (Otherwise a large integer might
7985 be generated as a single-byte immediate quantity, which would not work.)
7986 Instead of using this pattern ordering it would be possible to make the
7987 pattern for convert-a-byte smart enough to deal properly with any
7988 constant value.
7990 @end ifset
7991 @ifset INTERNALS
7992 @node Dependent Patterns
7993 @section Interdependence of Patterns
7994 @cindex Dependent Patterns
7995 @cindex Interdependence of Patterns
7997 In some cases machines support instructions identical except for the
7998 machine mode of one or more operands.  For example, there may be
7999 ``sign-extend halfword'' and ``sign-extend byte'' instructions whose
8000 patterns are
8002 @smallexample
8003 (set (match_operand:SI 0 @dots{})
8004      (extend:SI (match_operand:HI 1 @dots{})))
8006 (set (match_operand:SI 0 @dots{})
8007      (extend:SI (match_operand:QI 1 @dots{})))
8008 @end smallexample
8010 @noindent
8011 Constant integers do not specify a machine mode, so an instruction to
8012 extend a constant value could match either pattern.  The pattern it
8013 actually will match is the one that appears first in the file.  For correct
8014 results, this must be the one for the widest possible mode (@code{HImode},
8015 here).  If the pattern matches the @code{QImode} instruction, the results
8016 will be incorrect if the constant value does not actually fit that mode.
8018 Such instructions to extend constants are rarely generated because they are
8019 optimized away, but they do occasionally happen in nonoptimized
8020 compilations.
8022 If a constraint in a pattern allows a constant, the reload pass may
8023 replace a register with a constant permitted by the constraint in some
8024 cases.  Similarly for memory references.  Because of this substitution,
8025 you should not provide separate patterns for increment and decrement
8026 instructions.  Instead, they should be generated from the same pattern
8027 that supports register-register add insns by examining the operands and
8028 generating the appropriate machine instruction.
8030 @end ifset
8031 @ifset INTERNALS
8032 @node Jump Patterns
8033 @section Defining Jump Instruction Patterns
8034 @cindex jump instruction patterns
8035 @cindex defining jump instruction patterns
8037 GCC does not assume anything about how the machine realizes jumps.
8038 The machine description should define a single pattern, usually
8039 a @code{define_expand}, which expands to all the required insns.
8041 Usually, this would be a comparison insn to set the condition code
8042 and a separate branch insn testing the condition code and branching
8043 or not according to its value.  For many machines, however,
8044 separating compares and branches is limiting, which is why the
8045 more flexible approach with one @code{define_expand} is used in GCC.
8046 The machine description becomes clearer for architectures that
8047 have compare-and-branch instructions but no condition code.  It also
8048 works better when different sets of comparison operators are supported
8049 by different kinds of conditional branches (e.g.@: integer vs.@:
8050 floating-point), or by conditional branches with respect to conditional stores.
8052 Two separate insns are always used on most machines that use a separate
8053 condition code register (@pxref{Condition Code}).
8055 Even in this case having a single entry point for conditional branches
8056 is advantageous, because it handles equally well the case where a single
8057 comparison instruction records the results of both signed and unsigned
8058 comparison of the given operands (with the branch insns coming in distinct
8059 signed and unsigned flavors) as in the x86 or SPARC, and the case where
8060 there are distinct signed and unsigned compare instructions and only
8061 one set of conditional branch instructions as in the PowerPC.
8063 @end ifset
8064 @ifset INTERNALS
8065 @node Looping Patterns
8066 @section Defining Looping Instruction Patterns
8067 @cindex looping instruction patterns
8068 @cindex defining looping instruction patterns
8070 Some machines have special jump instructions that can be utilized to
8071 make loops more efficient.  A common example is the 68000 @samp{dbra}
8072 instruction which performs a decrement of a register and a branch if the
8073 result was greater than zero.  Other machines, in particular digital
8074 signal processors (DSPs), have special block repeat instructions to
8075 provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
8076 DSPs have a block repeat instruction that loads special registers to
8077 mark the top and end of a loop and to count the number of loop
8078 iterations.  This avoids the need for fetching and executing a
8079 @samp{dbra}-like instruction and avoids pipeline stalls associated with
8080 the jump.
8082 GCC has two special named patterns to support low overhead looping.
8083 They are @samp{doloop_begin} and @samp{doloop_end}.  These are emitted
8084 by the loop optimizer for certain well-behaved loops with a finite
8085 number of loop iterations using information collected during strength
8086 reduction.
8088 The @samp{doloop_end} pattern describes the actual looping instruction
8089 (or the implicit looping operation) and the @samp{doloop_begin} pattern
8090 is an optional companion pattern that can be used for initialization
8091 needed for some low-overhead looping instructions.
8093 Note that some machines require the actual looping instruction to be
8094 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
8095 the true RTL for a looping instruction at the top of the loop can cause
8096 problems with flow analysis.  So instead, a dummy @code{doloop} insn is
8097 emitted at the end of the loop.  The machine dependent reorg pass checks
8098 for the presence of this @code{doloop} insn and then searches back to
8099 the top of the loop, where it inserts the true looping insn (provided
8100 there are no instructions in the loop which would cause problems).  Any
8101 additional labels can be emitted at this point.  In addition, if the
8102 desired special iteration counter register was not allocated, this
8103 machine dependent reorg pass could emit a traditional compare and jump
8104 instruction pair.
8106 For the @samp{doloop_end} pattern, the loop optimizer allocates an
8107 additional pseudo register as an iteration counter.  This pseudo
8108 register cannot be used within the loop (i.e., general induction
8109 variables cannot be derived from it), however, in many cases the loop
8110 induction variable may become redundant and removed by the flow pass.
8112 The @samp{doloop_end} pattern must have a specific structure to be
8113 handled correctly by GCC.  The example below is taken (slightly
8114 simplified) from the PDP-11 target:
8116 @smallexample
8117 @group
8118 (define_expand "doloop_end"
8119   [(parallel [(set (pc)
8120                    (if_then_else
8121                     (ne (match_operand:HI 0 "nonimmediate_operand" "+r,!m")
8122                         (const_int 1))
8123                     (label_ref (match_operand 1 "" ""))
8124                     (pc)))
8125               (set (match_dup 0)
8126                    (plus:HI (match_dup 0)
8127                          (const_int -1)))])]
8128   ""
8129   "@{
8130     if (GET_MODE (operands[0]) != HImode)
8131       FAIL;
8132   @}")
8134 (define_insn "doloop_end_insn"
8135   [(set (pc)
8136         (if_then_else
8137          (ne (match_operand:HI 0 "nonimmediate_operand" "+r,!m")
8138              (const_int 1))
8139          (label_ref (match_operand 1 "" ""))
8140          (pc)))
8141    (set (match_dup 0)
8142         (plus:HI (match_dup 0)
8143               (const_int -1)))]
8144   ""
8145   
8146   @{
8147     if (which_alternative == 0)
8148       return "sob %0,%l1";
8150     /* emulate sob */
8151     output_asm_insn ("dec %0", operands);
8152     return "bne %l1";
8153   @})
8154 @end group
8155 @end smallexample
8157 The first part of the pattern describes the branch condition.  GCC
8158 supports three cases for the way the target machine handles the loop
8159 counter:
8160 @itemize @bullet
8161 @item Loop terminates when the loop register decrements to zero.  This
8162 is represented by a @code{ne} comparison of the register (its old value)
8163 with constant 1 (as in the example above).
8164 @item Loop terminates when the loop register decrements to @minus{}1.
8165 This is represented by a @code{ne} comparison of the register with
8166 constant zero.
8167 @item Loop terminates when the loop register decrements to a negative
8168 value.  This is represented by a @code{ge} comparison of the register
8169 with constant zero.  For this case, GCC will attach a @code{REG_NONNEG}
8170 note to the @code{doloop_end} insn if it can determine that the register
8171 will be non-negative.
8172 @end itemize
8174 Since the @code{doloop_end} insn is a jump insn that also has an output,
8175 the reload pass does not handle the output operand.  Therefore, the
8176 constraint must allow for that operand to be in memory rather than a
8177 register.  In the example shown above, that is handled (in the
8178 @code{doloop_end_insn} pattern) by using a loop instruction sequence
8179 that can handle memory operands when the memory alternative appears.
8181 GCC does not check the mode of the loop register operand when generating
8182 the @code{doloop_end} pattern.  If the pattern is only valid for some
8183 modes but not others, the pattern should be a @code{define_expand}
8184 pattern that checks the operand mode in the preparation code, and issues
8185 @code{FAIL} if an unsupported mode is found.  The example above does
8186 this, since the machine instruction to be used only exists for
8187 @code{HImode}.
8189 If the @code{doloop_end} pattern is a @code{define_expand}, there must
8190 also be a @code{define_insn} or @code{define_insn_and_split} matching
8191 the generated pattern.  Otherwise, the compiler will fail during loop
8192 optimization.
8194 @end ifset
8195 @ifset INTERNALS
8196 @node Insn Canonicalizations
8197 @section Canonicalization of Instructions
8198 @cindex canonicalization of instructions
8199 @cindex insn canonicalization
8201 There are often cases where multiple RTL expressions could represent an
8202 operation performed by a single machine instruction.  This situation is
8203 most commonly encountered with logical, branch, and multiply-accumulate
8204 instructions.  In such cases, the compiler attempts to convert these
8205 multiple RTL expressions into a single canonical form to reduce the
8206 number of insn patterns required.
8208 In addition to algebraic simplifications, following canonicalizations
8209 are performed:
8211 @itemize @bullet
8212 @item
8213 For commutative and comparison operators, a constant is always made the
8214 second operand.  If a machine only supports a constant as the second
8215 operand, only patterns that match a constant in the second operand need
8216 be supplied.
8218 @item
8219 For associative operators, a sequence of operators will always chain
8220 to the left; for instance, only the left operand of an integer @code{plus}
8221 can itself be a @code{plus}.  @code{and}, @code{ior}, @code{xor},
8222 @code{plus}, @code{mult}, @code{smin}, @code{smax}, @code{umin}, and
8223 @code{umax} are associative when applied to integers, and sometimes to
8224 floating-point.
8226 @cindex @code{neg}, canonicalization of
8227 @cindex @code{not}, canonicalization of
8228 @cindex @code{mult}, canonicalization of
8229 @cindex @code{plus}, canonicalization of
8230 @cindex @code{minus}, canonicalization of
8231 @item
8232 For these operators, if only one operand is a @code{neg}, @code{not},
8233 @code{mult}, @code{plus}, or @code{minus} expression, it will be the
8234 first operand.
8236 @item
8237 In combinations of @code{neg}, @code{mult}, @code{plus}, and
8238 @code{minus}, the @code{neg} operations (if any) will be moved inside
8239 the operations as far as possible.  For instance,
8240 @code{(neg (mult A B))} is canonicalized as @code{(mult (neg A) B)}, but
8241 @code{(plus (mult (neg B) C) A)} is canonicalized as
8242 @code{(minus A (mult B C))}.
8244 @cindex @code{compare}, canonicalization of
8245 @item
8246 For the @code{compare} operator, a constant is always the second operand
8247 if the first argument is a condition code register.
8249 @item
8250 For instructions that inherently set a condition code register, the
8251 @code{compare} operator is always written as the first RTL expression of
8252 the @code{parallel} instruction pattern.  For example,
8254 @smallexample
8255 (define_insn ""
8256   [(set (reg:CCZ FLAGS_REG)
8257         (compare:CCZ
8258           (plus:SI
8259             (match_operand:SI 1 "register_operand" "%r")
8260             (match_operand:SI 2 "register_operand" "r"))
8261           (const_int 0)))
8262    (set (match_operand:SI 0 "register_operand" "=r")
8263         (plus:SI (match_dup 1) (match_dup 2)))]
8264   ""
8265   "addl %0, %1, %2")
8266 @end smallexample
8268 @item
8269 An operand of @code{neg}, @code{not}, @code{mult}, @code{plus}, or
8270 @code{minus} is made the first operand under the same conditions as
8271 above.
8273 @item
8274 @code{(ltu (plus @var{a} @var{b}) @var{b})} is converted to
8275 @code{(ltu (plus @var{a} @var{b}) @var{a})}. Likewise with @code{geu} instead
8276 of @code{ltu}.
8278 @item
8279 @code{(minus @var{x} (const_int @var{n}))} is converted to
8280 @code{(plus @var{x} (const_int @var{-n}))}.
8282 @item
8283 Within address computations (i.e., inside @code{mem}), a left shift is
8284 converted into the appropriate multiplication by a power of two.
8286 @cindex @code{ior}, canonicalization of
8287 @cindex @code{and}, canonicalization of
8288 @cindex De Morgan's law
8289 @item
8290 De Morgan's Law is used to move bitwise negation inside a bitwise
8291 logical-and or logical-or operation.  If this results in only one
8292 operand being a @code{not} expression, it will be the first one.
8294 A machine that has an instruction that performs a bitwise logical-and of one
8295 operand with the bitwise negation of the other should specify the pattern
8296 for that instruction as
8298 @smallexample
8299 (define_insn ""
8300   [(set (match_operand:@var{m} 0 @dots{})
8301         (and:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
8302                      (match_operand:@var{m} 2 @dots{})))]
8303   "@dots{}"
8304   "@dots{}")
8305 @end smallexample
8307 @noindent
8308 Similarly, a pattern for a ``NAND'' instruction should be written
8310 @smallexample
8311 (define_insn ""
8312   [(set (match_operand:@var{m} 0 @dots{})
8313         (ior:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
8314                      (not:@var{m} (match_operand:@var{m} 2 @dots{}))))]
8315   "@dots{}"
8316   "@dots{}")
8317 @end smallexample
8319 In both cases, it is not necessary to include patterns for the many
8320 logically equivalent RTL expressions.
8322 @cindex @code{xor}, canonicalization of
8323 @item
8324 The only possible RTL expressions involving both bitwise exclusive-or
8325 and bitwise negation are @code{(xor:@var{m} @var{x} @var{y})}
8326 and @code{(not:@var{m} (xor:@var{m} @var{x} @var{y}))}.
8328 @item
8329 The sum of three items, one of which is a constant, will only appear in
8330 the form
8332 @smallexample
8333 (plus:@var{m} (plus:@var{m} @var{x} @var{y}) @var{constant})
8334 @end smallexample
8336 @cindex @code{zero_extract}, canonicalization of
8337 @cindex @code{sign_extract}, canonicalization of
8338 @item
8339 Equality comparisons of a group of bits (usually a single bit) with zero
8340 will be written using @code{zero_extract} rather than the equivalent
8341 @code{and} or @code{sign_extract} operations.
8343 @cindex @code{mult}, canonicalization of
8344 @item
8345 @code{(sign_extend:@var{m1} (mult:@var{m2} (sign_extend:@var{m2} @var{x})
8346 (sign_extend:@var{m2} @var{y})))} is converted to @code{(mult:@var{m1}
8347 (sign_extend:@var{m1} @var{x}) (sign_extend:@var{m1} @var{y}))}, and likewise
8348 for @code{zero_extend}.
8350 @item
8351 @code{(sign_extend:@var{m1} (mult:@var{m2} (ashiftrt:@var{m2}
8352 @var{x} @var{s}) (sign_extend:@var{m2} @var{y})))} is converted
8353 to @code{(mult:@var{m1} (sign_extend:@var{m1} (ashiftrt:@var{m2}
8354 @var{x} @var{s})) (sign_extend:@var{m1} @var{y}))}, and likewise for
8355 patterns using @code{zero_extend} and @code{lshiftrt}.  If the second
8356 operand of @code{mult} is also a shift, then that is extended also.
8357 This transformation is only applied when it can be proven that the
8358 original operation had sufficient precision to prevent overflow.
8360 @end itemize
8362 Further canonicalization rules are defined in the function
8363 @code{commutative_operand_precedence} in @file{gcc/rtlanal.cc}.
8365 @end ifset
8366 @ifset INTERNALS
8367 @node Expander Definitions
8368 @section Defining RTL Sequences for Code Generation
8369 @cindex expander definitions
8370 @cindex code generation RTL sequences
8371 @cindex defining RTL sequences for code generation
8373 On some target machines, some standard pattern names for RTL generation
8374 cannot be handled with single insn, but a sequence of RTL insns can
8375 represent them.  For these target machines, you can write a
8376 @code{define_expand} to specify how to generate the sequence of RTL@.
8378 @findex define_expand
8379 A @code{define_expand} is an RTL expression that looks almost like a
8380 @code{define_insn}; but, unlike the latter, a @code{define_expand} is used
8381 only for RTL generation and it can produce more than one RTL insn.
8383 A @code{define_expand} RTX has four operands:
8385 @itemize @bullet
8386 @item
8387 The name.  Each @code{define_expand} must have a name, since the only
8388 use for it is to refer to it by name.
8390 @item
8391 The RTL template.  This is a vector of RTL expressions representing
8392 a sequence of separate instructions.  Unlike @code{define_insn}, there
8393 is no implicit surrounding @code{PARALLEL}.
8395 @item
8396 The condition, a string containing a C expression.  This expression is
8397 used to express how the availability of this pattern depends on
8398 subclasses of target machine, selected by command-line options when GCC
8399 is run.  This is just like the condition of a @code{define_insn} that
8400 has a standard name.  Therefore, the condition (if present) may not
8401 depend on the data in the insn being matched, but only the
8402 target-machine-type flags.  The compiler needs to test these conditions
8403 during initialization in order to learn exactly which named instructions
8404 are available in a particular run.
8406 @item
8407 The preparation statements, a string containing zero or more C
8408 statements which are to be executed before RTL code is generated from
8409 the RTL template.
8411 Usually these statements prepare temporary registers for use as
8412 internal operands in the RTL template, but they can also generate RTL
8413 insns directly by calling routines such as @code{emit_insn}, etc.
8414 Any such insns precede the ones that come from the RTL template.
8416 @item
8417 Optionally, a vector containing the values of attributes. @xref{Insn
8418 Attributes}.
8419 @end itemize
8421 Every RTL insn emitted by a @code{define_expand} must match some
8422 @code{define_insn} in the machine description.  Otherwise, the compiler
8423 will crash when trying to generate code for the insn or trying to optimize
8426 The RTL template, in addition to controlling generation of RTL insns,
8427 also describes the operands that need to be specified when this pattern
8428 is used.  In particular, it gives a predicate for each operand.
8430 A true operand, which needs to be specified in order to generate RTL from
8431 the pattern, should be described with a @code{match_operand} in its first
8432 occurrence in the RTL template.  This enters information on the operand's
8433 predicate into the tables that record such things.  GCC uses the
8434 information to preload the operand into a register if that is required for
8435 valid RTL code.  If the operand is referred to more than once, subsequent
8436 references should use @code{match_dup}.
8438 The RTL template may also refer to internal ``operands'' which are
8439 temporary registers or labels used only within the sequence made by the
8440 @code{define_expand}.  Internal operands are substituted into the RTL
8441 template with @code{match_dup}, never with @code{match_operand}.  The
8442 values of the internal operands are not passed in as arguments by the
8443 compiler when it requests use of this pattern.  Instead, they are computed
8444 within the pattern, in the preparation statements.  These statements
8445 compute the values and store them into the appropriate elements of
8446 @code{operands} so that @code{match_dup} can find them.
8448 There are two special macros defined for use in the preparation statements:
8449 @code{DONE} and @code{FAIL}.  Use them with a following semicolon,
8450 as a statement.
8452 @table @code
8454 @findex DONE
8455 @item DONE
8456 Use the @code{DONE} macro to end RTL generation for the pattern.  The
8457 only RTL insns resulting from the pattern on this occasion will be
8458 those already emitted by explicit calls to @code{emit_insn} within the
8459 preparation statements; the RTL template will not be generated.
8461 @findex FAIL
8462 @item FAIL
8463 Make the pattern fail on this occasion.  When a pattern fails, it means
8464 that the pattern was not truly available.  The calling routines in the
8465 compiler will try other strategies for code generation using other patterns.
8467 Failure is currently supported only for binary (addition, multiplication,
8468 shifting, etc.) and bit-field (@code{extv}, @code{extzv}, and @code{insv})
8469 operations.
8470 @end table
8472 If the preparation falls through (invokes neither @code{DONE} nor
8473 @code{FAIL}), then the @code{define_expand} acts like a
8474 @code{define_insn} in that the RTL template is used to generate the
8475 insn.
8477 The RTL template is not used for matching, only for generating the
8478 initial insn list.  If the preparation statement always invokes
8479 @code{DONE} or @code{FAIL}, the RTL template may be reduced to a simple
8480 list of operands, such as this example:
8482 @smallexample
8483 @group
8484 (define_expand "addsi3"
8485   [(match_operand:SI 0 "register_operand" "")
8486    (match_operand:SI 1 "register_operand" "")
8487    (match_operand:SI 2 "register_operand" "")]
8488   ""
8489   "
8491   handle_add (operands[0], operands[1], operands[2]);
8492   DONE;
8493 @}")
8494 @end group
8495 @end smallexample
8497 Here is an example, the definition of left-shift for the SPUR chip:
8499 @smallexample
8500 @group
8501 (define_expand "ashlsi3"
8502   [(set (match_operand:SI 0 "register_operand" "")
8503         (ashift:SI
8504           (match_operand:SI 1 "register_operand" "")
8505           (match_operand:SI 2 "nonmemory_operand" "")))]
8506   ""
8507   "
8509   if (GET_CODE (operands[2]) != CONST_INT
8510       || (unsigned) INTVAL (operands[2]) > 3)
8511     FAIL;
8512 @}")
8513 @end group
8514 @end smallexample
8516 @noindent
8517 This example uses @code{define_expand} so that it can generate an RTL insn
8518 for shifting when the shift-count is in the supported range of 0 to 3 but
8519 fail in other cases where machine insns aren't available.  When it fails,
8520 the compiler tries another strategy using different patterns (such as, a
8521 library call).
8523 If the compiler were able to handle nontrivial condition-strings in
8524 patterns with names, then it would be possible to use a
8525 @code{define_insn} in that case.  Here is another case (zero-extension
8526 on the 68000) which makes more use of the power of @code{define_expand}:
8528 @smallexample
8529 (define_expand "zero_extendhisi2"
8530   [(set (match_operand:SI 0 "general_operand" "")
8531         (const_int 0))
8532    (set (strict_low_part
8533           (subreg:HI
8534             (match_dup 0)
8535             0))
8536         (match_operand:HI 1 "general_operand" ""))]
8537   ""
8538   "operands[1] = make_safe_from (operands[1], operands[0]);")
8539 @end smallexample
8541 @noindent
8542 @findex make_safe_from
8543 Here two RTL insns are generated, one to clear the entire output operand
8544 and the other to copy the input operand into its low half.  This sequence
8545 is incorrect if the input operand refers to [the old value of] the output
8546 operand, so the preparation statement makes sure this isn't so.  The
8547 function @code{make_safe_from} copies the @code{operands[1]} into a
8548 temporary register if it refers to @code{operands[0]}.  It does this
8549 by emitting another RTL insn.
8551 Finally, a third example shows the use of an internal operand.
8552 Zero-extension on the SPUR chip is done by @code{and}-ing the result
8553 against a halfword mask.  But this mask cannot be represented by a
8554 @code{const_int} because the constant value is too large to be legitimate
8555 on this machine.  So it must be copied into a register with
8556 @code{force_reg} and then the register used in the @code{and}.
8558 @smallexample
8559 (define_expand "zero_extendhisi2"
8560   [(set (match_operand:SI 0 "register_operand" "")
8561         (and:SI (subreg:SI
8562                   (match_operand:HI 1 "register_operand" "")
8563                   0)
8564                 (match_dup 2)))]
8565   ""
8566   "operands[2]
8567      = force_reg (SImode, GEN_INT (65535)); ")
8568 @end smallexample
8570 @emph{Note:} If the @code{define_expand} is used to serve a
8571 standard binary or unary arithmetic operation or a bit-field operation,
8572 then the last insn it generates must not be a @code{code_label},
8573 @code{barrier} or @code{note}.  It must be an @code{insn},
8574 @code{jump_insn} or @code{call_insn}.  If you don't need a real insn
8575 at the end, emit an insn to copy the result of the operation into
8576 itself.  Such an insn will generate no code, but it can avoid problems
8577 in the compiler.
8579 @end ifset
8580 @ifset INTERNALS
8581 @node Insn Splitting
8582 @section Defining How to Split Instructions
8583 @cindex insn splitting
8584 @cindex instruction splitting
8585 @cindex splitting instructions
8587 There are two cases where you should specify how to split a pattern
8588 into multiple insns.  On machines that have instructions requiring
8589 delay slots (@pxref{Delay Slots}) or that have instructions whose
8590 output is not available for multiple cycles (@pxref{Processor pipeline
8591 description}), the compiler phases that optimize these cases need to
8592 be able to move insns into one-instruction delay slots.  However, some
8593 insns may generate more than one machine instruction.  These insns
8594 cannot be placed into a delay slot.
8596 Often you can rewrite the single insn as a list of individual insns,
8597 each corresponding to one machine instruction.  The disadvantage of
8598 doing so is that it will cause the compilation to be slower and require
8599 more space.  If the resulting insns are too complex, it may also
8600 suppress some optimizations.  The compiler splits the insn if there is a
8601 reason to believe that it might improve instruction or delay slot
8602 scheduling.
8604 The insn combiner phase also splits putative insns.  If three insns are
8605 merged into one insn with a complex expression that cannot be matched by
8606 some @code{define_insn} pattern, the combiner phase attempts to split
8607 the complex pattern into two insns that are recognized.  Usually it can
8608 break the complex pattern into two patterns by splitting out some
8609 subexpression.  However, in some other cases, such as performing an
8610 addition of a large constant in two insns on a RISC machine, the way to
8611 split the addition into two insns is machine-dependent.
8613 @findex define_split
8614 The @code{define_split} definition tells the compiler how to split a
8615 complex insn into several simpler insns.  It looks like this:
8617 @smallexample
8618 (define_split
8619   [@var{insn-pattern}]
8620   "@var{condition}"
8621   [@var{new-insn-pattern-1}
8622    @var{new-insn-pattern-2}
8623    @dots{}]
8624   "@var{preparation-statements}")
8625 @end smallexample
8627 @var{insn-pattern} is a pattern that needs to be split and
8628 @var{condition} is the final condition to be tested, as in a
8629 @code{define_insn}.  When an insn matching @var{insn-pattern} and
8630 satisfying @var{condition} is found, it is replaced in the insn list
8631 with the insns given by @var{new-insn-pattern-1},
8632 @var{new-insn-pattern-2}, etc.
8634 The @var{preparation-statements} are similar to those statements that
8635 are specified for @code{define_expand} (@pxref{Expander Definitions})
8636 and are executed before the new RTL is generated to prepare for the
8637 generated code or emit some insns whose pattern is not fixed.  Unlike
8638 those in @code{define_expand}, however, these statements must not
8639 generate any new pseudo-registers.  Once reload has completed, they also
8640 must not allocate any space in the stack frame.
8642 There are two special macros defined for use in the preparation statements:
8643 @code{DONE} and @code{FAIL}.  Use them with a following semicolon,
8644 as a statement.
8646 @table @code
8648 @findex DONE
8649 @item DONE
8650 Use the @code{DONE} macro to end RTL generation for the splitter.  The
8651 only RTL insns generated as replacement for the matched input insn will
8652 be those already emitted by explicit calls to @code{emit_insn} within
8653 the preparation statements; the replacement pattern is not used.
8655 @findex FAIL
8656 @item FAIL
8657 Make the @code{define_split} fail on this occasion.  When a @code{define_split}
8658 fails, it means that the splitter was not truly available for the inputs
8659 it was given, and the input insn will not be split.
8660 @end table
8662 If the preparation falls through (invokes neither @code{DONE} nor
8663 @code{FAIL}), then the @code{define_split} uses the replacement
8664 template.
8666 Patterns are matched against @var{insn-pattern} in two different
8667 circumstances.  If an insn needs to be split for delay slot scheduling
8668 or insn scheduling, the insn is already known to be valid, which means
8669 that it must have been matched by some @code{define_insn} and, if
8670 @code{reload_completed} is nonzero, is known to satisfy the constraints
8671 of that @code{define_insn}.  In that case, the new insn patterns must
8672 also be insns that are matched by some @code{define_insn} and, if
8673 @code{reload_completed} is nonzero, must also satisfy the constraints
8674 of those definitions.
8676 As an example of this usage of @code{define_split}, consider the following
8677 example from @file{a29k.md}, which splits a @code{sign_extend} from
8678 @code{HImode} to @code{SImode} into a pair of shift insns:
8680 @smallexample
8681 (define_split
8682   [(set (match_operand:SI 0 "gen_reg_operand" "")
8683         (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
8684   ""
8685   [(set (match_dup 0)
8686         (ashift:SI (match_dup 1)
8687                    (const_int 16)))
8688    (set (match_dup 0)
8689         (ashiftrt:SI (match_dup 0)
8690                      (const_int 16)))]
8691   "
8692 @{ operands[1] = gen_lowpart (SImode, operands[1]); @}")
8693 @end smallexample
8695 When the combiner phase tries to split an insn pattern, it is always the
8696 case that the pattern is @emph{not} matched by any @code{define_insn}.
8697 The combiner pass first tries to split a single @code{set} expression
8698 and then the same @code{set} expression inside a @code{parallel}, but
8699 followed by a @code{clobber} of a pseudo-reg to use as a scratch
8700 register.  In these cases, the combiner expects exactly one or two new insn
8701 patterns to be generated.  It will verify that these patterns match some
8702 @code{define_insn} definitions, so you need not do this test in the
8703 @code{define_split} (of course, there is no point in writing a
8704 @code{define_split} that will never produce insns that match).
8706 Here is an example of this use of @code{define_split}, taken from
8707 @file{rs6000.md}:
8709 @smallexample
8710 (define_split
8711   [(set (match_operand:SI 0 "gen_reg_operand" "")
8712         (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
8713                  (match_operand:SI 2 "non_add_cint_operand" "")))]
8714   ""
8715   [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
8716    (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
8719   int low = INTVAL (operands[2]) & 0xffff;
8720   int high = (unsigned) INTVAL (operands[2]) >> 16;
8722   if (low & 0x8000)
8723     high++, low |= 0xffff0000;
8725   operands[3] = GEN_INT (high << 16);
8726   operands[4] = GEN_INT (low);
8727 @}")
8728 @end smallexample
8730 Here the predicate @code{non_add_cint_operand} matches any
8731 @code{const_int} that is @emph{not} a valid operand of a single add
8732 insn.  The add with the smaller displacement is written so that it
8733 can be substituted into the address of a subsequent operation.
8735 An example that uses a scratch register, from the same file, generates
8736 an equality comparison of a register and a large constant:
8738 @smallexample
8739 (define_split
8740   [(set (match_operand:CC 0 "cc_reg_operand" "")
8741         (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
8742                     (match_operand:SI 2 "non_short_cint_operand" "")))
8743    (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
8744   "find_single_use (operands[0], insn, 0)
8745    && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
8746        || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
8747   [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
8748    (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
8749   "
8751   /* @r{Get the constant we are comparing against, C, and see what it
8752      looks like sign-extended to 16 bits.  Then see what constant
8753      could be XOR'ed with C to get the sign-extended value.}  */
8755   int c = INTVAL (operands[2]);
8756   int sextc = (c << 16) >> 16;
8757   int xorv = c ^ sextc;
8759   operands[4] = GEN_INT (xorv);
8760   operands[5] = GEN_INT (sextc);
8761 @}")
8762 @end smallexample
8764 To avoid confusion, don't write a single @code{define_split} that
8765 accepts some insns that match some @code{define_insn} as well as some
8766 insns that don't.  Instead, write two separate @code{define_split}
8767 definitions, one for the insns that are valid and one for the insns that
8768 are not valid.
8770 The splitter is allowed to split jump instructions into a sequence of jumps or
8771 create new jumps while splitting non-jump instructions.  As the control flow
8772 graph and branch prediction information needs to be updated after the splitter
8773 runs, several restrictions apply.
8775 Splitting of a jump instruction into a sequence that has another jump
8776 instruction to the same label is always valid, as the compiler expects
8777 identical behavior of the new jump.  When the new sequence contains multiple
8778 jump instructions or new labels, more assistance is needed.  The splitter is
8779 permitted to create only unconditional jumps, or simple conditional jump
8780 instructions.  Additionally it must attach a @code{REG_BR_PROB} note to each
8781 conditional jump.  A global variable @code{split_branch_probability} holds the
8782 probability of the original branch in case it was a simple conditional jump,
8783 @minus{}1 otherwise.  To simplify recomputing of edge frequencies, the new
8784 sequence is permitted to have only forward jumps to the newly-created labels.
8786 @findex define_insn_and_split
8787 For the common case where the pattern of a define_split exactly matches the
8788 pattern of a define_insn, use @code{define_insn_and_split}.  It looks like
8789 this:
8791 @smallexample
8792 (define_insn_and_split
8793   [@var{insn-pattern}]
8794   "@var{condition}"
8795   "@var{output-template}"
8796   "@var{split-condition}"
8797   [@var{new-insn-pattern-1}
8798    @var{new-insn-pattern-2}
8799    @dots{}]
8800   "@var{preparation-statements}"
8801   [@var{insn-attributes}])
8803 @end smallexample
8805 @var{insn-pattern}, @var{condition}, @var{output-template}, and
8806 @var{insn-attributes} are used as in @code{define_insn}.  The
8807 @var{new-insn-pattern} vector and the @var{preparation-statements} are used as
8808 in a @code{define_split}.  The @var{split-condition} is also used as in
8809 @code{define_split}, with the additional behavior that if the condition starts
8810 with @samp{&&}, the condition used for the split will be the constructed as a
8811 logical ``and'' of the split condition with the insn condition.  For example,
8812 from i386.md:
8814 @smallexample
8815 (define_insn_and_split "zero_extendhisi2_and"
8816   [(set (match_operand:SI 0 "register_operand" "=r")
8817      (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
8818    (clobber (reg:CC 17))]
8819   "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
8820   "#"
8821   "&& reload_completed"
8822   [(parallel [(set (match_dup 0)
8823                    (and:SI (match_dup 0) (const_int 65535)))
8824               (clobber (reg:CC 17))])]
8825   ""
8826   [(set_attr "type" "alu1")])
8828 @end smallexample
8830 In this case, the actual split condition will be
8831 @samp{TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed}.
8833 The @code{define_insn_and_split} construction provides exactly the same
8834 functionality as two separate @code{define_insn} and @code{define_split}
8835 patterns.  It exists for compactness, and as a maintenance tool to prevent
8836 having to ensure the two patterns' templates match.
8838 @findex define_insn_and_rewrite
8839 It is sometimes useful to have a @code{define_insn_and_split}
8840 that replaces specific operands of an instruction but leaves the
8841 rest of the instruction pattern unchanged.  You can do this directly
8842 with a @code{define_insn_and_split}, but it requires a
8843 @var{new-insn-pattern-1} that repeats most of the original @var{insn-pattern}.
8844 There is also the complication that an implicit @code{parallel} in
8845 @var{insn-pattern} must become an explicit @code{parallel} in
8846 @var{new-insn-pattern-1}, which is easy to overlook.
8847 A simpler alternative is to use @code{define_insn_and_rewrite}, which
8848 is a form of @code{define_insn_and_split} that automatically generates
8849 @var{new-insn-pattern-1} by replacing each @code{match_operand}
8850 in @var{insn-pattern} with a corresponding @code{match_dup}, and each
8851 @code{match_operator} in the pattern with a corresponding @code{match_op_dup}.
8852 The arguments are otherwise identical to @code{define_insn_and_split}:
8854 @smallexample
8855 (define_insn_and_rewrite
8856   [@var{insn-pattern}]
8857   "@var{condition}"
8858   "@var{output-template}"
8859   "@var{split-condition}"
8860   "@var{preparation-statements}"
8861   [@var{insn-attributes}])
8862 @end smallexample
8864 The @code{match_dup}s and @code{match_op_dup}s in the new
8865 instruction pattern use any new operand values that the
8866 @var{preparation-statements} store in the @code{operands} array,
8867 as for a normal @code{define_insn_and_split}.  @var{preparation-statements}
8868 can also emit additional instructions before the new instruction.
8869 They can even emit an entirely different sequence of instructions and
8870 use @code{DONE} to avoid emitting a new form of the original
8871 instruction.
8873 The split in a @code{define_insn_and_rewrite} is only intended
8874 to apply to existing instructions that match @var{insn-pattern}.
8875 @var{split-condition} must therefore start with @code{&&},
8876 so that the split condition applies on top of @var{condition}.
8878 Here is an example from the AArch64 SVE port, in which operand 1 is
8879 known to be equivalent to an all-true constant and isn't used by the
8880 output template:
8882 @smallexample
8883 (define_insn_and_rewrite "*while_ult<GPI:mode><PRED_ALL:mode>_cc"
8884   [(set (reg:CC CC_REGNUM)
8885         (compare:CC
8886           (unspec:SI [(match_operand:PRED_ALL 1)
8887                       (unspec:PRED_ALL
8888                         [(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ")
8889                          (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ")]
8890                         UNSPEC_WHILE_LO)]
8891                      UNSPEC_PTEST_PTRUE)
8892           (const_int 0)))
8893    (set (match_operand:PRED_ALL 0 "register_operand" "=Upa")
8894         (unspec:PRED_ALL [(match_dup 2)
8895                           (match_dup 3)]
8896                          UNSPEC_WHILE_LO))]
8897   "TARGET_SVE"
8898   "whilelo\t%0.<PRED_ALL:Vetype>, %<w>2, %<w>3"
8899   ;; Force the compiler to drop the unused predicate operand, so that we
8900   ;; don't have an unnecessary PTRUE.
8901   "&& !CONSTANT_P (operands[1])"
8902   @{
8903     operands[1] = CONSTM1_RTX (<MODE>mode);
8904   @}
8906 @end smallexample
8908 The splitter in this case simply replaces operand 1 with the constant
8909 value that it is known to have.  The equivalent @code{define_insn_and_split}
8910 would be:
8912 @smallexample
8913 (define_insn_and_split "*while_ult<GPI:mode><PRED_ALL:mode>_cc"
8914   [(set (reg:CC CC_REGNUM)
8915         (compare:CC
8916           (unspec:SI [(match_operand:PRED_ALL 1)
8917                       (unspec:PRED_ALL
8918                         [(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ")
8919                          (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ")]
8920                         UNSPEC_WHILE_LO)]
8921                      UNSPEC_PTEST_PTRUE)
8922           (const_int 0)))
8923    (set (match_operand:PRED_ALL 0 "register_operand" "=Upa")
8924         (unspec:PRED_ALL [(match_dup 2)
8925                           (match_dup 3)]
8926                          UNSPEC_WHILE_LO))]
8927   "TARGET_SVE"
8928   "whilelo\t%0.<PRED_ALL:Vetype>, %<w>2, %<w>3"
8929   ;; Force the compiler to drop the unused predicate operand, so that we
8930   ;; don't have an unnecessary PTRUE.
8931   "&& !CONSTANT_P (operands[1])"
8932   [(parallel
8933      [(set (reg:CC CC_REGNUM)
8934            (compare:CC
8935              (unspec:SI [(match_dup 1)
8936                          (unspec:PRED_ALL [(match_dup 2)
8937                                            (match_dup 3)]
8938                                           UNSPEC_WHILE_LO)]
8939                         UNSPEC_PTEST_PTRUE)
8940              (const_int 0)))
8941       (set (match_dup 0)
8942            (unspec:PRED_ALL [(match_dup 2)
8943                              (match_dup 3)]
8944                             UNSPEC_WHILE_LO))])]
8945   @{
8946     operands[1] = CONSTM1_RTX (<MODE>mode);
8947   @}
8949 @end smallexample
8951 @end ifset
8952 @ifset INTERNALS
8953 @node Including Patterns
8954 @section Including Patterns in Machine Descriptions.
8955 @cindex insn includes
8957 @findex include
8958 The @code{include} pattern tells the compiler tools where to
8959 look for patterns that are in files other than in the file
8960 @file{.md}.  This is used only at build time and there is no preprocessing allowed.
8962 It looks like:
8964 @smallexample
8966 (include @var{pathname})
8967 @end smallexample
8969 For example:
8971 @smallexample
8973 (include "filestuff")
8975 @end smallexample
8977 Where @var{pathname} is a string that specifies the location of the file,
8978 specifies the include file to be in @file{gcc/config/target/filestuff}.  The
8979 directory @file{gcc/config/target} is regarded as the default directory.
8982 Machine descriptions may be split up into smaller more manageable subsections
8983 and placed into subdirectories.
8985 By specifying:
8987 @smallexample
8989 (include "BOGUS/filestuff")
8991 @end smallexample
8993 the include file is specified to be in @file{gcc/config/@var{target}/BOGUS/filestuff}.
8995 Specifying an absolute path for the include file such as;
8996 @smallexample
8998 (include "/u2/BOGUS/filestuff")
9000 @end smallexample
9001 is permitted but is not encouraged.
9003 @subsection RTL Generation Tool Options for Directory Search
9004 @cindex directory options .md
9005 @cindex options, directory search
9006 @cindex search options
9008 The @option{-I@var{dir}} option specifies directories to search for machine descriptions.
9009 For example:
9011 @smallexample
9013 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
9015 @end smallexample
9018 Add the directory @var{dir} to the head of the list of directories to be
9019 searched for header files.  This can be used to override a system machine definition
9020 file, substituting your own version, since these directories are
9021 searched before the default machine description file directories.  If you use more than
9022 one @option{-I} option, the directories are scanned in left-to-right
9023 order; the standard default directory come after.
9026 @end ifset
9027 @ifset INTERNALS
9028 @node Peephole Definitions
9029 @section Machine-Specific Peephole Optimizers
9030 @cindex peephole optimizer definitions
9031 @cindex defining peephole optimizers
9033 In addition to instruction patterns the @file{md} file may contain
9034 definitions of machine-specific peephole optimizations.
9036 The combiner does not notice certain peephole optimizations when the data
9037 flow in the program does not suggest that it should try them.  For example,
9038 sometimes two consecutive insns related in purpose can be combined even
9039 though the second one does not appear to use a register computed in the
9040 first one.  A machine-specific peephole optimizer can detect such
9041 opportunities.
9043 There are two forms of peephole definitions that may be used.  The
9044 original @code{define_peephole} is run at assembly output time to
9045 match insns and substitute assembly text.  Use of @code{define_peephole}
9046 is deprecated.
9048 A newer @code{define_peephole2} matches insns and substitutes new
9049 insns.  The @code{peephole2} pass is run after register allocation
9050 but before scheduling, which may result in much better code for
9051 targets that do scheduling.
9053 @menu
9054 * define_peephole::     RTL to Text Peephole Optimizers
9055 * define_peephole2::    RTL to RTL Peephole Optimizers
9056 @end menu
9058 @end ifset
9059 @ifset INTERNALS
9060 @node define_peephole
9061 @subsection RTL to Text Peephole Optimizers
9062 @findex define_peephole
9064 @need 1000
9065 A definition looks like this:
9067 @smallexample
9068 (define_peephole
9069   [@var{insn-pattern-1}
9070    @var{insn-pattern-2}
9071    @dots{}]
9072   "@var{condition}"
9073   "@var{template}"
9074   "@var{optional-insn-attributes}")
9075 @end smallexample
9077 @noindent
9078 The last string operand may be omitted if you are not using any
9079 machine-specific information in this machine description.  If present,
9080 it must obey the same rules as in a @code{define_insn}.
9082 In this skeleton, @var{insn-pattern-1} and so on are patterns to match
9083 consecutive insns.  The optimization applies to a sequence of insns when
9084 @var{insn-pattern-1} matches the first one, @var{insn-pattern-2} matches
9085 the next, and so on.
9087 Each of the insns matched by a peephole must also match a
9088 @code{define_insn}.  Peepholes are checked only at the last stage just
9089 before code generation, and only optionally.  Therefore, any insn which
9090 would match a peephole but no @code{define_insn} will cause a crash in code
9091 generation in an unoptimized compilation, or at various optimization
9092 stages.
9094 The operands of the insns are matched with @code{match_operands},
9095 @code{match_operator}, and @code{match_dup}, as usual.  What is not
9096 usual is that the operand numbers apply to all the insn patterns in the
9097 definition.  So, you can check for identical operands in two insns by
9098 using @code{match_operand} in one insn and @code{match_dup} in the
9099 other.
9101 The operand constraints used in @code{match_operand} patterns do not have
9102 any direct effect on the applicability of the peephole, but they will
9103 be validated afterward, so make sure your constraints are general enough
9104 to apply whenever the peephole matches.  If the peephole matches
9105 but the constraints are not satisfied, the compiler will crash.
9107 It is safe to omit constraints in all the operands of the peephole; or
9108 you can write constraints which serve as a double-check on the criteria
9109 previously tested.
9111 Once a sequence of insns matches the patterns, the @var{condition} is
9112 checked.  This is a C expression which makes the final decision whether to
9113 perform the optimization (we do so if the expression is nonzero).  If
9114 @var{condition} is omitted (in other words, the string is empty) then the
9115 optimization is applied to every sequence of insns that matches the
9116 patterns.
9118 The defined peephole optimizations are applied after register allocation
9119 is complete.  Therefore, the peephole definition can check which
9120 operands have ended up in which kinds of registers, just by looking at
9121 the operands.
9123 @findex prev_active_insn
9124 The way to refer to the operands in @var{condition} is to write
9125 @code{operands[@var{i}]} for operand number @var{i} (as matched by
9126 @code{(match_operand @var{i} @dots{})}).  Use the variable @code{insn}
9127 to refer to the last of the insns being matched; use
9128 @code{prev_active_insn} to find the preceding insns.
9130 @findex dead_or_set_p
9131 When optimizing computations with intermediate results, you can use
9132 @var{condition} to match only when the intermediate results are not used
9133 elsewhere.  Use the C expression @code{dead_or_set_p (@var{insn},
9134 @var{op})}, where @var{insn} is the insn in which you expect the value
9135 to be used for the last time (from the value of @code{insn}, together
9136 with use of @code{prev_nonnote_insn}), and @var{op} is the intermediate
9137 value (from @code{operands[@var{i}]}).
9139 Applying the optimization means replacing the sequence of insns with one
9140 new insn.  The @var{template} controls ultimate output of assembler code
9141 for this combined insn.  It works exactly like the template of a
9142 @code{define_insn}.  Operand numbers in this template are the same ones
9143 used in matching the original sequence of insns.
9145 The result of a defined peephole optimizer does not need to match any of
9146 the insn patterns in the machine description; it does not even have an
9147 opportunity to match them.  The peephole optimizer definition itself serves
9148 as the insn pattern to control how the insn is output.
9150 Defined peephole optimizers are run as assembler code is being output,
9151 so the insns they produce are never combined or rearranged in any way.
9153 Here is an example, taken from the 68000 machine description:
9155 @smallexample
9156 (define_peephole
9157   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
9158    (set (match_operand:DF 0 "register_operand" "=f")
9159         (match_operand:DF 1 "register_operand" "ad"))]
9160   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
9162   rtx xoperands[2];
9163   xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
9164 #ifdef MOTOROLA
9165   output_asm_insn ("move.l %1,(sp)", xoperands);
9166   output_asm_insn ("move.l %1,-(sp)", operands);
9167   return "fmove.d (sp)+,%0";
9168 #else
9169   output_asm_insn ("movel %1,sp@@", xoperands);
9170   output_asm_insn ("movel %1,sp@@-", operands);
9171   return "fmoved sp@@+,%0";
9172 #endif
9174 @end smallexample
9176 @need 1000
9177 The effect of this optimization is to change
9179 @smallexample
9180 @group
9181 jbsr _foobar
9182 addql #4,sp
9183 movel d1,sp@@-
9184 movel d0,sp@@-
9185 fmoved sp@@+,fp0
9186 @end group
9187 @end smallexample
9189 @noindent
9190 into
9192 @smallexample
9193 @group
9194 jbsr _foobar
9195 movel d1,sp@@
9196 movel d0,sp@@-
9197 fmoved sp@@+,fp0
9198 @end group
9199 @end smallexample
9201 @ignore
9202 @findex CC_REVERSED
9203 If a peephole matches a sequence including one or more jump insns, you must
9204 take account of the flags such as @code{CC_REVERSED} which specify that the
9205 condition codes are represented in an unusual manner.  The compiler
9206 automatically alters any ordinary conditional jumps which occur in such
9207 situations, but the compiler cannot alter jumps which have been replaced by
9208 peephole optimizations.  So it is up to you to alter the assembler code
9209 that the peephole produces.  Supply C code to write the assembler output,
9210 and in this C code check the condition code status flags and change the
9211 assembler code as appropriate.
9212 @end ignore
9214 @var{insn-pattern-1} and so on look @emph{almost} like the second
9215 operand of @code{define_insn}.  There is one important difference: the
9216 second operand of @code{define_insn} consists of one or more RTX's
9217 enclosed in square brackets.  Usually, there is only one: then the same
9218 action can be written as an element of a @code{define_peephole}.  But
9219 when there are multiple actions in a @code{define_insn}, they are
9220 implicitly enclosed in a @code{parallel}.  Then you must explicitly
9221 write the @code{parallel}, and the square brackets within it, in the
9222 @code{define_peephole}.  Thus, if an insn pattern looks like this,
9224 @smallexample
9225 (define_insn "divmodsi4"
9226   [(set (match_operand:SI 0 "general_operand" "=d")
9227         (div:SI (match_operand:SI 1 "general_operand" "0")
9228                 (match_operand:SI 2 "general_operand" "dmsK")))
9229    (set (match_operand:SI 3 "general_operand" "=d")
9230         (mod:SI (match_dup 1) (match_dup 2)))]
9231   "TARGET_68020"
9232   "divsl%.l %2,%3:%0")
9233 @end smallexample
9235 @noindent
9236 then the way to mention this insn in a peephole is as follows:
9238 @smallexample
9239 (define_peephole
9240   [@dots{}
9241    (parallel
9242     [(set (match_operand:SI 0 "general_operand" "=d")
9243           (div:SI (match_operand:SI 1 "general_operand" "0")
9244                   (match_operand:SI 2 "general_operand" "dmsK")))
9245      (set (match_operand:SI 3 "general_operand" "=d")
9246           (mod:SI (match_dup 1) (match_dup 2)))])
9247    @dots{}]
9248   @dots{})
9249 @end smallexample
9251 @end ifset
9252 @ifset INTERNALS
9253 @node define_peephole2
9254 @subsection RTL to RTL Peephole Optimizers
9255 @findex define_peephole2
9257 The @code{define_peephole2} definition tells the compiler how to
9258 substitute one sequence of instructions for another sequence,
9259 what additional scratch registers may be needed and what their
9260 lifetimes must be.
9262 @smallexample
9263 (define_peephole2
9264   [@var{insn-pattern-1}
9265    @var{insn-pattern-2}
9266    @dots{}]
9267   "@var{condition}"
9268   [@var{new-insn-pattern-1}
9269    @var{new-insn-pattern-2}
9270    @dots{}]
9271   "@var{preparation-statements}")
9272 @end smallexample
9274 The definition is almost identical to @code{define_split}
9275 (@pxref{Insn Splitting}) except that the pattern to match is not a
9276 single instruction, but a sequence of instructions.
9278 It is possible to request additional scratch registers for use in the
9279 output template.  If appropriate registers are not free, the pattern
9280 will simply not match.
9282 @findex match_scratch
9283 @findex match_dup
9284 Scratch registers are requested with a @code{match_scratch} pattern at
9285 the top level of the input pattern.  The allocated register (initially) will
9286 be dead at the point requested within the original sequence.  If the scratch
9287 is used at more than a single point, a @code{match_dup} pattern at the
9288 top level of the input pattern marks the last position in the input sequence
9289 at which the register must be available.
9291 Here is an example from the IA-32 machine description:
9293 @smallexample
9294 (define_peephole2
9295   [(match_scratch:SI 2 "r")
9296    (parallel [(set (match_operand:SI 0 "register_operand" "")
9297                    (match_operator:SI 3 "arith_or_logical_operator"
9298                      [(match_dup 0)
9299                       (match_operand:SI 1 "memory_operand" "")]))
9300               (clobber (reg:CC 17))])]
9301   "! optimize_size && ! TARGET_READ_MODIFY"
9302   [(set (match_dup 2) (match_dup 1))
9303    (parallel [(set (match_dup 0)
9304                    (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
9305               (clobber (reg:CC 17))])]
9306   "")
9307 @end smallexample
9309 @noindent
9310 This pattern tries to split a load from its use in the hopes that we'll be
9311 able to schedule around the memory load latency.  It allocates a single
9312 @code{SImode} register of class @code{GENERAL_REGS} (@code{"r"}) that needs
9313 to be live only at the point just before the arithmetic.
9315 A real example requiring extended scratch lifetimes is harder to come by,
9316 so here's a silly made-up example:
9318 @smallexample
9319 (define_peephole2
9320   [(match_scratch:SI 4 "r")
9321    (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
9322    (set (match_operand:SI 2 "" "") (match_dup 1))
9323    (match_dup 4)
9324    (set (match_operand:SI 3 "" "") (match_dup 1))]
9325   "/* @r{determine 1 does not overlap 0 and 2} */"
9326   [(set (match_dup 4) (match_dup 1))
9327    (set (match_dup 0) (match_dup 4))
9328    (set (match_dup 2) (match_dup 4))
9329    (set (match_dup 3) (match_dup 4))]
9330   "")
9331 @end smallexample
9333 @noindent
9334 If we had not added the @code{(match_dup 4)} in the middle of the input
9335 sequence, it might have been the case that the register we chose at the
9336 beginning of the sequence is killed by the first or second @code{set}.
9338 There are two special macros defined for use in the preparation statements:
9339 @code{DONE} and @code{FAIL}.  Use them with a following semicolon,
9340 as a statement.
9342 @table @code
9344 @findex DONE
9345 @item DONE
9346 Use the @code{DONE} macro to end RTL generation for the peephole.  The
9347 only RTL insns generated as replacement for the matched input insn will
9348 be those already emitted by explicit calls to @code{emit_insn} within
9349 the preparation statements; the replacement pattern is not used.
9351 @findex FAIL
9352 @item FAIL
9353 Make the @code{define_peephole2} fail on this occasion.  When a @code{define_peephole2}
9354 fails, it means that the replacement was not truly available for the
9355 particular inputs it was given.  In that case, GCC may still apply a
9356 later @code{define_peephole2} that also matches the given insn pattern.
9357 (Note that this is different from @code{define_split}, where @code{FAIL}
9358 prevents the input insn from being split at all.)
9359 @end table
9361 If the preparation falls through (invokes neither @code{DONE} nor
9362 @code{FAIL}), then the @code{define_peephole2} uses the replacement
9363 template.
9365 @end ifset
9366 @ifset INTERNALS
9367 @node Insn Attributes
9368 @section Instruction Attributes
9369 @cindex insn attributes
9370 @cindex instruction attributes
9372 In addition to describing the instruction supported by the target machine,
9373 the @file{md} file also defines a group of @dfn{attributes} and a set of
9374 values for each.  Every generated insn is assigned a value for each attribute.
9375 One possible attribute would be the effect that the insn has on the machine's
9376 condition code.
9378 @menu
9379 * Defining Attributes:: Specifying attributes and their values.
9380 * Expressions::         Valid expressions for attribute values.
9381 * Tagging Insns::       Assigning attribute values to insns.
9382 * Attr Example::        An example of assigning attributes.
9383 * Insn Lengths::        Computing the length of insns.
9384 * Constant Attributes:: Defining attributes that are constant.
9385 * Mnemonic Attribute::  Obtain the instruction mnemonic as attribute value.
9386 * Delay Slots::         Defining delay slots required for a machine.
9387 * Processor pipeline description:: Specifying information for insn scheduling.
9388 @end menu
9390 @end ifset
9391 @ifset INTERNALS
9392 @node Defining Attributes
9393 @subsection Defining Attributes and their Values
9394 @cindex defining attributes and their values
9395 @cindex attributes, defining
9397 @findex define_attr
9398 The @code{define_attr} expression is used to define each attribute required
9399 by the target machine.  It looks like:
9401 @smallexample
9402 (define_attr @var{name} @var{list-of-values} @var{default})
9403 @end smallexample
9405 @var{name} is a string specifying the name of the attribute being
9406 defined.  Some attributes are used in a special way by the rest of the
9407 compiler. The @code{enabled} attribute can be used to conditionally
9408 enable or disable insn alternatives (@pxref{Disable Insn
9409 Alternatives}). The @code{predicable} attribute, together with a
9410 suitable @code{define_cond_exec} (@pxref{Conditional Execution}), can
9411 be used to automatically generate conditional variants of instruction
9412 patterns. The @code{mnemonic} attribute can be used to check for the
9413 instruction mnemonic (@pxref{Mnemonic Attribute}).  The compiler
9414 internally uses the names @code{ce_enabled} and @code{nonce_enabled},
9415 so they should not be used elsewhere as alternative names.
9417 @var{list-of-values} is either a string that specifies a comma-separated
9418 list of values that can be assigned to the attribute, or a null string to
9419 indicate that the attribute takes numeric values.
9421 @var{default} is an attribute expression that gives the value of this
9422 attribute for insns that match patterns whose definition does not include
9423 an explicit value for this attribute.  @xref{Attr Example}, for more
9424 information on the handling of defaults.  @xref{Constant Attributes},
9425 for information on attributes that do not depend on any particular insn.
9427 @findex insn-attr.h
9428 For each defined attribute, a number of definitions are written to the
9429 @file{insn-attr.h} file.  For cases where an explicit set of values is
9430 specified for an attribute, the following are defined:
9432 @itemize @bullet
9433 @item
9434 A @samp{#define} is written for the symbol @samp{HAVE_ATTR_@var{name}}.
9436 @item
9437 An enumerated class is defined for @samp{attr_@var{name}} with
9438 elements of the form @samp{@var{upper-name}_@var{upper-value}} where
9439 the attribute name and value are first converted to uppercase.
9441 @item
9442 A function @samp{get_attr_@var{name}} is defined that is passed an insn and
9443 returns the attribute value for that insn.
9444 @end itemize
9446 For example, if the following is present in the @file{md} file:
9448 @smallexample
9449 (define_attr "type" "branch,fp,load,store,arith" @dots{})
9450 @end smallexample
9452 @noindent
9453 the following lines will be written to the file @file{insn-attr.h}.
9455 @smallexample
9456 #define HAVE_ATTR_type 1
9457 enum attr_type @{TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
9458                  TYPE_STORE, TYPE_ARITH@};
9459 extern enum attr_type get_attr_type ();
9460 @end smallexample
9462 If the attribute takes numeric values, no @code{enum} type will be
9463 defined and the function to obtain the attribute's value will return
9464 @code{int}.
9466 There are attributes which are tied to a specific meaning.  These
9467 attributes are not free to use for other purposes:
9469 @table @code
9470 @item length
9471 The @code{length} attribute is used to calculate the length of emitted
9472 code chunks.  This is especially important when verifying branch
9473 distances. @xref{Insn Lengths}.
9475 @item enabled
9476 The @code{enabled} attribute can be defined to prevent certain
9477 alternatives of an insn definition from being used during code
9478 generation. @xref{Disable Insn Alternatives}.
9480 @item mnemonic
9481 The @code{mnemonic} attribute can be defined to implement instruction
9482 specific checks in e.g.@: the pipeline description.
9483 @xref{Mnemonic Attribute}.
9484 @end table
9486 For each of these special attributes, the corresponding
9487 @samp{HAVE_ATTR_@var{name}} @samp{#define} is also written when the
9488 attribute is not defined; in that case, it is defined as @samp{0}.
9490 @findex define_enum_attr
9491 @anchor{define_enum_attr}
9492 Another way of defining an attribute is to use:
9494 @smallexample
9495 (define_enum_attr "@var{attr}" "@var{enum}" @var{default})
9496 @end smallexample
9498 This works in just the same way as @code{define_attr}, except that
9499 the list of values is taken from a separate enumeration called
9500 @var{enum} (@pxref{define_enum}).  This form allows you to use
9501 the same list of values for several attributes without having to
9502 repeat the list each time.  For example:
9504 @smallexample
9505 (define_enum "processor" [
9506   model_a
9507   model_b
9508   @dots{}
9510 (define_enum_attr "arch" "processor"
9511   (const (symbol_ref "target_arch")))
9512 (define_enum_attr "tune" "processor"
9513   (const (symbol_ref "target_tune")))
9514 @end smallexample
9516 defines the same attributes as:
9518 @smallexample
9519 (define_attr "arch" "model_a,model_b,@dots{}"
9520   (const (symbol_ref "target_arch")))
9521 (define_attr "tune" "model_a,model_b,@dots{}"
9522   (const (symbol_ref "target_tune")))
9523 @end smallexample
9525 but without duplicating the processor list.  The second example defines two
9526 separate C enums (@code{attr_arch} and @code{attr_tune}) whereas the first
9527 defines a single C enum (@code{processor}).
9528 @end ifset
9529 @ifset INTERNALS
9530 @node Expressions
9531 @subsection Attribute Expressions
9532 @cindex attribute expressions
9534 RTL expressions used to define attributes use the codes described above
9535 plus a few specific to attribute definitions, to be discussed below.
9536 Attribute value expressions must have one of the following forms:
9538 @table @code
9539 @cindex @code{const_int} and attributes
9540 @item (const_int @var{i})
9541 The integer @var{i} specifies the value of a numeric attribute.  @var{i}
9542 must be non-negative.
9544 The value of a numeric attribute can be specified either with a
9545 @code{const_int}, or as an integer represented as a string in
9546 @code{const_string}, @code{eq_attr} (see below), @code{attr},
9547 @code{symbol_ref}, simple arithmetic expressions, and @code{set_attr}
9548 overrides on specific instructions (@pxref{Tagging Insns}).
9550 @cindex @code{const_string} and attributes
9551 @item (const_string @var{value})
9552 The string @var{value} specifies a constant attribute value.
9553 If @var{value} is specified as @samp{"*"}, it means that the default value of
9554 the attribute is to be used for the insn containing this expression.
9555 @samp{"*"} obviously cannot be used in the @var{default} expression
9556 of a @code{define_attr}.
9558 If the attribute whose value is being specified is numeric, @var{value}
9559 must be a string containing a non-negative integer (normally
9560 @code{const_int} would be used in this case).  Otherwise, it must
9561 contain one of the valid values for the attribute.
9563 @cindex @code{if_then_else} and attributes
9564 @item (if_then_else @var{test} @var{true-value} @var{false-value})
9565 @var{test} specifies an attribute test, whose format is defined below.
9566 The value of this expression is @var{true-value} if @var{test} is true,
9567 otherwise it is @var{false-value}.
9569 @cindex @code{cond} and attributes
9570 @item (cond [@var{test1} @var{value1} @dots{}] @var{default})
9571 The first operand of this expression is a vector containing an even
9572 number of expressions and consisting of pairs of @var{test} and @var{value}
9573 expressions.  The value of the @code{cond} expression is that of the
9574 @var{value} corresponding to the first true @var{test} expression.  If
9575 none of the @var{test} expressions are true, the value of the @code{cond}
9576 expression is that of the @var{default} expression.
9577 @end table
9579 @var{test} expressions can have one of the following forms:
9581 @table @code
9582 @cindex @code{const_int} and attribute tests
9583 @item (const_int @var{i})
9584 This test is true if @var{i} is nonzero and false otherwise.
9586 @cindex @code{not} and attributes
9587 @cindex @code{ior} and attributes
9588 @cindex @code{and} and attributes
9589 @item (not @var{test})
9590 @itemx (ior @var{test1} @var{test2})
9591 @itemx (and @var{test1} @var{test2})
9592 These tests are true if the indicated logical function is true.
9594 @cindex @code{match_operand} and attributes
9595 @item (match_operand:@var{m} @var{n} @var{pred} @var{constraints})
9596 This test is true if operand @var{n} of the insn whose attribute value
9597 is being determined has mode @var{m} (this part of the test is ignored
9598 if @var{m} is @code{VOIDmode}) and the function specified by the string
9599 @var{pred} returns a nonzero value when passed operand @var{n} and mode
9600 @var{m} (this part of the test is ignored if @var{pred} is the null
9601 string).
9603 The @var{constraints} operand is ignored and should be the null string.
9605 @cindex @code{match_test} and attributes
9606 @item (match_test @var{c-expr})
9607 The test is true if C expression @var{c-expr} is true.  In non-constant
9608 attributes, @var{c-expr} has access to the following variables:
9610 @table @var
9611 @item insn
9612 The rtl instruction under test.
9613 @item which_alternative
9614 The @code{define_insn} alternative that @var{insn} matches.
9615 @xref{Output Statement}.
9616 @item operands
9617 An array of @var{insn}'s rtl operands.
9618 @end table
9620 @var{c-expr} behaves like the condition in a C @code{if} statement,
9621 so there is no need to explicitly convert the expression into a boolean
9622 0 or 1 value.  For example, the following two tests are equivalent:
9624 @smallexample
9625 (match_test "x & 2")
9626 (match_test "(x & 2) != 0")
9627 @end smallexample
9629 @cindex @code{le} and attributes
9630 @cindex @code{leu} and attributes
9631 @cindex @code{lt} and attributes
9632 @cindex @code{gt} and attributes
9633 @cindex @code{gtu} and attributes
9634 @cindex @code{ge} and attributes
9635 @cindex @code{geu} and attributes
9636 @cindex @code{ne} and attributes
9637 @cindex @code{eq} and attributes
9638 @cindex @code{plus} and attributes
9639 @cindex @code{minus} and attributes
9640 @cindex @code{mult} and attributes
9641 @cindex @code{div} and attributes
9642 @cindex @code{mod} and attributes
9643 @cindex @code{abs} and attributes
9644 @cindex @code{neg} and attributes
9645 @cindex @code{ashift} and attributes
9646 @cindex @code{lshiftrt} and attributes
9647 @cindex @code{ashiftrt} and attributes
9648 @item (le @var{arith1} @var{arith2})
9649 @itemx (leu @var{arith1} @var{arith2})
9650 @itemx (lt @var{arith1} @var{arith2})
9651 @itemx (ltu @var{arith1} @var{arith2})
9652 @itemx (gt @var{arith1} @var{arith2})
9653 @itemx (gtu @var{arith1} @var{arith2})
9654 @itemx (ge @var{arith1} @var{arith2})
9655 @itemx (geu @var{arith1} @var{arith2})
9656 @itemx (ne @var{arith1} @var{arith2})
9657 @itemx (eq @var{arith1} @var{arith2})
9658 These tests are true if the indicated comparison of the two arithmetic
9659 expressions is true.  Arithmetic expressions are formed with
9660 @code{plus}, @code{minus}, @code{mult}, @code{div}, @code{mod},
9661 @code{abs}, @code{neg}, @code{and}, @code{ior}, @code{xor}, @code{not},
9662 @code{ashift}, @code{lshiftrt}, and @code{ashiftrt} expressions.
9664 @findex get_attr
9665 @code{const_int} and @code{symbol_ref} are always valid terms (@pxref{Insn
9666 Lengths},for additional forms).  @code{symbol_ref} is a string
9667 denoting a C expression that yields an @code{int} when evaluated by the
9668 @samp{get_attr_@dots{}} routine.  It should normally be a global
9669 variable.
9671 @findex eq_attr
9672 @item (eq_attr @var{name} @var{value})
9673 @var{name} is a string specifying the name of an attribute.
9675 @var{value} is a string that is either a valid value for attribute
9676 @var{name}, a comma-separated list of values, or @samp{!} followed by a
9677 value or list.  If @var{value} does not begin with a @samp{!}, this
9678 test is true if the value of the @var{name} attribute of the current
9679 insn is in the list specified by @var{value}.  If @var{value} begins
9680 with a @samp{!}, this test is true if the attribute's value is
9681 @emph{not} in the specified list.
9683 For example,
9685 @smallexample
9686 (eq_attr "type" "load,store")
9687 @end smallexample
9689 @noindent
9690 is equivalent to
9692 @smallexample
9693 (ior (eq_attr "type" "load") (eq_attr "type" "store"))
9694 @end smallexample
9696 If @var{name} specifies an attribute of @samp{alternative}, it refers to the
9697 value of the compiler variable @code{which_alternative}
9698 (@pxref{Output Statement}) and the values must be small integers.  For
9699 example,
9701 @smallexample
9702 (eq_attr "alternative" "2,3")
9703 @end smallexample
9705 @noindent
9706 is equivalent to
9708 @smallexample
9709 (ior (eq (symbol_ref "which_alternative") (const_int 2))
9710      (eq (symbol_ref "which_alternative") (const_int 3)))
9711 @end smallexample
9713 Note that, for most attributes, an @code{eq_attr} test is simplified in cases
9714 where the value of the attribute being tested is known for all insns matching
9715 a particular pattern.  This is by far the most common case.
9717 @findex attr_flag
9718 @item (attr_flag @var{name})
9719 The value of an @code{attr_flag} expression is true if the flag
9720 specified by @var{name} is true for the @code{insn} currently being
9721 scheduled.
9723 @var{name} is a string specifying one of a fixed set of flags to test.
9724 Test the flags @code{forward} and @code{backward} to determine the
9725 direction of a conditional branch.
9727 This example describes a conditional branch delay slot which
9728 can be nullified for forward branches that are taken (annul-true) or
9729 for backward branches which are not taken (annul-false).
9731 @smallexample
9732 (define_delay (eq_attr "type" "cbranch")
9733   [(eq_attr "in_branch_delay" "true")
9734    (and (eq_attr "in_branch_delay" "true")
9735         (attr_flag "forward"))
9736    (and (eq_attr "in_branch_delay" "true")
9737         (attr_flag "backward"))])
9738 @end smallexample
9740 The @code{forward} and @code{backward} flags are false if the current
9741 @code{insn} being scheduled is not a conditional branch.
9743 @code{attr_flag} is only used during delay slot scheduling and has no
9744 meaning to other passes of the compiler.
9746 @findex attr
9747 @item (attr @var{name})
9748 The value of another attribute is returned.  This is most useful
9749 for numeric attributes, as @code{eq_attr} and @code{attr_flag}
9750 produce more efficient code for non-numeric attributes.
9751 @end table
9753 @end ifset
9754 @ifset INTERNALS
9755 @node Tagging Insns
9756 @subsection Assigning Attribute Values to Insns
9757 @cindex tagging insns
9758 @cindex assigning attribute values to insns
9760 The value assigned to an attribute of an insn is primarily determined by
9761 which pattern is matched by that insn (or which @code{define_peephole}
9762 generated it).  Every @code{define_insn} and @code{define_peephole} can
9763 have an optional last argument to specify the values of attributes for
9764 matching insns.  The value of any attribute not specified in a particular
9765 insn is set to the default value for that attribute, as specified in its
9766 @code{define_attr}.  Extensive use of default values for attributes
9767 permits the specification of the values for only one or two attributes
9768 in the definition of most insn patterns, as seen in the example in the
9769 next section.
9771 The optional last argument of @code{define_insn} and
9772 @code{define_peephole} is a vector of expressions, each of which defines
9773 the value for a single attribute.  The most general way of assigning an
9774 attribute's value is to use a @code{set} expression whose first operand is an
9775 @code{attr} expression giving the name of the attribute being set.  The
9776 second operand of the @code{set} is an attribute expression
9777 (@pxref{Expressions}) giving the value of the attribute.
9779 When the attribute value depends on the @samp{alternative} attribute
9780 (i.e., which is the applicable alternative in the constraint of the
9781 insn), the @code{set_attr_alternative} expression can be used.  It
9782 allows the specification of a vector of attribute expressions, one for
9783 each alternative.
9785 @findex set_attr
9786 When the generality of arbitrary attribute expressions is not required,
9787 the simpler @code{set_attr} expression can be used, which allows
9788 specifying a string giving either a single attribute value or a list
9789 of attribute values, one for each alternative.
9791 The form of each of the above specifications is shown below.  In each case,
9792 @var{name} is a string specifying the attribute to be set.
9794 @table @code
9795 @item (set_attr @var{name} @var{value-string})
9796 @var{value-string} is either a string giving the desired attribute value,
9797 or a string containing a comma-separated list giving the values for
9798 succeeding alternatives.  The number of elements must match the number
9799 of alternatives in the constraint of the insn pattern.
9801 Note that it may be useful to specify @samp{*} for some alternative, in
9802 which case the attribute will assume its default value for insns matching
9803 that alternative.
9805 @findex set_attr_alternative
9806 @item (set_attr_alternative @var{name} [@var{value1} @var{value2} @dots{}])
9807 Depending on the alternative of the insn, the value will be one of the
9808 specified values.  This is a shorthand for using a @code{cond} with
9809 tests on the @samp{alternative} attribute.
9811 @findex attr
9812 @item (set (attr @var{name}) @var{value})
9813 The first operand of this @code{set} must be the special RTL expression
9814 @code{attr}, whose sole operand is a string giving the name of the
9815 attribute being set.  @var{value} is the value of the attribute.
9816 @end table
9818 The following shows three different ways of representing the same
9819 attribute value specification:
9821 @smallexample
9822 (set_attr "type" "load,store,arith")
9824 (set_attr_alternative "type"
9825                       [(const_string "load") (const_string "store")
9826                        (const_string "arith")])
9828 (set (attr "type")
9829      (cond [(eq_attr "alternative" "1") (const_string "load")
9830             (eq_attr "alternative" "2") (const_string "store")]
9831            (const_string "arith")))
9832 @end smallexample
9834 @need 1000
9835 @findex define_asm_attributes
9836 The @code{define_asm_attributes} expression provides a mechanism to
9837 specify the attributes assigned to insns produced from an @code{asm}
9838 statement.  It has the form:
9840 @smallexample
9841 (define_asm_attributes [@var{attr-sets}])
9842 @end smallexample
9844 @noindent
9845 where @var{attr-sets} is specified the same as for both the
9846 @code{define_insn} and the @code{define_peephole} expressions.
9848 These values will typically be the ``worst case'' attribute values.  For
9849 example, they might indicate that the condition code will be clobbered.
9851 A specification for a @code{length} attribute is handled specially.  The
9852 way to compute the length of an @code{asm} insn is to multiply the
9853 length specified in the expression @code{define_asm_attributes} by the
9854 number of machine instructions specified in the @code{asm} statement,
9855 determined by counting the number of semicolons and newlines in the
9856 string.  Therefore, the value of the @code{length} attribute specified
9857 in a @code{define_asm_attributes} should be the maximum possible length
9858 of a single machine instruction.
9860 @end ifset
9861 @ifset INTERNALS
9862 @node Attr Example
9863 @subsection Example of Attribute Specifications
9864 @cindex attribute specifications example
9865 @cindex attribute specifications
9867 The judicious use of defaulting is important in the efficient use of
9868 insn attributes.  Typically, insns are divided into @dfn{types} and an
9869 attribute, customarily called @code{type}, is used to represent this
9870 value.  This attribute is normally used only to define the default value
9871 for other attributes.  An example will clarify this usage.
9873 Assume we have a RISC machine with a condition code and in which only
9874 full-word operations are performed in registers.  Let us assume that we
9875 can divide all insns into loads, stores, (integer) arithmetic
9876 operations, floating point operations, and branches.
9878 Here we will concern ourselves with determining the effect of an insn on
9879 the condition code and will limit ourselves to the following possible
9880 effects:  The condition code can be set unpredictably (clobbered), not
9881 be changed, be set to agree with the results of the operation, or only
9882 changed if the item previously set into the condition code has been
9883 modified.
9885 Here is part of a sample @file{md} file for such a machine:
9887 @smallexample
9888 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
9890 (define_attr "cc" "clobber,unchanged,set,change0"
9891              (cond [(eq_attr "type" "load")
9892                         (const_string "change0")
9893                     (eq_attr "type" "store,branch")
9894                         (const_string "unchanged")
9895                     (eq_attr "type" "arith")
9896                         (if_then_else (match_operand:SI 0 "" "")
9897                                       (const_string "set")
9898                                       (const_string "clobber"))]
9899                    (const_string "clobber")))
9901 (define_insn ""
9902   [(set (match_operand:SI 0 "general_operand" "=r,r,m")
9903         (match_operand:SI 1 "general_operand" "r,m,r"))]
9904   ""
9905   "@@
9906    move %0,%1
9907    load %0,%1
9908    store %0,%1"
9909   [(set_attr "type" "arith,load,store")])
9910 @end smallexample
9912 Note that we assume in the above example that arithmetic operations
9913 performed on quantities smaller than a machine word clobber the condition
9914 code since they will set the condition code to a value corresponding to the
9915 full-word result.
9917 @end ifset
9918 @ifset INTERNALS
9919 @node Insn Lengths
9920 @subsection Computing the Length of an Insn
9921 @cindex insn lengths, computing
9922 @cindex computing the length of an insn
9924 For many machines, multiple types of branch instructions are provided, each
9925 for different length branch displacements.  In most cases, the assembler
9926 will choose the correct instruction to use.  However, when the assembler
9927 cannot do so, GCC can when a special attribute, the @code{length}
9928 attribute, is defined.  This attribute must be defined to have numeric
9929 values by specifying a null string in its @code{define_attr}.
9931 In the case of the @code{length} attribute, two additional forms of
9932 arithmetic terms are allowed in test expressions:
9934 @table @code
9935 @cindex @code{match_dup} and attributes
9936 @item (match_dup @var{n})
9937 This refers to the address of operand @var{n} of the current insn, which
9938 must be a @code{label_ref}.
9940 @cindex @code{pc} and attributes
9941 @item (pc)
9942 For non-branch instructions and backward branch instructions, this refers
9943 to the address of the current insn.  But for forward branch instructions,
9944 this refers to the address of the next insn, because the length of the
9945 current insn is to be computed.
9946 @end table
9948 @cindex @code{addr_vec}, length of
9949 @cindex @code{addr_diff_vec}, length of
9950 For normal insns, the length will be determined by value of the
9951 @code{length} attribute.  In the case of @code{addr_vec} and
9952 @code{addr_diff_vec} insn patterns, the length is computed as
9953 the number of vectors multiplied by the size of each vector.
9955 Lengths are measured in addressable storage units (bytes).
9957 Note that it is possible to call functions via the @code{symbol_ref}
9958 mechanism to compute the length of an insn.  However, if you use this
9959 mechanism you must provide dummy clauses to express the maximum length
9960 without using the function call.  You can see an example of this in the
9961 @code{pa} machine description for the @code{call_symref} pattern.
9963 The following macros can be used to refine the length computation:
9965 @table @code
9966 @findex ADJUST_INSN_LENGTH
9967 @item ADJUST_INSN_LENGTH (@var{insn}, @var{length})
9968 If defined, modifies the length assigned to instruction @var{insn} as a
9969 function of the context in which it is used.  @var{length} is an lvalue
9970 that contains the initially computed length of the insn and should be
9971 updated with the correct length of the insn.
9973 This macro will normally not be required.  A case in which it is
9974 required is the ROMP@.  On this machine, the size of an @code{addr_vec}
9975 insn must be increased by two to compensate for the fact that alignment
9976 may be required.
9977 @end table
9979 @findex get_attr_length
9980 The routine that returns @code{get_attr_length} (the value of the
9981 @code{length} attribute) can be used by the output routine to
9982 determine the form of the branch instruction to be written, as the
9983 example below illustrates.
9985 As an example of the specification of variable-length branches, consider
9986 the IBM 360.  If we adopt the convention that a register will be set to
9987 the starting address of a function, we can jump to labels within 4k of
9988 the start using a four-byte instruction.  Otherwise, we need a six-byte
9989 sequence to load the address from memory and then branch to it.
9991 On such a machine, a pattern for a branch instruction might be specified
9992 as follows:
9994 @smallexample
9995 (define_insn "jump"
9996   [(set (pc)
9997         (label_ref (match_operand 0 "" "")))]
9998   ""
10000    return (get_attr_length (insn) == 4
10001            ? "b %l0" : "l r15,=a(%l0); br r15");
10003   [(set (attr "length")
10004         (if_then_else (lt (match_dup 0) (const_int 4096))
10005                       (const_int 4)
10006                       (const_int 6)))])
10007 @end smallexample
10009 @end ifset
10010 @ifset INTERNALS
10011 @node Constant Attributes
10012 @subsection Constant Attributes
10013 @cindex constant attributes
10015 A special form of @code{define_attr}, where the expression for the
10016 default value is a @code{const} expression, indicates an attribute that
10017 is constant for a given run of the compiler.  Constant attributes may be
10018 used to specify which variety of processor is used.  For example,
10020 @smallexample
10021 (define_attr "cpu" "m88100,m88110,m88000"
10022  (const
10023   (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
10024          (symbol_ref "TARGET_88110") (const_string "m88110")]
10025         (const_string "m88000"))))
10027 (define_attr "memory" "fast,slow"
10028  (const
10029   (if_then_else (symbol_ref "TARGET_FAST_MEM")
10030                 (const_string "fast")
10031                 (const_string "slow"))))
10032 @end smallexample
10034 The routine generated for constant attributes has no parameters as it
10035 does not depend on any particular insn.  RTL expressions used to define
10036 the value of a constant attribute may use the @code{symbol_ref} form,
10037 but may not use either the @code{match_operand} form or @code{eq_attr}
10038 forms involving insn attributes.
10040 @end ifset
10041 @ifset INTERNALS
10042 @node Mnemonic Attribute
10043 @subsection Mnemonic Attribute
10044 @cindex mnemonic attribute
10046 The @code{mnemonic} attribute is a string type attribute holding the
10047 instruction mnemonic for an insn alternative.  The attribute values
10048 will automatically be generated by the machine description parser if
10049 there is an attribute definition in the md file:
10051 @smallexample
10052 (define_attr "mnemonic" "unknown" (const_string "unknown"))
10053 @end smallexample
10055 The default value can be freely chosen as long as it does not collide
10056 with any of the instruction mnemonics.  This value will be used
10057 whenever the machine description parser is not able to determine the
10058 mnemonic string.  This might be the case for output templates
10059 containing more than a single instruction as in
10060 @code{"mvcle\t%0,%1,0\;jo\t.-4"}.
10062 The @code{mnemonic} attribute set is not generated automatically if the
10063 instruction string is generated via C code.
10065 An existing @code{mnemonic} attribute set in an insn definition will not
10066 be overriden by the md file parser.  That way it is possible to
10067 manually set the instruction mnemonics for the cases where the md file
10068 parser fails to determine it automatically.
10070 The @code{mnemonic} attribute is useful for dealing with instruction
10071 specific properties in the pipeline description without defining
10072 additional insn attributes.
10074 @smallexample
10075 (define_attr "ooo_expanded" ""
10076   (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr")
10077          (const_int 1)]
10078         (const_int 0)))
10079 @end smallexample
10081 @end ifset
10082 @ifset INTERNALS
10083 @node Delay Slots
10084 @subsection Delay Slot Scheduling
10085 @cindex delay slots, defining
10087 The insn attribute mechanism can be used to specify the requirements for
10088 delay slots, if any, on a target machine.  An instruction is said to
10089 require a @dfn{delay slot} if some instructions that are physically
10090 after the instruction are executed as if they were located before it.
10091 Classic examples are branch and call instructions, which often execute
10092 the following instruction before the branch or call is performed.
10094 On some machines, conditional branch instructions can optionally
10095 @dfn{annul} instructions in the delay slot.  This means that the
10096 instruction will not be executed for certain branch outcomes.  Both
10097 instructions that annul if the branch is true and instructions that
10098 annul if the branch is false are supported.
10100 Delay slot scheduling differs from instruction scheduling in that
10101 determining whether an instruction needs a delay slot is dependent only
10102 on the type of instruction being generated, not on data flow between the
10103 instructions.  See the next section for a discussion of data-dependent
10104 instruction scheduling.
10106 @findex define_delay
10107 The requirement of an insn needing one or more delay slots is indicated
10108 via the @code{define_delay} expression.  It has the following form:
10110 @smallexample
10111 (define_delay @var{test}
10112               [@var{delay-1} @var{annul-true-1} @var{annul-false-1}
10113                @var{delay-2} @var{annul-true-2} @var{annul-false-2}
10114                @dots{}])
10115 @end smallexample
10117 @var{test} is an attribute test that indicates whether this
10118 @code{define_delay} applies to a particular insn.  If so, the number of
10119 required delay slots is determined by the length of the vector specified
10120 as the second argument.  An insn placed in delay slot @var{n} must
10121 satisfy attribute test @var{delay-n}.  @var{annul-true-n} is an
10122 attribute test that specifies which insns may be annulled if the branch
10123 is true.  Similarly, @var{annul-false-n} specifies which insns in the
10124 delay slot may be annulled if the branch is false.  If annulling is not
10125 supported for that delay slot, @code{(nil)} should be coded.
10127 For example, in the common case where branch and call insns require
10128 a single delay slot, which may contain any insn other than a branch or
10129 call, the following would be placed in the @file{md} file:
10131 @smallexample
10132 (define_delay (eq_attr "type" "branch,call")
10133               [(eq_attr "type" "!branch,call") (nil) (nil)])
10134 @end smallexample
10136 Multiple @code{define_delay} expressions may be specified.  In this
10137 case, each such expression specifies different delay slot requirements
10138 and there must be no insn for which tests in two @code{define_delay}
10139 expressions are both true.
10141 For example, if we have a machine that requires one delay slot for branches
10142 but two for calls,  no delay slot can contain a branch or call insn,
10143 and any valid insn in the delay slot for the branch can be annulled if the
10144 branch is true, we might represent this as follows:
10146 @smallexample
10147 (define_delay (eq_attr "type" "branch")
10148    [(eq_attr "type" "!branch,call")
10149     (eq_attr "type" "!branch,call")
10150     (nil)])
10152 (define_delay (eq_attr "type" "call")
10153               [(eq_attr "type" "!branch,call") (nil) (nil)
10154                (eq_attr "type" "!branch,call") (nil) (nil)])
10155 @end smallexample
10156 @c the above is *still* too long.  --mew 4feb93
10158 @end ifset
10159 @ifset INTERNALS
10160 @node Processor pipeline description
10161 @subsection Specifying processor pipeline description
10162 @cindex processor pipeline description
10163 @cindex processor functional units
10164 @cindex instruction latency time
10165 @cindex interlock delays
10166 @cindex data dependence delays
10167 @cindex reservation delays
10168 @cindex pipeline hazard recognizer
10169 @cindex automaton based pipeline description
10170 @cindex regular expressions
10171 @cindex deterministic finite state automaton
10172 @cindex automaton based scheduler
10173 @cindex RISC
10174 @cindex VLIW
10176 To achieve better performance, most modern processors
10177 (super-pipelined, superscalar @acronym{RISC}, and @acronym{VLIW}
10178 processors) have many @dfn{functional units} on which several
10179 instructions can be executed simultaneously.  An instruction starts
10180 execution if its issue conditions are satisfied.  If not, the
10181 instruction is stalled until its conditions are satisfied.  Such
10182 @dfn{interlock (pipeline) delay} causes interruption of the fetching
10183 of successor instructions (or demands nop instructions, e.g.@: for some
10184 MIPS processors).
10186 There are two major kinds of interlock delays in modern processors.
10187 The first one is a data dependence delay determining @dfn{instruction
10188 latency time}.  The instruction execution is not started until all
10189 source data have been evaluated by prior instructions (there are more
10190 complex cases when the instruction execution starts even when the data
10191 are not available but will be ready in given time after the
10192 instruction execution start).  Taking the data dependence delays into
10193 account is simple.  The data dependence (true, output, and
10194 anti-dependence) delay between two instructions is given by a
10195 constant.  In most cases this approach is adequate.  The second kind
10196 of interlock delays is a reservation delay.  The reservation delay
10197 means that two instructions under execution will be in need of shared
10198 processors resources, i.e.@: buses, internal registers, and/or
10199 functional units, which are reserved for some time.  Taking this kind
10200 of delay into account is complex especially for modern @acronym{RISC}
10201 processors.
10203 The task of exploiting more processor parallelism is solved by an
10204 instruction scheduler.  For a better solution to this problem, the
10205 instruction scheduler has to have an adequate description of the
10206 processor parallelism (or @dfn{pipeline description}).  GCC
10207 machine descriptions describe processor parallelism and functional
10208 unit reservations for groups of instructions with the aid of
10209 @dfn{regular expressions}.
10211 The GCC instruction scheduler uses a @dfn{pipeline hazard recognizer} to
10212 figure out the possibility of the instruction issue by the processor
10213 on a given simulated processor cycle.  The pipeline hazard recognizer is
10214 automatically generated from the processor pipeline description.  The
10215 pipeline hazard recognizer generated from the machine description
10216 is based on a deterministic finite state automaton (@acronym{DFA}):
10217 the instruction issue is possible if there is a transition from one
10218 automaton state to another one.  This algorithm is very fast, and
10219 furthermore, its speed is not dependent on processor
10220 complexity@footnote{However, the size of the automaton depends on
10221 processor complexity.  To limit this effect, machine descriptions
10222 can split orthogonal parts of the machine description among several
10223 automata: but then, since each of these must be stepped independently,
10224 this does cause a small decrease in the algorithm's performance.}.
10226 @cindex automaton based pipeline description
10227 The rest of this section describes the directives that constitute
10228 an automaton-based processor pipeline description.  The order of
10229 these constructions within the machine description file is not
10230 important.
10232 @findex define_automaton
10233 @cindex pipeline hazard recognizer
10234 The following optional construction describes names of automata
10235 generated and used for the pipeline hazards recognition.  Sometimes
10236 the generated finite state automaton used by the pipeline hazard
10237 recognizer is large.  If we use more than one automaton and bind functional
10238 units to the automata, the total size of the automata is usually
10239 less than the size of the single automaton.  If there is no one such
10240 construction, only one finite state automaton is generated.
10242 @smallexample
10243 (define_automaton @var{automata-names})
10244 @end smallexample
10246 @var{automata-names} is a string giving names of the automata.  The
10247 names are separated by commas.  All the automata should have unique names.
10248 The automaton name is used in the constructions @code{define_cpu_unit} and
10249 @code{define_query_cpu_unit}.
10251 @findex define_cpu_unit
10252 @cindex processor functional units
10253 Each processor functional unit used in the description of instruction
10254 reservations should be described by the following construction.
10256 @smallexample
10257 (define_cpu_unit @var{unit-names} [@var{automaton-name}])
10258 @end smallexample
10260 @var{unit-names} is a string giving the names of the functional units
10261 separated by commas.  Don't use name @samp{nothing}, it is reserved
10262 for other goals.
10264 @var{automaton-name} is a string giving the name of the automaton with
10265 which the unit is bound.  The automaton should be described in
10266 construction @code{define_automaton}.  You should give
10267 @dfn{automaton-name}, if there is a defined automaton.
10269 The assignment of units to automata are constrained by the uses of the
10270 units in insn reservations.  The most important constraint is: if a
10271 unit reservation is present on a particular cycle of an alternative
10272 for an insn reservation, then some unit from the same automaton must
10273 be present on the same cycle for the other alternatives of the insn
10274 reservation.  The rest of the constraints are mentioned in the
10275 description of the subsequent constructions.
10277 @findex define_query_cpu_unit
10278 @cindex querying function unit reservations
10279 The following construction describes CPU functional units analogously
10280 to @code{define_cpu_unit}.  The reservation of such units can be
10281 queried for an automaton state.  The instruction scheduler never
10282 queries reservation of functional units for given automaton state.  So
10283 as a rule, you don't need this construction.  This construction could
10284 be used for future code generation goals (e.g.@: to generate
10285 @acronym{VLIW} insn templates).
10287 @smallexample
10288 (define_query_cpu_unit @var{unit-names} [@var{automaton-name}])
10289 @end smallexample
10291 @var{unit-names} is a string giving names of the functional units
10292 separated by commas.
10294 @var{automaton-name} is a string giving the name of the automaton with
10295 which the unit is bound.
10297 @findex define_insn_reservation
10298 @cindex instruction latency time
10299 @cindex regular expressions
10300 @cindex data bypass
10301 The following construction is the major one to describe pipeline
10302 characteristics of an instruction.
10304 @smallexample
10305 (define_insn_reservation @var{insn-name} @var{default_latency}
10306                          @var{condition} @var{regexp})
10307 @end smallexample
10309 @var{default_latency} is a number giving latency time of the
10310 instruction.  There is an important difference between the old
10311 description and the automaton based pipeline description.  The latency
10312 time is used for all dependencies when we use the old description.  In
10313 the automaton based pipeline description, the given latency time is only
10314 used for true dependencies.  The cost of anti-dependencies is always
10315 zero and the cost of output dependencies is the difference between
10316 latency times of the producing and consuming insns (if the difference
10317 is negative, the cost is considered to be zero).  You can always
10318 change the default costs for any description by using the target hook
10319 @code{TARGET_SCHED_ADJUST_COST} (@pxref{Scheduling}).
10321 @var{insn-name} is a string giving the internal name of the insn.  The
10322 internal names are used in constructions @code{define_bypass} and in
10323 the automaton description file generated for debugging.  The internal
10324 name has nothing in common with the names in @code{define_insn}.  It is a
10325 good practice to use insn classes described in the processor manual.
10327 @var{condition} defines what RTL insns are described by this
10328 construction.  You should remember that you will be in trouble if
10329 @var{condition} for two or more different
10330 @code{define_insn_reservation} constructions is TRUE for an insn.  In
10331 this case what reservation will be used for the insn is not defined.
10332 Such cases are not checked during generation of the pipeline hazards
10333 recognizer because in general recognizing that two conditions may have
10334 the same value is quite difficult (especially if the conditions
10335 contain @code{symbol_ref}).  It is also not checked during the
10336 pipeline hazard recognizer work because it would slow down the
10337 recognizer considerably.
10339 @var{regexp} is a string describing the reservation of the cpu's functional
10340 units by the instruction.  The reservations are described by a regular
10341 expression according to the following syntax:
10343 @smallexample
10344        regexp = regexp "," oneof
10345               | oneof
10347        oneof = oneof "|" allof
10348              | allof
10350        allof = allof "+" repeat
10351              | repeat
10353        repeat = element "*" number
10354               | element
10356        element = cpu_function_unit_name
10357                | reservation_name
10358                | result_name
10359                | "nothing"
10360                | "(" regexp ")"
10361 @end smallexample
10363 @itemize @bullet
10364 @item
10365 @samp{,} is used for describing the start of the next cycle in
10366 the reservation.
10368 @item
10369 @samp{|} is used for describing a reservation described by the first
10370 regular expression @strong{or} a reservation described by the second
10371 regular expression @strong{or} etc.
10373 @item
10374 @samp{+} is used for describing a reservation described by the first
10375 regular expression @strong{and} a reservation described by the
10376 second regular expression @strong{and} etc.
10378 @item
10379 @samp{*} is used for convenience and simply means a sequence in which
10380 the regular expression are repeated @var{number} times with cycle
10381 advancing (see @samp{,}).
10383 @item
10384 @samp{cpu_function_unit_name} denotes reservation of the named
10385 functional unit.
10387 @item
10388 @samp{reservation_name} --- see description of construction
10389 @samp{define_reservation}.
10391 @item
10392 @samp{nothing} denotes no unit reservations.
10393 @end itemize
10395 @findex define_reservation
10396 Sometimes unit reservations for different insns contain common parts.
10397 In such case, you can simplify the pipeline description by describing
10398 the common part by the following construction
10400 @smallexample
10401 (define_reservation @var{reservation-name} @var{regexp})
10402 @end smallexample
10404 @var{reservation-name} is a string giving name of @var{regexp}.
10405 Functional unit names and reservation names are in the same name
10406 space.  So the reservation names should be different from the
10407 functional unit names and cannot be the reserved name @samp{nothing}.
10409 @findex define_bypass
10410 @cindex instruction latency time
10411 @cindex data bypass
10412 The following construction is used to describe exceptions in the
10413 latency time for given instruction pair.  This is so called bypasses.
10415 @smallexample
10416 (define_bypass @var{number} @var{out_insn_names} @var{in_insn_names}
10417                [@var{guard}])
10418 @end smallexample
10420 @var{number} defines when the result generated by the instructions
10421 given in string @var{out_insn_names} will be ready for the
10422 instructions given in string @var{in_insn_names}.  Each of these
10423 strings is a comma-separated list of filename-style globs and
10424 they refer to the names of @code{define_insn_reservation}s.
10425 For example:
10426 @smallexample
10427 (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
10428 @end smallexample
10429 defines a bypass between instructions that start with
10430 @samp{cpu1_load_} or @samp{cpu1_store_} and those that start with
10431 @samp{cpu1_load_}.
10433 @var{guard} is an optional string giving the name of a C function which
10434 defines an additional guard for the bypass.  The function will get the
10435 two insns as parameters.  If the function returns zero the bypass will
10436 be ignored for this case.  The additional guard is necessary to
10437 recognize complicated bypasses, e.g.@: when the consumer is only an address
10438 of insn @samp{store} (not a stored value).
10440 If there are more one bypass with the same output and input insns, the
10441 chosen bypass is the first bypass with a guard in description whose
10442 guard function returns nonzero.  If there is no such bypass, then
10443 bypass without the guard function is chosen.
10445 @findex exclusion_set
10446 @findex presence_set
10447 @findex final_presence_set
10448 @findex absence_set
10449 @findex final_absence_set
10450 @cindex VLIW
10451 @cindex RISC
10452 The following five constructions are usually used to describe
10453 @acronym{VLIW} processors, or more precisely, to describe a placement
10454 of small instructions into @acronym{VLIW} instruction slots.  They
10455 can be used for @acronym{RISC} processors, too.
10457 @smallexample
10458 (exclusion_set @var{unit-names} @var{unit-names})
10459 (presence_set @var{unit-names} @var{patterns})
10460 (final_presence_set @var{unit-names} @var{patterns})
10461 (absence_set @var{unit-names} @var{patterns})
10462 (final_absence_set @var{unit-names} @var{patterns})
10463 @end smallexample
10465 @var{unit-names} is a string giving names of functional units
10466 separated by commas.
10468 @var{patterns} is a string giving patterns of functional units
10469 separated by comma.  Currently pattern is one unit or units
10470 separated by white-spaces.
10472 The first construction (@samp{exclusion_set}) means that each
10473 functional unit in the first string cannot be reserved simultaneously
10474 with a unit whose name is in the second string and vice versa.  For
10475 example, the construction is useful for describing processors
10476 (e.g.@: some SPARC processors) with a fully pipelined floating point
10477 functional unit which can execute simultaneously only single floating
10478 point insns or only double floating point insns.
10480 The second construction (@samp{presence_set}) means that each
10481 functional unit in the first string cannot be reserved unless at
10482 least one of pattern of units whose names are in the second string is
10483 reserved.  This is an asymmetric relation.  For example, it is useful
10484 for description that @acronym{VLIW} @samp{slot1} is reserved after
10485 @samp{slot0} reservation.  We could describe it by the following
10486 construction
10488 @smallexample
10489 (presence_set "slot1" "slot0")
10490 @end smallexample
10492 Or @samp{slot1} is reserved only after @samp{slot0} and unit @samp{b0}
10493 reservation.  In this case we could write
10495 @smallexample
10496 (presence_set "slot1" "slot0 b0")
10497 @end smallexample
10499 The third construction (@samp{final_presence_set}) is analogous to
10500 @samp{presence_set}.  The difference between them is when checking is
10501 done.  When an instruction is issued in given automaton state
10502 reflecting all current and planned unit reservations, the automaton
10503 state is changed.  The first state is a source state, the second one
10504 is a result state.  Checking for @samp{presence_set} is done on the
10505 source state reservation, checking for @samp{final_presence_set} is
10506 done on the result reservation.  This construction is useful to
10507 describe a reservation which is actually two subsequent reservations.
10508 For example, if we use
10510 @smallexample
10511 (presence_set "slot1" "slot0")
10512 @end smallexample
10514 the following insn will be never issued (because @samp{slot1} requires
10515 @samp{slot0} which is absent in the source state).
10517 @smallexample
10518 (define_reservation "insn_and_nop" "slot0 + slot1")
10519 @end smallexample
10521 but it can be issued if we use analogous @samp{final_presence_set}.
10523 The forth construction (@samp{absence_set}) means that each functional
10524 unit in the first string can be reserved only if each pattern of units
10525 whose names are in the second string is not reserved.  This is an
10526 asymmetric relation (actually @samp{exclusion_set} is analogous to
10527 this one but it is symmetric).  For example it might be useful in a
10528 @acronym{VLIW} description to say that @samp{slot0} cannot be reserved
10529 after either @samp{slot1} or @samp{slot2} have been reserved.  This
10530 can be described as:
10532 @smallexample
10533 (absence_set "slot0" "slot1, slot2")
10534 @end smallexample
10536 Or @samp{slot2} cannot be reserved if @samp{slot0} and unit @samp{b0}
10537 are reserved or @samp{slot1} and unit @samp{b1} are reserved.  In
10538 this case we could write
10540 @smallexample
10541 (absence_set "slot2" "slot0 b0, slot1 b1")
10542 @end smallexample
10544 All functional units mentioned in a set should belong to the same
10545 automaton.
10547 The last construction (@samp{final_absence_set}) is analogous to
10548 @samp{absence_set} but checking is done on the result (state)
10549 reservation.  See comments for @samp{final_presence_set}.
10551 @findex automata_option
10552 @cindex deterministic finite state automaton
10553 @cindex nondeterministic finite state automaton
10554 @cindex finite state automaton minimization
10555 You can control the generator of the pipeline hazard recognizer with
10556 the following construction.
10558 @smallexample
10559 (automata_option @var{options})
10560 @end smallexample
10562 @var{options} is a string giving options which affect the generated
10563 code.  Currently there are the following options:
10565 @itemize @bullet
10566 @item
10567 @dfn{no-minimization} makes no minimization of the automaton.  This is
10568 only worth to do when we are debugging the description and need to
10569 look more accurately at reservations of states.
10571 @item
10572 @dfn{time} means printing time statistics about the generation of
10573 automata.
10575 @item
10576 @dfn{stats} means printing statistics about the generated automata
10577 such as the number of DFA states, NDFA states and arcs.
10579 @item
10580 @dfn{v} means a generation of the file describing the result automata.
10581 The file has suffix @samp{.dfa} and can be used for the description
10582 verification and debugging.
10584 @item
10585 @dfn{w} means a generation of warning instead of error for
10586 non-critical errors.
10588 @item
10589 @dfn{no-comb-vect} prevents the automaton generator from generating
10590 two data structures and comparing them for space efficiency.  Using
10591 a comb vector to represent transitions may be better, but it can be
10592 very expensive to construct.  This option is useful if the build
10593 process spends an unacceptably long time in genautomata.
10595 @item
10596 @dfn{ndfa} makes nondeterministic finite state automata.  This affects
10597 the treatment of operator @samp{|} in the regular expressions.  The
10598 usual treatment of the operator is to try the first alternative and,
10599 if the reservation is not possible, the second alternative.  The
10600 nondeterministic treatment means trying all alternatives, some of them
10601 may be rejected by reservations in the subsequent insns.
10603 @item
10604 @dfn{collapse-ndfa} modifies the behavior of the generator when
10605 producing an automaton.  An additional state transition to collapse a
10606 nondeterministic @acronym{NDFA} state to a deterministic @acronym{DFA}
10607 state is generated.  It can be triggered by passing @code{const0_rtx} to
10608 state_transition.  In such an automaton, cycle advance transitions are
10609 available only for these collapsed states.  This option is useful for
10610 ports that want to use the @code{ndfa} option, but also want to use
10611 @code{define_query_cpu_unit} to assign units to insns issued in a cycle.
10613 @item
10614 @dfn{progress} means output of a progress bar showing how many states
10615 were generated so far for automaton being processed.  This is useful
10616 during debugging a @acronym{DFA} description.  If you see too many
10617 generated states, you could interrupt the generator of the pipeline
10618 hazard recognizer and try to figure out a reason for generation of the
10619 huge automaton.
10620 @end itemize
10622 As an example, consider a superscalar @acronym{RISC} machine which can
10623 issue three insns (two integer insns and one floating point insn) on
10624 the cycle but can finish only two insns.  To describe this, we define
10625 the following functional units.
10627 @smallexample
10628 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
10629 (define_cpu_unit "port0, port1")
10630 @end smallexample
10632 All simple integer insns can be executed in any integer pipeline and
10633 their result is ready in two cycles.  The simple integer insns are
10634 issued into the first pipeline unless it is reserved, otherwise they
10635 are issued into the second pipeline.  Integer division and
10636 multiplication insns can be executed only in the second integer
10637 pipeline and their results are ready correspondingly in 9 and 4
10638 cycles.  The integer division is not pipelined, i.e.@: the subsequent
10639 integer division insn cannot be issued until the current division
10640 insn finished.  Floating point insns are fully pipelined and their
10641 results are ready in 3 cycles.  Where the result of a floating point
10642 insn is used by an integer insn, an additional delay of one cycle is
10643 incurred.  To describe all of this we could specify
10645 @smallexample
10646 (define_cpu_unit "div")
10648 (define_insn_reservation "simple" 2 (eq_attr "type" "int")
10649                          "(i0_pipeline | i1_pipeline), (port0 | port1)")
10651 (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
10652                          "i1_pipeline, nothing*2, (port0 | port1)")
10654 (define_insn_reservation "div" 9 (eq_attr "type" "div")
10655                          "i1_pipeline, div*7, div + (port0 | port1)")
10657 (define_insn_reservation "float" 3 (eq_attr "type" "float")
10658                          "f_pipeline, nothing, (port0 | port1))
10660 (define_bypass 4 "float" "simple,mult,div")
10661 @end smallexample
10663 To simplify the description we could describe the following reservation
10665 @smallexample
10666 (define_reservation "finish" "port0|port1")
10667 @end smallexample
10669 and use it in all @code{define_insn_reservation} as in the following
10670 construction
10672 @smallexample
10673 (define_insn_reservation "simple" 2 (eq_attr "type" "int")
10674                          "(i0_pipeline | i1_pipeline), finish")
10675 @end smallexample
10678 @end ifset
10679 @ifset INTERNALS
10680 @node Conditional Execution
10681 @section Conditional Execution
10682 @cindex conditional execution
10683 @cindex predication
10685 A number of architectures provide for some form of conditional
10686 execution, or predication.  The hallmark of this feature is the
10687 ability to nullify most of the instructions in the instruction set.
10688 When the instruction set is large and not entirely symmetric, it
10689 can be quite tedious to describe these forms directly in the
10690 @file{.md} file.  An alternative is the @code{define_cond_exec} template.
10692 @findex define_cond_exec
10693 @smallexample
10694 (define_cond_exec
10695   [@var{predicate-pattern}]
10696   "@var{condition}"
10697   "@var{output-template}"
10698   "@var{optional-insn-attribues}")
10699 @end smallexample
10701 @var{predicate-pattern} is the condition that must be true for the
10702 insn to be executed at runtime and should match a relational operator.
10703 One can use @code{match_operator} to match several relational operators
10704 at once.  Any @code{match_operand} operands must have no more than one
10705 alternative.
10707 @var{condition} is a C expression that must be true for the generated
10708 pattern to match.
10710 @findex current_insn_predicate
10711 @var{output-template} is a string similar to the @code{define_insn}
10712 output template (@pxref{Output Template}), except that the @samp{*}
10713 and @samp{@@} special cases do not apply.  This is only useful if the
10714 assembly text for the predicate is a simple prefix to the main insn.
10715 In order to handle the general case, there is a global variable
10716 @code{current_insn_predicate} that will contain the entire predicate
10717 if the current insn is predicated, and will otherwise be @code{NULL}.
10719 @var{optional-insn-attributes} is an optional vector of attributes that gets
10720 appended to the insn attributes of the produced cond_exec rtx. It can
10721 be used to add some distinguishing attribute to cond_exec rtxs produced
10722 that way. An example usage would be to use this attribute in conjunction
10723 with attributes on the main pattern to disable particular alternatives under
10724 certain conditions.
10726 When @code{define_cond_exec} is used, an implicit reference to
10727 the @code{predicable} instruction attribute is made.
10728 @xref{Insn Attributes}.  This attribute must be a boolean (i.e.@: have
10729 exactly two elements in its @var{list-of-values}), with the possible
10730 values being @code{no} and @code{yes}.  The default and all uses in
10731 the insns must be a simple constant, not a complex expressions.  It
10732 may, however, depend on the alternative, by using a comma-separated
10733 list of values.  If that is the case, the port should also define an
10734 @code{enabled} attribute (@pxref{Disable Insn Alternatives}), which
10735 should also allow only @code{no} and @code{yes} as its values.
10737 For each @code{define_insn} for which the @code{predicable}
10738 attribute is true, a new @code{define_insn} pattern will be
10739 generated that matches a predicated version of the instruction.
10740 For example,
10742 @smallexample
10743 (define_insn "addsi"
10744   [(set (match_operand:SI 0 "register_operand" "r")
10745         (plus:SI (match_operand:SI 1 "register_operand" "r")
10746                  (match_operand:SI 2 "register_operand" "r")))]
10747   "@var{test1}"
10748   "add %2,%1,%0")
10750 (define_cond_exec
10751   [(ne (match_operand:CC 0 "register_operand" "c")
10752        (const_int 0))]
10753   "@var{test2}"
10754   "(%0)")
10755 @end smallexample
10757 @noindent
10758 generates a new pattern
10760 @smallexample
10761 (define_insn ""
10762   [(cond_exec
10763      (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
10764      (set (match_operand:SI 0 "register_operand" "r")
10765           (plus:SI (match_operand:SI 1 "register_operand" "r")
10766                    (match_operand:SI 2 "register_operand" "r"))))]
10767   "(@var{test2}) && (@var{test1})"
10768   "(%3) add %2,%1,%0")
10769 @end smallexample
10771 @end ifset
10772 @ifset INTERNALS
10773 @node Define Subst
10774 @section RTL Templates Transformations
10775 @cindex define_subst
10777 For some hardware architectures there are common cases when the RTL
10778 templates for the instructions can be derived from the other RTL
10779 templates using simple transformations.  E.g., @file{i386.md} contains
10780 an RTL template for the ordinary @code{sub} instruction---
10781 @code{*subsi_1}, and for the @code{sub} instruction with subsequent
10782 zero-extension---@code{*subsi_1_zext}.  Such cases can be easily
10783 implemented by a single meta-template capable of generating a modified
10784 case based on the initial one:
10786 @findex define_subst
10787 @smallexample
10788 (define_subst "@var{name}"
10789   [@var{input-template}]
10790   "@var{condition}"
10791   [@var{output-template}])
10792 @end smallexample
10793 @var{input-template} is a pattern describing the source RTL template,
10794 which will be transformed.
10796 @var{condition} is a C expression that is conjunct with the condition
10797 from the input-template to generate a condition to be used in the
10798 output-template.
10800 @var{output-template} is a pattern that will be used in the resulting
10801 template.
10803 @code{define_subst} mechanism is tightly coupled with the notion of the
10804 subst attribute (@pxref{Subst Iterators}).  The use of
10805 @code{define_subst} is triggered by a reference to a subst attribute in
10806 the transforming RTL template.  This reference initiates duplication of
10807 the source RTL template and substitution of the attributes with their
10808 values.  The source RTL template is left unchanged, while the copy is
10809 transformed by @code{define_subst}.  This transformation can fail in the
10810 case when the source RTL template is not matched against the
10811 input-template of the @code{define_subst}.  In such case the copy is
10812 deleted.
10814 @code{define_subst} can be used only in @code{define_insn} and
10815 @code{define_expand}, it cannot be used in other expressions (e.g.@: in
10816 @code{define_insn_and_split}).
10818 @menu
10819 * Define Subst Example::            Example of @code{define_subst} work.
10820 * Define Subst Pattern Matching::   Process of template comparison.
10821 * Define Subst Output Template::    Generation of output template.
10822 @end menu
10824 @node Define Subst Example
10825 @subsection @code{define_subst} Example
10826 @cindex define_subst
10828 To illustrate how @code{define_subst} works, let us examine a simple
10829 template transformation.
10831 Suppose there are two kinds of instructions: one that touches flags and
10832 the other that does not.  The instructions of the second type could be
10833 generated with the following @code{define_subst}:
10835 @smallexample
10836 (define_subst "add_clobber_subst"
10837   [(set (match_operand:SI 0 "" "")
10838         (match_operand:SI 1 "" ""))]
10839   ""
10840   [(set (match_dup 0)
10841         (match_dup 1))
10842    (clobber (reg:CC FLAGS_REG))])
10843 @end smallexample
10845 This @code{define_subst} can be applied to any RTL pattern containing
10846 @code{set} of mode SI and generates a copy with clobber when it is
10847 applied.
10849 Assume there is an RTL template for a @code{max} instruction to be used
10850 in @code{define_subst} mentioned above:
10852 @smallexample
10853 (define_insn "maxsi"
10854   [(set (match_operand:SI 0 "register_operand" "=r")
10855         (max:SI
10856           (match_operand:SI 1 "register_operand" "r")
10857           (match_operand:SI 2 "register_operand" "r")))]
10858   ""
10859   "max\t@{%2, %1, %0|%0, %1, %2@}"
10860  [@dots{}])
10861 @end smallexample
10863 To mark the RTL template for @code{define_subst} application,
10864 subst-attributes are used.  They should be declared in advance:
10866 @smallexample
10867 (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
10868 @end smallexample
10870 Here @samp{add_clobber_name} is the attribute name,
10871 @samp{add_clobber_subst} is the name of the corresponding
10872 @code{define_subst}, the third argument (@samp{_noclobber}) is the
10873 attribute value that would be substituted into the unchanged version of
10874 the source RTL template, and the last argument (@samp{_clobber}) is the
10875 value that would be substituted into the second, transformed,
10876 version of the RTL template.
10878 Once the subst-attribute has been defined, it should be used in RTL
10879 templates which need to be processed by the @code{define_subst}.  So,
10880 the original RTL template should be changed:
10882 @smallexample
10883 (define_insn "maxsi<add_clobber_name>"
10884   [(set (match_operand:SI 0 "register_operand" "=r")
10885         (max:SI
10886           (match_operand:SI 1 "register_operand" "r")
10887           (match_operand:SI 2 "register_operand" "r")))]
10888   ""
10889   "max\t@{%2, %1, %0|%0, %1, %2@}"
10890  [@dots{}])
10891 @end smallexample
10893 The result of the @code{define_subst} usage would look like the following:
10895 @smallexample
10896 (define_insn "maxsi_noclobber"
10897   [(set (match_operand:SI 0 "register_operand" "=r")
10898         (max:SI
10899           (match_operand:SI 1 "register_operand" "r")
10900           (match_operand:SI 2 "register_operand" "r")))]
10901   ""
10902   "max\t@{%2, %1, %0|%0, %1, %2@}"
10903  [@dots{}])
10904 (define_insn "maxsi_clobber"
10905   [(set (match_operand:SI 0 "register_operand" "=r")
10906         (max:SI
10907           (match_operand:SI 1 "register_operand" "r")
10908           (match_operand:SI 2 "register_operand" "r")))
10909    (clobber (reg:CC FLAGS_REG))]
10910   ""
10911   "max\t@{%2, %1, %0|%0, %1, %2@}"
10912  [@dots{}])
10913 @end smallexample
10915 @node Define Subst Pattern Matching
10916 @subsection Pattern Matching in @code{define_subst}
10917 @cindex define_subst
10919 All expressions, allowed in @code{define_insn} or @code{define_expand},
10920 are allowed in the input-template of @code{define_subst}, except
10921 @code{match_par_dup}, @code{match_scratch}, @code{match_parallel}. The
10922 meanings of expressions in the input-template were changed:
10924 @code{match_operand} matches any expression (possibly, a subtree in
10925 RTL-template), if modes of the @code{match_operand} and this expression
10926 are the same, or mode of the @code{match_operand} is @code{VOIDmode}, or
10927 this expression is @code{match_dup}, @code{match_op_dup}.  If the
10928 expression is @code{match_operand} too, and predicate of
10929 @code{match_operand} from the input pattern is not empty, then the
10930 predicates are compared.  That can be used for more accurate filtering
10931 of accepted RTL-templates.
10933 @code{match_operator} matches common operators (like @code{plus},
10934 @code{minus}), @code{unspec}, @code{unspec_volatile} operators and
10935 @code{match_operator}s from the original pattern if the modes match and
10936 @code{match_operator} from the input pattern has the same number of
10937 operands as the operator from the original pattern.
10939 @node Define Subst Output Template
10940 @subsection Generation of output template in @code{define_subst}
10941 @cindex define_subst
10943 If all necessary checks for @code{define_subst} application pass, a new
10944 RTL-pattern, based on the output-template, is created to replace the old
10945 template.  Like in input-patterns, meanings of some RTL expressions are
10946 changed when they are used in output-patterns of a @code{define_subst}.
10947 Thus, @code{match_dup} is used for copying the whole expression from the
10948 original pattern, which matched corresponding @code{match_operand} from
10949 the input pattern.
10951 @code{match_dup N} is used in the output template to be replaced with
10952 the expression from the original pattern, which matched
10953 @code{match_operand N} from the input pattern.  As a consequence,
10954 @code{match_dup} cannot be used to point to @code{match_operand}s from
10955 the output pattern, it should always refer to a @code{match_operand}
10956 from the input pattern.  If a @code{match_dup N} occurs more than once
10957 in the output template, its first occurrence is replaced with the
10958 expression from the original pattern, and the subsequent expressions
10959 are replaced with @code{match_dup N}, i.e., a reference to the first
10960 expression.
10962 In the output template one can refer to the expressions from the
10963 original pattern and create new ones.  For instance, some operands could
10964 be added by means of standard @code{match_operand}.
10966 After replacing @code{match_dup} with some RTL-subtree from the original
10967 pattern, it could happen that several @code{match_operand}s in the
10968 output pattern have the same indexes.  It is unknown, how many and what
10969 indexes would be used in the expression which would replace
10970 @code{match_dup}, so such conflicts in indexes are inevitable.  To
10971 overcome this issue, @code{match_operands} and @code{match_operators},
10972 which were introduced into the output pattern, are renumerated when all
10973 @code{match_dup}s are replaced.
10975 Number of alternatives in @code{match_operand}s introduced into the
10976 output template @code{M} could differ from the number of alternatives in
10977 the original pattern @code{N}, so in the resultant pattern there would
10978 be @code{N*M} alternatives.  Thus, constraints from the original pattern
10979 would be duplicated @code{N} times, constraints from the output pattern
10980 would be duplicated @code{M} times, producing all possible combinations.
10981 @end ifset
10983 @ifset INTERNALS
10984 @node Constant Definitions
10985 @section Constant Definitions
10986 @cindex constant definitions
10987 @findex define_constants
10989 Using literal constants inside instruction patterns reduces legibility and
10990 can be a maintenance problem.
10992 To overcome this problem, you may use the @code{define_constants}
10993 expression.  It contains a vector of name-value pairs.  From that
10994 point on, wherever any of the names appears in the MD file, it is as
10995 if the corresponding value had been written instead.  You may use
10996 @code{define_constants} multiple times; each appearance adds more
10997 constants to the table.  It is an error to redefine a constant with
10998 a different value.
11000 To come back to the a29k load multiple example, instead of
11002 @smallexample
11003 (define_insn ""
11004   [(match_parallel 0 "load_multiple_operation"
11005      [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
11006            (match_operand:SI 2 "memory_operand" "m"))
11007       (use (reg:SI 179))
11008       (clobber (reg:SI 179))])]
11009   ""
11010   "loadm 0,0,%1,%2")
11011 @end smallexample
11013 You could write:
11015 @smallexample
11016 (define_constants [
11017     (R_BP 177)
11018     (R_FC 178)
11019     (R_CR 179)
11020     (R_Q  180)
11023 (define_insn ""
11024   [(match_parallel 0 "load_multiple_operation"
11025      [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
11026            (match_operand:SI 2 "memory_operand" "m"))
11027       (use (reg:SI R_CR))
11028       (clobber (reg:SI R_CR))])]
11029   ""
11030   "loadm 0,0,%1,%2")
11031 @end smallexample
11033 The constants that are defined with a define_constant are also output
11034 in the insn-codes.h header file as #defines.
11036 @cindex enumerations
11037 @findex define_c_enum
11038 You can also use the machine description file to define enumerations.
11039 Like the constants defined by @code{define_constant}, these enumerations
11040 are visible to both the machine description file and the main C code.
11042 The syntax is as follows:
11044 @smallexample
11045 (define_c_enum "@var{name}" [
11046   @var{value0}
11047   @var{value1}
11048   (@var{value32} 32)
11049   @var{value33}
11050   @dots{}
11051   @var{valuen}
11053 @end smallexample
11055 This definition causes the equivalent of the following C code to appear
11056 in @file{insn-constants.h}:
11058 @smallexample
11059 enum @var{name} @{
11060   @var{value0} = 0,
11061   @var{value1} = 1,
11062   @var{value32} = 32,
11063   @var{value33} = 33,
11064   @dots{}
11065   @var{valuen} = @var{n}
11067 #define NUM_@var{cname}_VALUES (@var{n} + 1)
11068 @end smallexample
11070 where @var{cname} is the capitalized form of @var{name}.
11071 It also makes each @var{valuei} available in the machine description
11072 file, just as if it had been declared with:
11074 @smallexample
11075 (define_constants [(@var{valuei} @var{i})])
11076 @end smallexample
11078 Each @var{valuei} is usually an upper-case identifier and usually
11079 begins with @var{cname}.
11081 You can split the enumeration definition into as many statements as
11082 you like.  The above example is directly equivalent to:
11084 @smallexample
11085 (define_c_enum "@var{name}" [@var{value0}])
11086 (define_c_enum "@var{name}" [@var{value1}])
11087 @dots{}
11088 (define_c_enum "@var{name}" [@var{valuen}])
11089 @end smallexample
11091 Splitting the enumeration helps to improve the modularity of each
11092 individual @code{.md} file.  For example, if a port defines its
11093 synchronization instructions in a separate @file{sync.md} file,
11094 it is convenient to define all synchronization-specific enumeration
11095 values in @file{sync.md} rather than in the main @file{.md} file.
11097 Some enumeration names have special significance to GCC:
11099 @table @code
11100 @findex unspec_volatile
11101 @item unspecv
11102 If an enumeration called @code{unspecv} is defined, GCC will use it
11103 when printing out @code{unspec_volatile} expressions.  For example:
11105 @smallexample
11106 (define_c_enum "unspecv" [
11107   UNSPECV_BLOCKAGE
11109 @end smallexample
11111 causes GCC to print @samp{(unspec_volatile @dots{} 0)} as:
11113 @smallexample
11114 (unspec_volatile ... UNSPECV_BLOCKAGE)
11115 @end smallexample
11117 @findex unspec
11118 @item unspec
11119 If an enumeration called @code{unspec} is defined, GCC will use
11120 it when printing out @code{unspec} expressions.  GCC will also use
11121 it when printing out @code{unspec_volatile} expressions unless an
11122 @code{unspecv} enumeration is also defined.  You can therefore
11123 decide whether to keep separate enumerations for volatile and
11124 non-volatile expressions or whether to use the same enumeration
11125 for both.
11126 @end table
11128 @findex define_enum
11129 @anchor{define_enum}
11130 Another way of defining an enumeration is to use @code{define_enum}:
11132 @smallexample
11133 (define_enum "@var{name}" [
11134   @var{value0}
11135   @var{value1}
11136   @dots{}
11137   @var{valuen}
11139 @end smallexample
11141 This directive implies:
11143 @smallexample
11144 (define_c_enum "@var{name}" [
11145   @var{cname}_@var{cvalue0}
11146   @var{cname}_@var{cvalue1}
11147   @dots{}
11148   @var{cname}_@var{cvaluen}
11150 @end smallexample
11152 @findex define_enum_attr
11153 where @var{cvaluei} is the capitalized form of @var{valuei}.
11154 However, unlike @code{define_c_enum}, the enumerations defined
11155 by @code{define_enum} can be used in attribute specifications
11156 (@pxref{define_enum_attr}).
11157 @end ifset
11158 @ifset INTERNALS
11159 @node Iterators
11160 @section Iterators
11161 @cindex iterators in @file{.md} files
11163 Ports often need to define similar patterns for more than one machine
11164 mode or for more than one rtx code.  GCC provides some simple iterator
11165 facilities to make this process easier.
11167 @menu
11168 * Mode Iterators::         Generating variations of patterns for different modes.
11169 * Code Iterators::         Doing the same for codes.
11170 * Int Iterators::          Doing the same for integers.
11171 * Subst Iterators::        Generating variations of patterns for define_subst.
11172 * Parameterized Names::    Specifying iterator values in C++ code.
11173 @end menu
11175 @node Mode Iterators
11176 @subsection Mode Iterators
11177 @cindex mode iterators in @file{.md} files
11179 Ports often need to define similar patterns for two or more different modes.
11180 For example:
11182 @itemize @bullet
11183 @item
11184 If a processor has hardware support for both single and double
11185 floating-point arithmetic, the @code{SFmode} patterns tend to be
11186 very similar to the @code{DFmode} ones.
11188 @item
11189 If a port uses @code{SImode} pointers in one configuration and
11190 @code{DImode} pointers in another, it will usually have very similar
11191 @code{SImode} and @code{DImode} patterns for manipulating pointers.
11192 @end itemize
11194 Mode iterators allow several patterns to be instantiated from one
11195 @file{.md} file template.  They can be used with any type of
11196 rtx-based construct, such as a @code{define_insn},
11197 @code{define_split}, or @code{define_peephole2}.
11199 @menu
11200 * Defining Mode Iterators:: Defining a new mode iterator.
11201 * Substitutions::           Combining mode iterators with substitutions
11202 * Examples::                Examples
11203 @end menu
11205 @node Defining Mode Iterators
11206 @subsubsection Defining Mode Iterators
11207 @findex define_mode_iterator
11209 The syntax for defining a mode iterator is:
11211 @smallexample
11212 (define_mode_iterator @var{name} [(@var{mode1} "@var{cond1}") @dots{} (@var{moden} "@var{condn}")])
11213 @end smallexample
11215 This allows subsequent @file{.md} file constructs to use the mode suffix
11216 @code{:@var{name}}.  Every construct that does so will be expanded
11217 @var{n} times, once with every use of @code{:@var{name}} replaced by
11218 @code{:@var{mode1}}, once with every use replaced by @code{:@var{mode2}},
11219 and so on.  In the expansion for a particular @var{modei}, every
11220 C condition will also require that @var{condi} be true.
11222 For example:
11224 @smallexample
11225 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
11226 @end smallexample
11228 defines a new mode suffix @code{:P}.  Every construct that uses
11229 @code{:P} will be expanded twice, once with every @code{:P} replaced
11230 by @code{:SI} and once with every @code{:P} replaced by @code{:DI}.
11231 The @code{:SI} version will only apply if @code{Pmode == SImode} and
11232 the @code{:DI} version will only apply if @code{Pmode == DImode}.
11234 As with other @file{.md} conditions, an empty string is treated
11235 as ``always true''.  @code{(@var{mode} "")} can also be abbreviated
11236 to @code{@var{mode}}.  For example:
11238 @smallexample
11239 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
11240 @end smallexample
11242 means that the @code{:DI} expansion only applies if @code{TARGET_64BIT}
11243 but that the @code{:SI} expansion has no such constraint.
11245 Iterators are applied in the order they are defined.  This can be
11246 significant if two iterators are used in a construct that requires
11247 substitutions.  @xref{Substitutions}.
11249 @node Substitutions
11250 @subsubsection Substitution in Mode Iterators
11251 @findex define_mode_attr
11253 If an @file{.md} file construct uses mode iterators, each version of the
11254 construct will often need slightly different strings or modes.  For
11255 example:
11257 @itemize @bullet
11258 @item
11259 When a @code{define_expand} defines several @code{add@var{m}3} patterns
11260 (@pxref{Standard Names}), each expander will need to use the
11261 appropriate mode name for @var{m}.
11263 @item
11264 When a @code{define_insn} defines several instruction patterns,
11265 each instruction will often use a different assembler mnemonic.
11267 @item
11268 When a @code{define_insn} requires operands with different modes,
11269 using an iterator for one of the operand modes usually requires a specific
11270 mode for the other operand(s).
11271 @end itemize
11273 GCC supports such variations through a system of ``mode attributes''.
11274 There are two standard attributes: @code{mode}, which is the name of
11275 the mode in lower case, and @code{MODE}, which is the same thing in
11276 upper case.  You can define other attributes using:
11278 @smallexample
11279 (define_mode_attr @var{name} [(@var{mode1} "@var{value1}") @dots{} (@var{moden} "@var{valuen}")])
11280 @end smallexample
11282 where @var{name} is the name of the attribute and @var{valuei}
11283 is the value associated with @var{modei}.
11285 When GCC replaces some @var{:iterator} with @var{:mode}, it will scan
11286 each string and mode in the pattern for sequences of the form
11287 @code{<@var{iterator}:@var{attr}>}, where @var{attr} is the name of a
11288 mode attribute.  If the attribute is defined for @var{mode}, the whole
11289 @code{<@dots{}>} sequence will be replaced by the appropriate attribute
11290 value.
11292 For example, suppose an @file{.md} file has:
11294 @smallexample
11295 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
11296 (define_mode_attr load [(SI "lw") (DI "ld")])
11297 @end smallexample
11299 If one of the patterns that uses @code{:P} contains the string
11300 @code{"<P:load>\t%0,%1"}, the @code{SI} version of that pattern
11301 will use @code{"lw\t%0,%1"} and the @code{DI} version will use
11302 @code{"ld\t%0,%1"}.
11304 Here is an example of using an attribute for a mode:
11306 @smallexample
11307 (define_mode_iterator LONG [SI DI])
11308 (define_mode_attr SHORT [(SI "HI") (DI "SI")])
11309 (define_insn @dots{}
11310   (sign_extend:LONG (match_operand:<LONG:SHORT> @dots{})) @dots{})
11311 @end smallexample
11313 The @code{@var{iterator}:} prefix may be omitted, in which case the
11314 substitution will be attempted for every iterator expansion.
11316 @node Examples
11317 @subsubsection Mode Iterator Examples
11319 Here is an example from the MIPS port.  It defines the following
11320 modes and attributes (among others):
11322 @smallexample
11323 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
11324 (define_mode_attr d [(SI "") (DI "d")])
11325 @end smallexample
11327 and uses the following template to define both @code{subsi3}
11328 and @code{subdi3}:
11330 @smallexample
11331 (define_insn "sub<mode>3"
11332   [(set (match_operand:GPR 0 "register_operand" "=d")
11333         (minus:GPR (match_operand:GPR 1 "register_operand" "d")
11334                    (match_operand:GPR 2 "register_operand" "d")))]
11335   ""
11336   "<d>subu\t%0,%1,%2"
11337   [(set_attr "type" "arith")
11338    (set_attr "mode" "<MODE>")])
11339 @end smallexample
11341 This is exactly equivalent to:
11343 @smallexample
11344 (define_insn "subsi3"
11345   [(set (match_operand:SI 0 "register_operand" "=d")
11346         (minus:SI (match_operand:SI 1 "register_operand" "d")
11347                   (match_operand:SI 2 "register_operand" "d")))]
11348   ""
11349   "subu\t%0,%1,%2"
11350   [(set_attr "type" "arith")
11351    (set_attr "mode" "SI")])
11353 (define_insn "subdi3"
11354   [(set (match_operand:DI 0 "register_operand" "=d")
11355         (minus:DI (match_operand:DI 1 "register_operand" "d")
11356                   (match_operand:DI 2 "register_operand" "d")))]
11357   "TARGET_64BIT"
11358   "dsubu\t%0,%1,%2"
11359   [(set_attr "type" "arith")
11360    (set_attr "mode" "DI")])
11361 @end smallexample
11363 @node Code Iterators
11364 @subsection Code Iterators
11365 @cindex code iterators in @file{.md} files
11366 @findex define_code_iterator
11367 @findex define_code_attr
11369 Code iterators operate in a similar way to mode iterators.  @xref{Mode Iterators}.
11371 The construct:
11373 @smallexample
11374 (define_code_iterator @var{name} [(@var{code1} "@var{cond1}") @dots{} (@var{coden} "@var{condn}")])
11375 @end smallexample
11377 defines a pseudo rtx code @var{name} that can be instantiated as
11378 @var{codei} if condition @var{condi} is true.  Each @var{codei}
11379 must have the same rtx format.  @xref{RTL Classes}.
11381 As with mode iterators, each pattern that uses @var{name} will be
11382 expanded @var{n} times, once with all uses of @var{name} replaced by
11383 @var{code1}, once with all uses replaced by @var{code2}, and so on.
11384 @xref{Defining Mode Iterators}.
11386 It is possible to define attributes for codes as well as for modes.
11387 There are two standard code attributes: @code{code}, the name of the
11388 code in lower case, and @code{CODE}, the name of the code in upper case.
11389 Other attributes are defined using:
11391 @smallexample
11392 (define_code_attr @var{name} [(@var{code1} "@var{value1}") @dots{} (@var{coden} "@var{valuen}")])
11393 @end smallexample
11395 Instruction patterns can use code attributes as rtx codes, which can be
11396 useful if two sets of codes act in tandem.  For example, the following
11397 @code{define_insn} defines two patterns, one calculating a signed absolute
11398 difference and another calculating an unsigned absolute difference:
11400 @smallexample
11401 (define_code_iterator any_max [smax umax])
11402 (define_code_attr paired_min [(smax "smin") (umax "umin")])
11403 (define_insn @dots{}
11404   [(set (match_operand:SI 0 @dots{})
11405         (minus:SI (any_max:SI (match_operand:SI 1 @dots{})
11406                               (match_operand:SI 2 @dots{}))
11407                   (<paired_min>:SI (match_dup 1) (match_dup 2))))]
11408   @dots{})
11409 @end smallexample
11411 The signed version of the instruction uses @code{smax} and @code{smin}
11412 while the unsigned version uses @code{umax} and @code{umin}.  There
11413 are no versions that pair @code{smax} with @code{umin} or @code{umax}
11414 with @code{smin}.
11416 Here's an example of code iterators in action, taken from the MIPS port:
11418 @smallexample
11419 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
11420                                 eq ne gt ge lt le gtu geu ltu leu])
11422 (define_expand "b<code>"
11423   [(set (pc)
11424         (if_then_else (any_cond:CC (cc0)
11425                                    (const_int 0))
11426                       (label_ref (match_operand 0 ""))
11427                       (pc)))]
11428   ""
11430   gen_conditional_branch (operands, <CODE>);
11431   DONE;
11433 @end smallexample
11435 This is equivalent to:
11437 @smallexample
11438 (define_expand "bunordered"
11439   [(set (pc)
11440         (if_then_else (unordered:CC (cc0)
11441                                     (const_int 0))
11442                       (label_ref (match_operand 0 ""))
11443                       (pc)))]
11444   ""
11446   gen_conditional_branch (operands, UNORDERED);
11447   DONE;
11450 (define_expand "bordered"
11451   [(set (pc)
11452         (if_then_else (ordered:CC (cc0)
11453                                   (const_int 0))
11454                       (label_ref (match_operand 0 ""))
11455                       (pc)))]
11456   ""
11458   gen_conditional_branch (operands, ORDERED);
11459   DONE;
11462 @dots{}
11463 @end smallexample
11465 @node Int Iterators
11466 @subsection Int Iterators
11467 @cindex int iterators in @file{.md} files
11468 @findex define_int_iterator
11469 @findex define_int_attr
11471 Int iterators operate in a similar way to code iterators.  @xref{Code Iterators}.
11473 The construct:
11475 @smallexample
11476 (define_int_iterator @var{name} [(@var{int1} "@var{cond1}") @dots{} (@var{intn} "@var{condn}")])
11477 @end smallexample
11479 defines a pseudo integer constant @var{name} that can be instantiated as
11480 @var{inti} if condition @var{condi} is true.  Each @var{int} must have the
11481 same rtx format.  @xref{RTL Classes}.  Int iterators can appear in only
11482 those rtx fields that have 'i', 'n', 'w', or 'p' as the specifier.  This
11483 means that each @var{int} has to be a constant defined using define_constant
11484 or define_c_enum.
11486 As with mode and code iterators, each pattern that uses @var{name} will be
11487 expanded @var{n} times, once with all uses of @var{name} replaced by
11488 @var{int1}, once with all uses replaced by @var{int2}, and so on.
11489 @xref{Defining Mode Iterators}.
11491 It is possible to define attributes for ints as well as for codes and modes.
11492 Attributes are defined using:
11494 @smallexample
11495 (define_int_attr @var{name} [(@var{int1} "@var{value1}") @dots{} (@var{intn} "@var{valuen}")])
11496 @end smallexample
11498 Here's an example of int iterators in action, taken from the ARM port:
11500 @smallexample
11501 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
11503 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
11505 (define_insn "neon_vq<absneg><mode>"
11506   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
11507         (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
11508                        (match_operand:SI 2 "immediate_operand" "i")]
11509                       QABSNEG))]
11510   "TARGET_NEON"
11511   "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
11512   [(set_attr "type" "neon_vqneg_vqabs")]
11515 @end smallexample
11517 This is equivalent to:
11519 @smallexample
11520 (define_insn "neon_vqabs<mode>"
11521   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
11522         (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
11523                        (match_operand:SI 2 "immediate_operand" "i")]
11524                       UNSPEC_VQABS))]
11525   "TARGET_NEON"
11526   "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
11527   [(set_attr "type" "neon_vqneg_vqabs")]
11530 (define_insn "neon_vqneg<mode>"
11531   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
11532         (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
11533                        (match_operand:SI 2 "immediate_operand" "i")]
11534                       UNSPEC_VQNEG))]
11535   "TARGET_NEON"
11536   "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
11537   [(set_attr "type" "neon_vqneg_vqabs")]
11540 @end smallexample
11542 @node Subst Iterators
11543 @subsection Subst Iterators
11544 @cindex subst iterators in @file{.md} files
11545 @findex define_subst
11546 @findex define_subst_attr
11548 Subst iterators are special type of iterators with the following
11549 restrictions: they could not be declared explicitly, they always have
11550 only two values, and they do not have explicit dedicated name.
11551 Subst-iterators are triggered only when corresponding subst-attribute is
11552 used in RTL-pattern.
11554 Subst iterators transform templates in the following way: the templates
11555 are duplicated, the subst-attributes in these templates are replaced
11556 with the corresponding values, and a new attribute is implicitly added
11557 to the given @code{define_insn}/@code{define_expand}.  The name of the
11558 added attribute matches the name of @code{define_subst}.  Such
11559 attributes are declared implicitly, and it is not allowed to have a
11560 @code{define_attr} named as a @code{define_subst}.
11562 Each subst iterator is linked to a @code{define_subst}.  It is declared
11563 implicitly by the first appearance of the corresponding
11564 @code{define_subst_attr}, and it is not allowed to define it explicitly.
11566 Declarations of subst-attributes have the following syntax:
11568 @findex define_subst_attr
11569 @smallexample
11570 (define_subst_attr "@var{name}"
11571   "@var{subst-name}"
11572   "@var{no-subst-value}"
11573   "@var{subst-applied-value}")
11574 @end smallexample
11576 @var{name} is a string with which the given subst-attribute could be
11577 referred to.
11579 @var{subst-name} shows which @code{define_subst} should be applied to an
11580 RTL-template if the given subst-attribute is present in the
11581 RTL-template.
11583 @var{no-subst-value} is a value with which subst-attribute would be
11584 replaced in the first copy of the original RTL-template.
11586 @var{subst-applied-value} is a value with which subst-attribute would be
11587 replaced in the second copy of the original RTL-template.
11589 @node Parameterized Names
11590 @subsection Parameterized Names
11591 @cindex @samp{@@} in instruction pattern names
11592 Ports sometimes need to apply iterators using C++ code, in order to
11593 get the code or RTL pattern for a specific instruction.  For example,
11594 suppose we have the @samp{neon_vq<absneg><mode>} pattern given above:
11596 @smallexample
11597 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
11599 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
11601 (define_insn "neon_vq<absneg><mode>"
11602   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
11603         (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
11604                        (match_operand:SI 2 "immediate_operand" "i")]
11605                       QABSNEG))]
11606   @dots{}
11608 @end smallexample
11610 A port might need to generate this pattern for a variable
11611 @samp{QABSNEG} value and a variable @samp{VDQIW} mode.  There are two
11612 ways of doing this.  The first is to build the rtx for the pattern
11613 directly from C++ code; this is a valid technique and avoids any risk
11614 of combinatorial explosion.  The second is to prefix the instruction
11615 name with the special character @samp{@@}, which tells GCC to generate
11616 the four additional functions below.  In each case, @var{name} is the
11617 name of the instruction without the leading @samp{@@} character,
11618 without the @samp{<@dots{}>} placeholders, and with any underscore
11619 before a @samp{<@dots{}>} placeholder removed if keeping it would
11620 lead to a double or trailing underscore.
11622 @table @samp
11623 @item insn_code maybe_code_for_@var{name} (@var{i1}, @var{i2}, @dots{})
11624 See whether replacing the first @samp{<@dots{}>} placeholder with
11625 iterator value @var{i1}, the second with iterator value @var{i2}, and
11626 so on, gives a valid instruction.  Return its code if so, otherwise
11627 return @code{CODE_FOR_nothing}.
11629 @item insn_code code_for_@var{name} (@var{i1}, @var{i2}, @dots{})
11630 Same, but abort the compiler if the requested instruction does not exist.
11632 @item rtx maybe_gen_@var{name} (@var{i1}, @var{i2}, @dots{}, @var{op0}, @var{op1}, @dots{})
11633 Check for a valid instruction in the same way as
11634 @code{maybe_code_for_@var{name}}.  If the instruction exists,
11635 generate an instance of it using the operand values given by @var{op0},
11636 @var{op1}, and so on, otherwise return null.
11638 @item rtx gen_@var{name} (@var{i1}, @var{i2}, @dots{}, @var{op0}, @var{op1}, @dots{})
11639 Same, but abort the compiler if the requested instruction does not exist,
11640 or if the instruction generator invoked the @code{FAIL} macro.
11641 @end table
11643 For example, changing the pattern above to:
11645 @smallexample
11646 (define_insn "@@neon_vq<absneg><mode>"
11647   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
11648         (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
11649                        (match_operand:SI 2 "immediate_operand" "i")]
11650                       QABSNEG))]
11651   @dots{}
11653 @end smallexample
11655 would define the same patterns as before, but in addition would generate
11656 the four functions below:
11658 @smallexample
11659 insn_code maybe_code_for_neon_vq (int, machine_mode);
11660 insn_code code_for_neon_vq (int, machine_mode);
11661 rtx maybe_gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
11662 rtx gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
11663 @end smallexample
11665 Calling @samp{code_for_neon_vq (UNSPEC_VQABS, V8QImode)}
11666 would then give @code{CODE_FOR_neon_vqabsv8qi}.
11668 It is possible to have multiple @samp{@@} patterns with the same
11669 name and same types of iterator.  For example:
11671 @smallexample
11672 (define_insn "@@some_arithmetic_op<mode>"
11673   [(set (match_operand:INTEGER_MODES 0 "register_operand") @dots{})]
11674   @dots{}
11677 (define_insn "@@some_arithmetic_op<mode>"
11678   [(set (match_operand:FLOAT_MODES 0 "register_operand") @dots{})]
11679   @dots{}
11681 @end smallexample
11683 would produce a single set of functions that handles both
11684 @code{INTEGER_MODES} and @code{FLOAT_MODES}.
11686 It is also possible for these @samp{@@} patterns to have different
11687 numbers of operands from each other.  For example, patterns with
11688 a binary rtl code might take three operands (one output and two inputs)
11689 while patterns with a ternary rtl code might take four operands (one
11690 output and three inputs).  This combination would produce separate
11691 @samp{maybe_gen_@var{name}} and @samp{gen_@var{name}} functions for
11692 each operand count, but it would still produce a single
11693 @samp{maybe_code_for_@var{name}} and a single @samp{code_for_@var{name}}.
11695 @end ifset