]> gcc.gnu.org Git - gcc.git/blame - gcc/doc/md.texi
builtins.c: (expand_builtin_memcmp, expand_builtin_strncmp): s/cmpstrsi/cmpstrnsi
[gcc.git] / gcc / doc / md.texi
CommitLineData
b5e01d4b 1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1996, 1998, 1999, 2000, 2001,
c5c367ac 2@c 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
03dda8e3
RK
3@c This is part of the GCC manual.
4@c For copying conditions, see the file gcc.texi.
5
6@ifset INTERNALS
7@node Machine Desc
8@chapter Machine Descriptions
9@cindex machine descriptions
10
11A machine description has two parts: a file of instruction patterns
12(@file{.md} file) and a C header file of macro definitions.
13
14The @file{.md} file for a target machine contains a pattern for each
15instruction that the target machine supports (or at least each instruction
16that is worth telling the compiler about). It may also contain comments.
17A semicolon causes the rest of the line to be a comment, unless the semicolon
18is inside a quoted string.
19
20See the next chapter for information on the C header file.
21
22@menu
55e4756f 23* Overview:: How the machine description is used.
03dda8e3
RK
24* Patterns:: How to write instruction patterns.
25* Example:: An explained example of a @code{define_insn} pattern.
26* RTL Template:: The RTL template defines what insns match a pattern.
27* Output Template:: The output template says how to make assembler code
28 from such an insn.
29* Output Statement:: For more generality, write C code to output
30 the assembler code.
e543e219
ZW
31* Predicates:: Controlling what kinds of operands can be used
32 for an insn.
33* Constraints:: Fine-tuning operand selection.
03dda8e3
RK
34* Standard Names:: Names mark patterns to use for code generation.
35* Pattern Ordering:: When the order of patterns makes a difference.
36* Dependent Patterns:: Having one pattern may make you need another.
37* Jump Patterns:: Special considerations for patterns for jump insns.
6e4fcc95 38* Looping Patterns:: How to define patterns for special looping insns.
03dda8e3 39* Insn Canonicalizations::Canonicalization of Instructions
03dda8e3 40* Expander Definitions::Generating a sequence of several RTL insns
f3a3d0d3
RH
41 for a standard operation.
42* Insn Splitting:: Splitting Instructions into Multiple Instructions.
04d8aa70 43* Including Patterns:: Including Patterns in Machine Descriptions.
f3a3d0d3 44* Peephole Definitions::Defining machine-specific peephole optimizations.
03dda8e3 45* Insn Attributes:: Specifying the value of attributes for generated insns.
3262c1f5
RH
46* Conditional Execution::Generating @code{define_insn} patterns for
47 predication.
c25c12b8
R
48* Constant Definitions::Defining symbolic constants that can be used in the
49 md file.
032e8348 50* Macros:: Using macros to generate patterns from a template.
03dda8e3
RK
51@end menu
52
55e4756f
DD
53@node Overview
54@section Overview of How the Machine Description is Used
55
56There are three main conversions that happen in the compiler:
57
58@enumerate
59
60@item
61The front end reads the source code and builds a parse tree.
62
63@item
64The parse tree is used to generate an RTL insn list based on named
65instruction patterns.
66
67@item
68The insn list is matched against the RTL templates to produce assembler
69code.
70
71@end enumerate
72
73For the generate pass, only the names of the insns matter, from either a
74named @code{define_insn} or a @code{define_expand}. The compiler will
75choose the pattern with the right name and apply the operands according
76to the documentation later in this chapter, without regard for the RTL
77template or operand constraints. Note that the names the compiler looks
d7d9c429 78for are hard-coded in the compiler---it will ignore unnamed patterns and
55e4756f
DD
79patterns with names it doesn't know about, but if you don't provide a
80named pattern it needs, it will abort.
81
82If a @code{define_insn} is used, the template given is inserted into the
83insn list. If a @code{define_expand} is used, one of three things
84happens, based on the condition logic. The condition logic may manually
85create new insns for the insn list, say via @code{emit_insn()}, and
aee96fe9 86invoke @code{DONE}. For certain named patterns, it may invoke @code{FAIL} to tell the
55e4756f
DD
87compiler to use an alternate way of performing that task. If it invokes
88neither @code{DONE} nor @code{FAIL}, the template given in the pattern
89is inserted, as if the @code{define_expand} were a @code{define_insn}.
90
91Once the insn list is generated, various optimization passes convert,
92replace, and rearrange the insns in the insn list. This is where the
93@code{define_split} and @code{define_peephole} patterns get used, for
94example.
95
96Finally, the insn list's RTL is matched up with the RTL templates in the
97@code{define_insn} patterns, and those patterns are used to emit the
98final assembly code. For this purpose, each named @code{define_insn}
99acts like it's unnamed, since the names are ignored.
100
03dda8e3
RK
101@node Patterns
102@section Everything about Instruction Patterns
103@cindex patterns
104@cindex instruction patterns
105
106@findex define_insn
107Each instruction pattern contains an incomplete RTL expression, with pieces
108to be filled in later, operand constraints that restrict how the pieces can
109be filled in, and an output pattern or C code to generate the assembler
110output, all wrapped up in a @code{define_insn} expression.
111
112A @code{define_insn} is an RTL expression containing four or five operands:
113
114@enumerate
115@item
116An optional name. The presence of a name indicate that this instruction
117pattern can perform a certain standard job for the RTL-generation
118pass of the compiler. This pass knows certain names and will use
119the instruction patterns with those names, if the names are defined
120in the machine description.
121
122The absence of a name is indicated by writing an empty string
123where the name should go. Nameless instruction patterns are never
124used for generating RTL code, but they may permit several simpler insns
125to be combined later on.
126
127Names that are not thus known and used in RTL-generation have no
128effect; they are equivalent to no name at all.
129
661cb0b7
RK
130For the purpose of debugging the compiler, you may also specify a
131name beginning with the @samp{*} character. Such a name is used only
132for identifying the instruction in RTL dumps; it is entirely equivalent
133to having a nameless pattern for all other purposes.
134
03dda8e3
RK
135@item
136The @dfn{RTL template} (@pxref{RTL Template}) is a vector of incomplete
137RTL expressions which show what the instruction should look like. It is
138incomplete because it may contain @code{match_operand},
139@code{match_operator}, and @code{match_dup} expressions that stand for
140operands of the instruction.
141
142If the vector has only one element, that element is the template for the
143instruction pattern. If the vector has multiple elements, then the
144instruction pattern is a @code{parallel} expression containing the
145elements described.
146
147@item
148@cindex pattern conditions
149@cindex conditions, in patterns
150A condition. This is a string which contains a C expression that is
151the final test to decide whether an insn body matches this pattern.
152
153@cindex named patterns and conditions
154For a named pattern, the condition (if present) may not depend on
155the data in the insn being matched, but only the target-machine-type
156flags. The compiler needs to test these conditions during
157initialization in order to learn exactly which named instructions are
158available in a particular run.
159
160@findex operands
161For nameless patterns, the condition is applied only when matching an
162individual insn, and only after the insn has matched the pattern's
163recognition template. The insn's operands may be found in the vector
fde6d81f
HPN
164@code{operands}. For an insn where the condition has once matched, it
165can't be used to control register allocation, for example by excluding
166certain hard registers or hard register combinations.
03dda8e3
RK
167
168@item
169The @dfn{output template}: a string that says how to output matching
170insns as assembler code. @samp{%} in this string specifies where
171to substitute the value of an operand. @xref{Output Template}.
172
173When simple substitution isn't general enough, you can specify a piece
174of C code to compute the output. @xref{Output Statement}.
175
176@item
177Optionally, a vector containing the values of attributes for insns matching
178this pattern. @xref{Insn Attributes}.
179@end enumerate
180
181@node Example
182@section Example of @code{define_insn}
183@cindex @code{define_insn} example
184
185Here is an actual example of an instruction pattern, for the 68000/68020.
186
3ab51846 187@smallexample
03dda8e3
RK
188(define_insn "tstsi"
189 [(set (cc0)
190 (match_operand:SI 0 "general_operand" "rm"))]
191 ""
192 "*
f282ffb3 193@{
0f40f9f7 194 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
03dda8e3 195 return \"tstl %0\";
f282ffb3 196 return \"cmpl #0,%0\";
0f40f9f7 197@}")
3ab51846 198@end smallexample
0f40f9f7
ZW
199
200@noindent
201This can also be written using braced strings:
202
3ab51846 203@smallexample
0f40f9f7
ZW
204(define_insn "tstsi"
205 [(set (cc0)
206 (match_operand:SI 0 "general_operand" "rm"))]
207 ""
f282ffb3 208@{
0f40f9f7
ZW
209 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
210 return "tstl %0";
f282ffb3 211 return "cmpl #0,%0";
0f40f9f7 212@})
3ab51846 213@end smallexample
03dda8e3
RK
214
215This is an instruction that sets the condition codes based on the value of
216a general operand. It has no condition, so any insn whose RTL description
217has the form shown may be handled according to this pattern. The name
218@samp{tstsi} means ``test a @code{SImode} value'' and tells the RTL generation
219pass that, when it is necessary to test such a value, an insn to do so
220can be constructed using this pattern.
221
222The output control string is a piece of C code which chooses which
223output template to return based on the kind of operand and the specific
224type of CPU for which code is being generated.
225
226@samp{"rm"} is an operand constraint. Its meaning is explained below.
227
228@node RTL Template
229@section RTL Template
230@cindex RTL insn template
231@cindex generating insns
232@cindex insns, generating
233@cindex recognizing insns
234@cindex insns, recognizing
235
236The RTL template is used to define which insns match the particular pattern
237and how to find their operands. For named patterns, the RTL template also
238says how to construct an insn from specified operands.
239
240Construction involves substituting specified operands into a copy of the
241template. Matching involves determining the values that serve as the
242operands in the insn being matched. Both of these activities are
243controlled by special expression types that direct matching and
244substitution of the operands.
245
246@table @code
247@findex match_operand
248@item (match_operand:@var{m} @var{n} @var{predicate} @var{constraint})
249This expression is a placeholder for operand number @var{n} of
250the insn. When constructing an insn, operand number @var{n}
251will be substituted at this point. When matching an insn, whatever
252appears at this position in the insn will be taken as operand
253number @var{n}; but it must satisfy @var{predicate} or this instruction
254pattern will not match at all.
255
256Operand numbers must be chosen consecutively counting from zero in
257each instruction pattern. There may be only one @code{match_operand}
258expression in the pattern for each operand number. Usually operands
259are numbered in the order of appearance in @code{match_operand}
72938a4c
MM
260expressions. In the case of a @code{define_expand}, any operand numbers
261used only in @code{match_dup} expressions have higher values than all
262other operand numbers.
03dda8e3 263
e543e219
ZW
264@var{predicate} is a string that is the name of a function that
265accepts two arguments, an expression and a machine mode.
266@xref{Predicates}. During matching, the function will be called with
267the putative operand as the expression and @var{m} as the mode
268argument (if @var{m} is not specified, @code{VOIDmode} will be used,
269which normally causes @var{predicate} to accept any mode). If it
270returns zero, this instruction pattern fails to match.
271@var{predicate} may be an empty string; then it means no test is to be
272done on the operand, so anything which occurs in this position is
273valid.
03dda8e3
RK
274
275Most of the time, @var{predicate} will reject modes other than @var{m}---but
276not always. For example, the predicate @code{address_operand} uses
277@var{m} as the mode of memory ref that the address should be valid for.
278Many predicates accept @code{const_int} nodes even though their mode is
279@code{VOIDmode}.
280
281@var{constraint} controls reloading and the choice of the best register
282class to use for a value, as explained later (@pxref{Constraints}).
e543e219 283If the constraint would be an empty string, it can be omitted.
03dda8e3
RK
284
285People are often unclear on the difference between the constraint and the
286predicate. The predicate helps decide whether a given insn matches the
287pattern. The constraint plays no role in this decision; instead, it
288controls various decisions in the case of an insn which does match.
289
03dda8e3
RK
290@findex match_scratch
291@item (match_scratch:@var{m} @var{n} @var{constraint})
292This expression is also a placeholder for operand number @var{n}
293and indicates that operand must be a @code{scratch} or @code{reg}
294expression.
295
296When matching patterns, this is equivalent to
297
298@smallexample
299(match_operand:@var{m} @var{n} "scratch_operand" @var{pred})
300@end smallexample
301
302but, when generating RTL, it produces a (@code{scratch}:@var{m})
303expression.
304
305If the last few expressions in a @code{parallel} are @code{clobber}
306expressions whose operands are either a hard register or
307@code{match_scratch}, the combiner can add or delete them when
308necessary. @xref{Side Effects}.
309
310@findex match_dup
311@item (match_dup @var{n})
312This expression is also a placeholder for operand number @var{n}.
313It is used when the operand needs to appear more than once in the
314insn.
315
316In construction, @code{match_dup} acts just like @code{match_operand}:
317the operand is substituted into the insn being constructed. But in
318matching, @code{match_dup} behaves differently. It assumes that operand
319number @var{n} has already been determined by a @code{match_operand}
320appearing earlier in the recognition template, and it matches only an
321identical-looking expression.
322
55e4756f
DD
323Note that @code{match_dup} should not be used to tell the compiler that
324a particular register is being used for two operands (example:
325@code{add} that adds one register to another; the second register is
326both an input operand and the output operand). Use a matching
327constraint (@pxref{Simple Constraints}) for those. @code{match_dup} is for the cases where one
328operand is used in two places in the template, such as an instruction
329that computes both a quotient and a remainder, where the opcode takes
330two input operands but the RTL template has to refer to each of those
331twice; once for the quotient pattern and once for the remainder pattern.
332
03dda8e3
RK
333@findex match_operator
334@item (match_operator:@var{m} @var{n} @var{predicate} [@var{operands}@dots{}])
335This pattern is a kind of placeholder for a variable RTL expression
336code.
337
338When constructing an insn, it stands for an RTL expression whose
339expression code is taken from that of operand @var{n}, and whose
340operands are constructed from the patterns @var{operands}.
341
342When matching an expression, it matches an expression if the function
343@var{predicate} returns nonzero on that expression @emph{and} the
344patterns @var{operands} match the operands of the expression.
345
346Suppose that the function @code{commutative_operator} is defined as
347follows, to match any expression whose operator is one of the
348commutative arithmetic operators of RTL and whose mode is @var{mode}:
349
350@smallexample
351int
ec8e098d 352commutative_integer_operator (x, mode)
03dda8e3
RK
353 rtx x;
354 enum machine_mode mode;
355@{
356 enum rtx_code code = GET_CODE (x);
357 if (GET_MODE (x) != mode)
358 return 0;
ec8e098d 359 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
03dda8e3
RK
360 || code == EQ || code == NE);
361@}
362@end smallexample
363
364Then the following pattern will match any RTL expression consisting
365of a commutative operator applied to two general operands:
366
367@smallexample
368(match_operator:SI 3 "commutative_operator"
369 [(match_operand:SI 1 "general_operand" "g")
370 (match_operand:SI 2 "general_operand" "g")])
371@end smallexample
372
373Here the vector @code{[@var{operands}@dots{}]} contains two patterns
374because the expressions to be matched all contain two operands.
375
376When this pattern does match, the two operands of the commutative
377operator are recorded as operands 1 and 2 of the insn. (This is done
378by the two instances of @code{match_operand}.) Operand 3 of the insn
379will be the entire commutative expression: use @code{GET_CODE
380(operands[3])} to see which commutative operator was used.
381
382The machine mode @var{m} of @code{match_operator} works like that of
383@code{match_operand}: it is passed as the second argument to the
384predicate function, and that function is solely responsible for
385deciding whether the expression to be matched ``has'' that mode.
386
387When constructing an insn, argument 3 of the gen-function will specify
e979f9e8 388the operation (i.e.@: the expression code) for the expression to be
03dda8e3
RK
389made. It should be an RTL expression, whose expression code is copied
390into a new expression whose operands are arguments 1 and 2 of the
391gen-function. The subexpressions of argument 3 are not used;
392only its expression code matters.
393
394When @code{match_operator} is used in a pattern for matching an insn,
395it usually best if the operand number of the @code{match_operator}
396is higher than that of the actual operands of the insn. This improves
397register allocation because the register allocator often looks at
398operands 1 and 2 of insns to see if it can do register tying.
399
400There is no way to specify constraints in @code{match_operator}. The
401operand of the insn which corresponds to the @code{match_operator}
402never has any constraints because it is never reloaded as a whole.
403However, if parts of its @var{operands} are matched by
404@code{match_operand} patterns, those parts may have constraints of
405their own.
406
407@findex match_op_dup
408@item (match_op_dup:@var{m} @var{n}[@var{operands}@dots{}])
409Like @code{match_dup}, except that it applies to operators instead of
410operands. When constructing an insn, operand number @var{n} will be
411substituted at this point. But in matching, @code{match_op_dup} behaves
412differently. It assumes that operand number @var{n} has already been
413determined by a @code{match_operator} appearing earlier in the
414recognition template, and it matches only an identical-looking
415expression.
416
417@findex match_parallel
418@item (match_parallel @var{n} @var{predicate} [@var{subpat}@dots{}])
419This pattern is a placeholder for an insn that consists of a
420@code{parallel} expression with a variable number of elements. This
421expression should only appear at the top level of an insn pattern.
422
423When constructing an insn, operand number @var{n} will be substituted at
424this point. When matching an insn, it matches if the body of the insn
425is a @code{parallel} expression with at least as many elements as the
426vector of @var{subpat} expressions in the @code{match_parallel}, if each
427@var{subpat} matches the corresponding element of the @code{parallel},
428@emph{and} the function @var{predicate} returns nonzero on the
429@code{parallel} that is the body of the insn. It is the responsibility
430of the predicate to validate elements of the @code{parallel} beyond
bd819a4a 431those listed in the @code{match_parallel}.
03dda8e3
RK
432
433A typical use of @code{match_parallel} is to match load and store
434multiple expressions, which can contain a variable number of elements
435in a @code{parallel}. For example,
03dda8e3
RK
436
437@smallexample
438(define_insn ""
439 [(match_parallel 0 "load_multiple_operation"
440 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
441 (match_operand:SI 2 "memory_operand" "m"))
442 (use (reg:SI 179))
443 (clobber (reg:SI 179))])]
444 ""
445 "loadm 0,0,%1,%2")
446@end smallexample
447
448This example comes from @file{a29k.md}. The function
9c34dbbf 449@code{load_multiple_operation} is defined in @file{a29k.c} and checks
03dda8e3
RK
450that subsequent elements in the @code{parallel} are the same as the
451@code{set} in the pattern, except that they are referencing subsequent
452registers and memory locations.
453
454An insn that matches this pattern might look like:
455
456@smallexample
457(parallel
458 [(set (reg:SI 20) (mem:SI (reg:SI 100)))
459 (use (reg:SI 179))
460 (clobber (reg:SI 179))
461 (set (reg:SI 21)
462 (mem:SI (plus:SI (reg:SI 100)
463 (const_int 4))))
464 (set (reg:SI 22)
465 (mem:SI (plus:SI (reg:SI 100)
466 (const_int 8))))])
467@end smallexample
468
469@findex match_par_dup
470@item (match_par_dup @var{n} [@var{subpat}@dots{}])
471Like @code{match_op_dup}, but for @code{match_parallel} instead of
472@code{match_operator}.
473
03dda8e3
RK
474@end table
475
476@node Output Template
477@section Output Templates and Operand Substitution
478@cindex output templates
479@cindex operand substitution
480
481@cindex @samp{%} in template
482@cindex percent sign
483The @dfn{output template} is a string which specifies how to output the
484assembler code for an instruction pattern. Most of the template is a
485fixed string which is output literally. The character @samp{%} is used
486to specify where to substitute an operand; it can also be used to
487identify places where different variants of the assembler require
488different syntax.
489
490In the simplest case, a @samp{%} followed by a digit @var{n} says to output
491operand @var{n} at that point in the string.
492
493@samp{%} followed by a letter and a digit says to output an operand in an
494alternate fashion. Four letters have standard, built-in meanings described
495below. The machine description macro @code{PRINT_OPERAND} can define
496additional letters with nonstandard meanings.
497
498@samp{%c@var{digit}} can be used to substitute an operand that is a
499constant value without the syntax that normally indicates an immediate
500operand.
501
502@samp{%n@var{digit}} is like @samp{%c@var{digit}} except that the value of
503the constant is negated before printing.
504
505@samp{%a@var{digit}} can be used to substitute an operand as if it were a
506memory reference, with the actual operand treated as the address. This may
507be useful when outputting a ``load address'' instruction, because often the
508assembler syntax for such an instruction requires you to write the operand
509as if it were a memory reference.
510
511@samp{%l@var{digit}} is used to substitute a @code{label_ref} into a jump
512instruction.
513
514@samp{%=} outputs a number which is unique to each instruction in the
515entire compilation. This is useful for making local labels to be
516referred to more than once in a single template that generates multiple
517assembler instructions.
518
519@samp{%} followed by a punctuation character specifies a substitution that
520does not use an operand. Only one case is standard: @samp{%%} outputs a
521@samp{%} into the assembler code. Other nonstandard cases can be
522defined in the @code{PRINT_OPERAND} macro. You must also define
523which punctuation characters are valid with the
524@code{PRINT_OPERAND_PUNCT_VALID_P} macro.
525
526@cindex \
527@cindex backslash
528The template may generate multiple assembler instructions. Write the text
529for the instructions, with @samp{\;} between them.
530
531@cindex matching operands
532When the RTL contains two operands which are required by constraint to match
533each other, the output template must refer only to the lower-numbered operand.
534Matching operands are not always identical, and the rest of the compiler
535arranges to put the proper RTL expression for printing into the lower-numbered
536operand.
537
538One use of nonstandard letters or punctuation following @samp{%} is to
539distinguish between different assembler languages for the same machine; for
540example, Motorola syntax versus MIT syntax for the 68000. Motorola syntax
541requires periods in most opcode names, while MIT syntax does not. For
542example, the opcode @samp{movel} in MIT syntax is @samp{move.l} in Motorola
543syntax. The same file of patterns is used for both kinds of output syntax,
544but the character sequence @samp{%.} is used in each place where Motorola
545syntax wants a period. The @code{PRINT_OPERAND} macro for Motorola syntax
546defines the sequence to output a period; the macro for MIT syntax defines
547it to do nothing.
548
549@cindex @code{#} in template
550As a special case, a template consisting of the single character @code{#}
551instructs the compiler to first split the insn, and then output the
552resulting instructions separately. This helps eliminate redundancy in the
553output templates. If you have a @code{define_insn} that needs to emit
554multiple assembler instructions, and there is an matching @code{define_split}
555already defined, then you can simply use @code{#} as the output template
556instead of writing an output template that emits the multiple assembler
557instructions.
558
559If the macro @code{ASSEMBLER_DIALECT} is defined, you can use construct
560of the form @samp{@{option0|option1|option2@}} in the templates. These
561describe multiple variants of assembler language syntax.
562@xref{Instruction Output}.
563
564@node Output Statement
565@section C Statements for Assembler Output
566@cindex output statements
567@cindex C statements for assembler output
568@cindex generating assembler output
569
570Often a single fixed template string cannot produce correct and efficient
571assembler code for all the cases that are recognized by a single
572instruction pattern. For example, the opcodes may depend on the kinds of
573operands; or some unfortunate combinations of operands may require extra
574machine instructions.
575
576If the output control string starts with a @samp{@@}, then it is actually
577a series of templates, each on a separate line. (Blank lines and
578leading spaces and tabs are ignored.) The templates correspond to the
579pattern's constraint alternatives (@pxref{Multi-Alternative}). For example,
580if a target machine has a two-address add instruction @samp{addr} to add
581into a register and another @samp{addm} to add a register to memory, you
582might write this pattern:
583
584@smallexample
585(define_insn "addsi3"
586 [(set (match_operand:SI 0 "general_operand" "=r,m")
587 (plus:SI (match_operand:SI 1 "general_operand" "0,0")
588 (match_operand:SI 2 "general_operand" "g,r")))]
589 ""
590 "@@
591 addr %2,%0
592 addm %2,%0")
593@end smallexample
594
595@cindex @code{*} in template
596@cindex asterisk in template
597If the output control string starts with a @samp{*}, then it is not an
598output template but rather a piece of C program that should compute a
599template. It should execute a @code{return} statement to return the
600template-string you want. Most such templates use C string literals, which
601require doublequote characters to delimit them. To include these
602doublequote characters in the string, prefix each one with @samp{\}.
603
0f40f9f7
ZW
604If the output control string is written as a brace block instead of a
605double-quoted string, it is automatically assumed to be C code. In that
606case, it is not necessary to put in a leading asterisk, or to escape the
607doublequotes surrounding C string literals.
608
03dda8e3
RK
609The operands may be found in the array @code{operands}, whose C data type
610is @code{rtx []}.
611
612It is very common to select different ways of generating assembler code
613based on whether an immediate operand is within a certain range. Be
614careful when doing this, because the result of @code{INTVAL} is an
615integer on the host machine. If the host machine has more bits in an
616@code{int} than the target machine has in the mode in which the constant
617will be used, then some of the bits you get from @code{INTVAL} will be
618superfluous. For proper results, you must carefully disregard the
619values of those bits.
620
621@findex output_asm_insn
622It is possible to output an assembler instruction and then go on to output
623or compute more of them, using the subroutine @code{output_asm_insn}. This
624receives two arguments: a template-string and a vector of operands. The
625vector may be @code{operands}, or it may be another array of @code{rtx}
626that you declare locally and initialize yourself.
627
628@findex which_alternative
629When an insn pattern has multiple alternatives in its constraints, often
630the appearance of the assembler code is determined mostly by which alternative
631was matched. When this is so, the C code can test the variable
632@code{which_alternative}, which is the ordinal number of the alternative
633that was actually satisfied (0 for the first, 1 for the second alternative,
634etc.).
635
636For example, suppose there are two opcodes for storing zero, @samp{clrreg}
637for registers and @samp{clrmem} for memory locations. Here is how
638a pattern could use @code{which_alternative} to choose between them:
639
640@smallexample
641(define_insn ""
642 [(set (match_operand:SI 0 "general_operand" "=r,m")
643 (const_int 0))]
644 ""
0f40f9f7 645 @{
03dda8e3 646 return (which_alternative == 0
0f40f9f7
ZW
647 ? "clrreg %0" : "clrmem %0");
648 @})
03dda8e3
RK
649@end smallexample
650
651The example above, where the assembler code to generate was
652@emph{solely} determined by the alternative, could also have been specified
653as follows, having the output control string start with a @samp{@@}:
654
655@smallexample
656@group
657(define_insn ""
658 [(set (match_operand:SI 0 "general_operand" "=r,m")
659 (const_int 0))]
660 ""
661 "@@
662 clrreg %0
663 clrmem %0")
664@end group
665@end smallexample
e543e219
ZW
666
667@node Predicates
668@section Predicates
669@cindex predicates
670@cindex operand predicates
671@cindex operator predicates
672
673A predicate determines whether a @code{match_operand} or
674@code{match_operator} expression matches, and therefore whether the
675surrounding instruction pattern will be used for that combination of
676operands. GCC has a number of machine-independent predicates, and you
677can define machine-specific predicates as needed. By convention,
678predicates used with @code{match_operand} have names that end in
679@samp{_operand}, and those used with @code{match_operator} have names
680that end in @samp{_operator}.
681
682All predicates are Boolean functions (in the mathematical sense) of
683two arguments: the RTL expression that is being considered at that
684position in the instruction pattern, and the machine mode that the
685@code{match_operand} or @code{match_operator} specifies. In this
686section, the first argument is called @var{op} and the second argument
687@var{mode}. Predicates can be called from C as ordinary two-argument
688functions; this can be useful in output templates or other
689machine-specific code.
690
691Operand predicates can allow operands that are not actually acceptable
692to the hardware, as long as the constraints give reload the ability to
693fix them up (@pxref{Constraints}). However, GCC will usually generate
694better code if the predicates specify the requirements of the machine
695instructions as closely as possible. Reload cannot fix up operands
696that must be constants (``immediate operands''); you must use a
697predicate that allows only constants, or else enforce the requirement
698in the extra condition.
699
700@cindex predicates and machine modes
701@cindex normal predicates
702@cindex special predicates
703Most predicates handle their @var{mode} argument in a uniform manner.
704If @var{mode} is @code{VOIDmode} (unspecified), then @var{op} can have
705any mode. If @var{mode} is anything else, then @var{op} must have the
706same mode, unless @var{op} is a @code{CONST_INT} or integer
707@code{CONST_DOUBLE}. These RTL expressions always have
708@code{VOIDmode}, so it would be counterproductive to check that their
709mode matches. Instead, predicates that accept @code{CONST_INT} and/or
710integer @code{CONST_DOUBLE} check that the value stored in the
711constant will fit in the requested mode.
712
713Predicates with this behavior are called @dfn{normal}.
714@command{genrecog} can optimize the instruction recognizer based on
715knowledge of how normal predicates treat modes. It can also diagnose
716certain kinds of common errors in the use of normal predicates; for
717instance, it is almost always an error to use a normal predicate
718without specifying a mode.
719
720Predicates that do something different with their @var{mode} argument
721are called @dfn{special}. The generic predicates
722@code{address_operand} and @code{pmode_register_operand} are special
723predicates. @command{genrecog} does not do any optimizations or
724diagnosis when special predicates are used.
725
726@menu
727* Machine-Independent Predicates:: Predicates available to all back ends.
728* Defining Predicates:: How to write machine-specific predicate
729 functions.
730@end menu
731
732@node Machine-Independent Predicates
733@subsection Machine-Independent Predicates
734@cindex machine-independent predicates
735@cindex generic predicates
736
737These are the generic predicates available to all back ends. They are
738defined in @file{recog.c}. The first category of predicates allow
739only constant, or @dfn{immediate}, operands.
740
741@defun immediate_operand
742This predicate allows any sort of constant that fits in @var{mode}.
743It is an appropriate choice for instructions that take operands that
744must be constant.
745@end defun
746
747@defun const_int_operand
748This predicate allows any @code{CONST_INT} expression that fits in
749@var{mode}. It is an appropriate choice for an immediate operand that
750does not allow a symbol or label.
751@end defun
752
753@defun const_double_operand
754This predicate accepts any @code{CONST_DOUBLE} expression that has
755exactly @var{mode}. If @var{mode} is @code{VOIDmode}, it will also
756accept @code{CONST_INT}. It is intended for immediate floating point
757constants.
758@end defun
759
760@noindent
761The second category of predicates allow only some kind of machine
762register.
763
764@defun register_operand
765This predicate allows any @code{REG} or @code{SUBREG} expression that
766is valid for @var{mode}. It is often suitable for arithmetic
767instruction operands on a RISC machine.
768@end defun
769
770@defun pmode_register_operand
771This is a slight variant on @code{register_operand} which works around
772a limitation in the machine-description reader.
773
cd1a8088 774@smallexample
e543e219 775(match_operand @var{n} "pmode_register_operand" @var{constraint})
cd1a8088 776@end smallexample
e543e219
ZW
777
778@noindent
779means exactly what
780
cd1a8088 781@smallexample
e543e219 782(match_operand:P @var{n} "register_operand" @var{constraint})
cd1a8088 783@end smallexample
e543e219
ZW
784
785@noindent
786would mean, if the machine-description reader accepted @samp{:P}
787mode suffixes. Unfortunately, it cannot, because @code{Pmode} is an
788alias for some other mode, and might vary with machine-specific
8a36672b 789options. @xref{Misc}.
e543e219
ZW
790@end defun
791
792@defun scratch_operand
793This predicate allows hard registers and @code{SCRATCH} expressions,
794but not pseudo-registers. It is used internally by @code{match_scratch};
795it should not be used directly.
796@end defun
797
798@noindent
799The third category of predicates allow only some kind of memory reference.
800
801@defun memory_operand
802This predicate allows any valid reference to a quantity of mode
803@var{mode} in memory, as determined by the weak form of
804@code{GO_IF_LEGITIMATE_ADDRESS} (@pxref{Addressing Modes}).
805@end defun
806
807@defun address_operand
808This predicate is a little unusual; it allows any operand that is a
809valid expression for the @emph{address} of a quantity of mode
810@var{mode}, again determined by the weak form of
811@code{GO_IF_LEGITIMATE_ADDRESS}. To first order, if
812@samp{@w{(mem:@var{mode} (@var{exp}))}} is acceptable to
813@code{memory_operand}, then @var{exp} is acceptable to
814@code{address_operand}. Note that @var{exp} does not necessarily have
815the mode @var{mode}.
816@end defun
817
818@defun indirect_operand
819This is a stricter form of @code{memory_operand} which allows only
820memory references with a @code{general_operand} as the address
821expression. New uses of this predicate are discouraged, because
822@code{general_operand} is very permissive, so it's hard to tell what
823an @code{indirect_operand} does or does not allow. If a target has
824different requirements for memory operands for different instructions,
825it is better to define target-specific predicates which enforce the
826hardware's requirements explicitly.
827@end defun
828
829@defun push_operand
830This predicate allows a memory reference suitable for pushing a value
831onto the stack. This will be a @code{MEM} which refers to
832@code{stack_pointer_rtx}, with a side-effect in its address expression
833(@pxref{Incdec}); which one is determined by the
834@code{STACK_PUSH_CODE} macro (@pxref{Frame Layout}).
835@end defun
836
837@defun pop_operand
838This predicate allows a memory reference suitable for popping a value
839off the stack. Again, this will be a @code{MEM} referring to
840@code{stack_pointer_rtx}, with a side-effect in its address
841expression. However, this time @code{STACK_POP_CODE} is expected.
842@end defun
843
844@noindent
845The fourth category of predicates allow some combination of the above
846operands.
847
848@defun nonmemory_operand
849This predicate allows any immediate or register operand valid for @var{mode}.
850@end defun
851
852@defun nonimmediate_operand
853This predicate allows any register or memory operand valid for @var{mode}.
854@end defun
855
856@defun general_operand
857This predicate allows any immediate, register, or memory operand
858valid for @var{mode}.
859@end defun
860
861@noindent
862Finally, there is one generic operator predicate.
863
864@defun comparison_operator
865This predicate matches any expression which performs an arithmetic
866comparison in @var{mode}; that is, @code{COMPARISON_P} is true for the
867expression code.
868@end defun
869
870@node Defining Predicates
871@subsection Defining Machine-Specific Predicates
872@cindex defining predicates
873@findex define_predicate
874@findex define_special_predicate
875
876Many machines have requirements for their operands that cannot be
877expressed precisely using the generic predicates. You can define
878additional predicates using @code{define_predicate} and
879@code{define_special_predicate} expressions. These expressions have
880three operands:
881
882@itemize @bullet
883@item
884The name of the predicate, as it will be referred to in
885@code{match_operand} or @code{match_operator} expressions.
886
887@item
888An RTL expression which evaluates to true if the predicate allows the
889operand @var{op}, false if it does not. This expression can only use
890the following RTL codes:
891
892@table @code
893@item MATCH_OPERAND
894When written inside a predicate expression, a @code{MATCH_OPERAND}
895expression evaluates to true if the predicate it names would allow
896@var{op}. The operand number and constraint are ignored. Due to
897limitations in @command{genrecog}, you can only refer to generic
898predicates and predicates that have already been defined.
899
900@item MATCH_CODE
901This expression has one operand, a string constant containing a
902comma-separated list of RTX code names (in lower case). It evaluates
903to true if @var{op} has any of the listed codes.
904
905@item MATCH_TEST
906This expression has one operand, a string constant containing a C
907expression. The predicate's arguments, @var{op} and @var{mode}, are
908available with those names in the C expression. The @code{MATCH_TEST}
909evaluates to true if the C expression evaluates to a nonzero value.
910@code{MATCH_TEST} expressions must not have side effects.
911
912@item AND
913@itemx IOR
914@itemx NOT
915@itemx IF_THEN_ELSE
916The basic @samp{MATCH_} expressions can be combined using these
917logical operators, which have the semantics of the C operators
918@samp{&&}, @samp{||}, @samp{!}, and @samp{@w{? :}} respectively.
919@end table
920
921@item
f0eb93a8 922An optional block of C code, which should execute
e543e219
ZW
923@samp{@w{return true}} if the predicate is found to match and
924@samp{@w{return false}} if it does not. It must not have any side
925effects. The predicate arguments, @var{op} and @var{mode}, are
926available with those names.
927
928If a code block is present in a predicate definition, then the RTL
929expression must evaluate to true @emph{and} the code block must
930execute @samp{@w{return true}} for the predicate to allow the operand.
931The RTL expression is evaluated first; do not re-check anything in the
932code block that was checked in the RTL expression.
933@end itemize
934
935The program @command{genrecog} scans @code{define_predicate} and
936@code{define_special_predicate} expressions to determine which RTX
937codes are possibly allowed. You should always make this explicit in
938the RTL predicate expression, using @code{MATCH_OPERAND} and
939@code{MATCH_CODE}.
940
941Here is an example of a simple predicate definition, from the IA64
942machine description:
943
944@smallexample
945@group
946;; @r{True if @var{op} is a @code{SYMBOL_REF} which refers to the sdata section.}
947(define_predicate "small_addr_symbolic_operand"
948 (and (match_code "symbol_ref")
949 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
950@end group
951@end smallexample
952
953@noindent
954And here is another, showing the use of the C block.
955
956@smallexample
957@group
958;; @r{True if @var{op} is a register operand that is (or could be) a GR reg.}
959(define_predicate "gr_register_operand"
960 (match_operand 0 "register_operand")
961@{
962 unsigned int regno;
963 if (GET_CODE (op) == SUBREG)
964 op = SUBREG_REG (op);
965
966 regno = REGNO (op);
967 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
968@})
969@end group
970@end smallexample
971
972Predicates written with @code{define_predicate} automatically include
973a test that @var{mode} is @code{VOIDmode}, or @var{op} has the same
974mode as @var{mode}, or @var{op} is a @code{CONST_INT} or
975@code{CONST_DOUBLE}. They do @emph{not} check specifically for
976integer @code{CONST_DOUBLE}, nor do they test that the value of either
977kind of constant fits in the requested mode. This is because
978target-specific predicates that take constants usually have to do more
979stringent value checks anyway. If you need the exact same treatment
980of @code{CONST_INT} or @code{CONST_DOUBLE} that the generic predicates
981provide, use a @code{MATCH_OPERAND} subexpression to call
982@code{const_int_operand}, @code{const_double_operand}, or
983@code{immediate_operand}.
984
985Predicates written with @code{define_special_predicate} do not get any
986automatic mode checks, and are treated as having special mode handling
987by @command{genrecog}.
988
989The program @command{genpreds} is responsible for generating code to
990test predicates. It also writes a header file containing function
991declarations for all machine-specific predicates. It is not necessary
992to declare these predicates in @file{@var{cpu}-protos.h}.
03dda8e3
RK
993@end ifset
994
995@c Most of this node appears by itself (in a different place) even
b11cc610
JM
996@c when the INTERNALS flag is clear. Passages that require the internals
997@c manual's context are conditionalized to appear only in the internals manual.
03dda8e3
RK
998@ifset INTERNALS
999@node Constraints
1000@section Operand Constraints
1001@cindex operand constraints
1002@cindex constraints
1003
e543e219
ZW
1004Each @code{match_operand} in an instruction pattern can specify
1005constraints for the operands allowed. The constraints allow you to
1006fine-tune matching within the set of operands allowed by the
1007predicate.
1008
03dda8e3
RK
1009@end ifset
1010@ifclear INTERNALS
1011@node Constraints
1012@section Constraints for @code{asm} Operands
1013@cindex operand constraints, @code{asm}
1014@cindex constraints, @code{asm}
1015@cindex @code{asm} constraints
1016
1017Here are specific details on what constraint letters you can use with
1018@code{asm} operands.
1019@end ifclear
1020Constraints can say whether
1021an operand may be in a register, and which kinds of register; whether the
1022operand can be a memory reference, and which kinds of address; whether the
1023operand may be an immediate constant, and which possible values it may
1024have. Constraints can also require two operands to match.
1025
1026@ifset INTERNALS
1027@menu
1028* Simple Constraints:: Basic use of constraints.
1029* Multi-Alternative:: When an insn has two alternative constraint-patterns.
1030* Class Preferences:: Constraints guide which hard register to put things in.
1031* Modifiers:: More precise control over effects of constraints.
1032* Machine Constraints:: Existing constraints for some particular machines.
03dda8e3
RK
1033@end menu
1034@end ifset
1035
1036@ifclear INTERNALS
1037@menu
1038* Simple Constraints:: Basic use of constraints.
1039* Multi-Alternative:: When an insn has two alternative constraint-patterns.
1040* Modifiers:: More precise control over effects of constraints.
1041* Machine Constraints:: Special constraints for some particular machines.
1042@end menu
1043@end ifclear
1044
1045@node Simple Constraints
1046@subsection Simple Constraints
1047@cindex simple constraints
1048
1049The simplest kind of constraint is a string full of letters, each of
1050which describes one kind of operand that is permitted. Here are
1051the letters that are allowed:
1052
1053@table @asis
88a56c2e
HPN
1054@item whitespace
1055Whitespace characters are ignored and can be inserted at any position
1056except the first. This enables each alternative for different operands to
1057be visually aligned in the machine description even if they have different
1058number of constraints and modifiers.
1059
03dda8e3
RK
1060@cindex @samp{m} in constraint
1061@cindex memory references in constraints
1062@item @samp{m}
1063A memory operand is allowed, with any kind of address that the machine
1064supports in general.
1065
1066@cindex offsettable address
1067@cindex @samp{o} in constraint
1068@item @samp{o}
1069A memory operand is allowed, but only if the address is
1070@dfn{offsettable}. This means that adding a small integer (actually,
1071the width in bytes of the operand, as determined by its machine mode)
1072may be added to the address and the result is also a valid memory
1073address.
1074
1075@cindex autoincrement/decrement addressing
1076For example, an address which is constant is offsettable; so is an
1077address that is the sum of a register and a constant (as long as a
1078slightly larger constant is also within the range of address-offsets
1079supported by the machine); but an autoincrement or autodecrement
1080address is not offsettable. More complicated indirect/indexed
1081addresses may or may not be offsettable depending on the other
1082addressing modes that the machine supports.
1083
1084Note that in an output operand which can be matched by another
1085operand, the constraint letter @samp{o} is valid only when accompanied
1086by both @samp{<} (if the target machine has predecrement addressing)
1087and @samp{>} (if the target machine has preincrement addressing).
1088
1089@cindex @samp{V} in constraint
1090@item @samp{V}
1091A memory operand that is not offsettable. In other words, anything that
1092would fit the @samp{m} constraint but not the @samp{o} constraint.
1093
1094@cindex @samp{<} in constraint
1095@item @samp{<}
1096A memory operand with autodecrement addressing (either predecrement or
1097postdecrement) is allowed.
1098
1099@cindex @samp{>} in constraint
1100@item @samp{>}
1101A memory operand with autoincrement addressing (either preincrement or
1102postincrement) is allowed.
1103
1104@cindex @samp{r} in constraint
1105@cindex registers in constraints
1106@item @samp{r}
1107A register operand is allowed provided that it is in a general
1108register.
1109
03dda8e3
RK
1110@cindex constants in constraints
1111@cindex @samp{i} in constraint
1112@item @samp{i}
1113An immediate integer operand (one with constant value) is allowed.
1114This includes symbolic constants whose values will be known only at
8ac658b6 1115assembly time or later.
03dda8e3
RK
1116
1117@cindex @samp{n} in constraint
1118@item @samp{n}
1119An immediate integer operand with a known numeric value is allowed.
1120Many systems cannot support assembly-time constants for operands less
1121than a word wide. Constraints for these operands should use @samp{n}
1122rather than @samp{i}.
1123
1124@cindex @samp{I} in constraint
1125@item @samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}
1126Other letters in the range @samp{I} through @samp{P} may be defined in
1127a machine-dependent fashion to permit immediate integer operands with
1128explicit integer values in specified ranges. For example, on the
112968000, @samp{I} is defined to stand for the range of values 1 to 8.
1130This is the range permitted as a shift count in the shift
1131instructions.
1132
1133@cindex @samp{E} in constraint
1134@item @samp{E}
1135An immediate floating operand (expression code @code{const_double}) is
1136allowed, but only if the target floating point format is the same as
1137that of the host machine (on which the compiler is running).
1138
1139@cindex @samp{F} in constraint
1140@item @samp{F}
bf7cd754
R
1141An immediate floating operand (expression code @code{const_double} or
1142@code{const_vector}) is allowed.
03dda8e3
RK
1143
1144@cindex @samp{G} in constraint
1145@cindex @samp{H} in constraint
1146@item @samp{G}, @samp{H}
1147@samp{G} and @samp{H} may be defined in a machine-dependent fashion to
1148permit immediate floating operands in particular ranges of values.
1149
1150@cindex @samp{s} in constraint
1151@item @samp{s}
1152An immediate integer operand whose value is not an explicit integer is
1153allowed.
1154
1155This might appear strange; if an insn allows a constant operand with a
1156value not known at compile time, it certainly must allow any known
1157value. So why use @samp{s} instead of @samp{i}? Sometimes it allows
1158better code to be generated.
1159
1160For example, on the 68000 in a fullword instruction it is possible to
630d3d5a 1161use an immediate operand; but if the immediate value is between @minus{}128
03dda8e3
RK
1162and 127, better code results from loading the value into a register and
1163using the register. This is because the load into the register can be
1164done with a @samp{moveq} instruction. We arrange for this to happen
1165by defining the letter @samp{K} to mean ``any integer outside the
630d3d5a 1166range @minus{}128 to 127'', and then specifying @samp{Ks} in the operand
03dda8e3
RK
1167constraints.
1168
1169@cindex @samp{g} in constraint
1170@item @samp{g}
1171Any register, memory or immediate integer operand is allowed, except for
1172registers that are not general registers.
1173
1174@cindex @samp{X} in constraint
1175@item @samp{X}
1176@ifset INTERNALS
1177Any operand whatsoever is allowed, even if it does not satisfy
1178@code{general_operand}. This is normally used in the constraint of
1179a @code{match_scratch} when certain alternatives will not actually
1180require a scratch register.
1181@end ifset
1182@ifclear INTERNALS
1183Any operand whatsoever is allowed.
1184@end ifclear
1185
1186@cindex @samp{0} in constraint
1187@cindex digits in constraint
1188@item @samp{0}, @samp{1}, @samp{2}, @dots{} @samp{9}
1189An operand that matches the specified operand number is allowed. If a
1190digit is used together with letters within the same alternative, the
1191digit should come last.
1192
84b72302 1193This number is allowed to be more than a single digit. If multiple
c0478a66 1194digits are encountered consecutively, they are interpreted as a single
84b72302
RH
1195decimal integer. There is scant chance for ambiguity, since to-date
1196it has never been desirable that @samp{10} be interpreted as matching
1197either operand 1 @emph{or} operand 0. Should this be desired, one
1198can use multiple alternatives instead.
1199
03dda8e3
RK
1200@cindex matching constraint
1201@cindex constraint, matching
1202This is called a @dfn{matching constraint} and what it really means is
1203that the assembler has only a single operand that fills two roles
1204@ifset INTERNALS
1205considered separate in the RTL insn. For example, an add insn has two
1206input operands and one output operand in the RTL, but on most CISC
1207@end ifset
1208@ifclear INTERNALS
1209which @code{asm} distinguishes. For example, an add instruction uses
1210two input operands and an output operand, but on most CISC
1211@end ifclear
1212machines an add instruction really has only two operands, one of them an
1213input-output operand:
1214
1215@smallexample
1216addl #35,r12
1217@end smallexample
1218
1219Matching constraints are used in these circumstances.
1220More precisely, the two operands that match must include one input-only
1221operand and one output-only operand. Moreover, the digit must be a
1222smaller number than the number of the operand that uses it in the
1223constraint.
1224
1225@ifset INTERNALS
1226For operands to match in a particular case usually means that they
1227are identical-looking RTL expressions. But in a few special cases
1228specific kinds of dissimilarity are allowed. For example, @code{*x}
1229as an input operand will match @code{*x++} as an output operand.
1230For proper results in such cases, the output template should always
1231use the output-operand's number when printing the operand.
1232@end ifset
1233
1234@cindex load address instruction
1235@cindex push address instruction
1236@cindex address constraints
1237@cindex @samp{p} in constraint
1238@item @samp{p}
1239An operand that is a valid memory address is allowed. This is
1240for ``load address'' and ``push address'' instructions.
1241
1242@findex address_operand
1243@samp{p} in the constraint must be accompanied by @code{address_operand}
1244as the predicate in the @code{match_operand}. This predicate interprets
1245the mode specified in the @code{match_operand} as the mode of the memory
1246reference for which the address would be valid.
1247
c2cba7a9 1248@cindex other register constraints
03dda8e3 1249@cindex extensible constraints
630d3d5a 1250@item @var{other-letters}
c2cba7a9
RH
1251Other letters can be defined in machine-dependent fashion to stand for
1252particular classes of registers or other arbitrary operand types.
1253@samp{d}, @samp{a} and @samp{f} are defined on the 68000/68020 to stand
1254for data, address and floating point registers.
03dda8e3 1255
c2cba7a9
RH
1256@ifset INTERNALS
1257The machine description macro @code{REG_CLASS_FROM_LETTER} has first
1258cut at the otherwise unused letters. If it evaluates to @code{NO_REGS},
1259then @code{EXTRA_CONSTRAINT} is evaluated.
03dda8e3 1260
c0478a66 1261A typical use for @code{EXTRA_CONSTRAINT} would be to distinguish certain
c2cba7a9 1262types of memory references that affect other insn operands.
03dda8e3
RK
1263@end ifset
1264@end table
1265
1266@ifset INTERNALS
1267In order to have valid assembler code, each operand must satisfy
1268its constraint. But a failure to do so does not prevent the pattern
1269from applying to an insn. Instead, it directs the compiler to modify
1270the code so that the constraint will be satisfied. Usually this is
1271done by copying an operand into a register.
1272
1273Contrast, therefore, the two instruction patterns that follow:
1274
1275@smallexample
1276(define_insn ""
1277 [(set (match_operand:SI 0 "general_operand" "=r")
1278 (plus:SI (match_dup 0)
1279 (match_operand:SI 1 "general_operand" "r")))]
1280 ""
1281 "@dots{}")
1282@end smallexample
1283
1284@noindent
1285which has two operands, one of which must appear in two places, and
1286
1287@smallexample
1288(define_insn ""
1289 [(set (match_operand:SI 0 "general_operand" "=r")
1290 (plus:SI (match_operand:SI 1 "general_operand" "0")
1291 (match_operand:SI 2 "general_operand" "r")))]
1292 ""
1293 "@dots{}")
1294@end smallexample
1295
1296@noindent
1297which has three operands, two of which are required by a constraint to be
1298identical. If we are considering an insn of the form
1299
1300@smallexample
1301(insn @var{n} @var{prev} @var{next}
1302 (set (reg:SI 3)
1303 (plus:SI (reg:SI 6) (reg:SI 109)))
1304 @dots{})
1305@end smallexample
1306
1307@noindent
1308the first pattern would not apply at all, because this insn does not
1309contain two identical subexpressions in the right place. The pattern would
d78aa55c 1310say, ``That does not look like an add instruction; try other patterns''.
03dda8e3 1311The second pattern would say, ``Yes, that's an add instruction, but there
d78aa55c 1312is something wrong with it''. It would direct the reload pass of the
03dda8e3
RK
1313compiler to generate additional insns to make the constraint true. The
1314results might look like this:
1315
1316@smallexample
1317(insn @var{n2} @var{prev} @var{n}
1318 (set (reg:SI 3) (reg:SI 6))
1319 @dots{})
1320
1321(insn @var{n} @var{n2} @var{next}
1322 (set (reg:SI 3)
1323 (plus:SI (reg:SI 3) (reg:SI 109)))
1324 @dots{})
1325@end smallexample
1326
1327It is up to you to make sure that each operand, in each pattern, has
1328constraints that can handle any RTL expression that could be present for
1329that operand. (When multiple alternatives are in use, each pattern must,
1330for each possible combination of operand expressions, have at least one
1331alternative which can handle that combination of operands.) The
1332constraints don't need to @emph{allow} any possible operand---when this is
1333the case, they do not constrain---but they must at least point the way to
1334reloading any possible operand so that it will fit.
1335
1336@itemize @bullet
1337@item
1338If the constraint accepts whatever operands the predicate permits,
1339there is no problem: reloading is never necessary for this operand.
1340
1341For example, an operand whose constraints permit everything except
1342registers is safe provided its predicate rejects registers.
1343
1344An operand whose predicate accepts only constant values is safe
1345provided its constraints include the letter @samp{i}. If any possible
1346constant value is accepted, then nothing less than @samp{i} will do;
1347if the predicate is more selective, then the constraints may also be
1348more selective.
1349
1350@item
1351Any operand expression can be reloaded by copying it into a register.
1352So if an operand's constraints allow some kind of register, it is
1353certain to be safe. It need not permit all classes of registers; the
1354compiler knows how to copy a register into another register of the
1355proper class in order to make an instruction valid.
1356
1357@cindex nonoffsettable memory reference
1358@cindex memory reference, nonoffsettable
1359@item
1360A nonoffsettable memory reference can be reloaded by copying the
1361address into a register. So if the constraint uses the letter
1362@samp{o}, all memory references are taken care of.
1363
1364@item
1365A constant operand can be reloaded by allocating space in memory to
1366hold it as preinitialized data. Then the memory reference can be used
1367in place of the constant. So if the constraint uses the letters
1368@samp{o} or @samp{m}, constant operands are not a problem.
1369
1370@item
1371If the constraint permits a constant and a pseudo register used in an insn
1372was not allocated to a hard register and is equivalent to a constant,
1373the register will be replaced with the constant. If the predicate does
1374not permit a constant and the insn is re-recognized for some reason, the
1375compiler will crash. Thus the predicate must always recognize any
1376objects allowed by the constraint.
1377@end itemize
1378
1379If the operand's predicate can recognize registers, but the constraint does
1380not permit them, it can make the compiler crash. When this operand happens
1381to be a register, the reload pass will be stymied, because it does not know
1382how to copy a register temporarily into memory.
1383
1384If the predicate accepts a unary operator, the constraint applies to the
1385operand. For example, the MIPS processor at ISA level 3 supports an
1386instruction which adds two registers in @code{SImode} to produce a
1387@code{DImode} result, but only if the registers are correctly sign
1388extended. This predicate for the input operands accepts a
1389@code{sign_extend} of an @code{SImode} register. Write the constraint
1390to indicate the type of register that is required for the operand of the
1391@code{sign_extend}.
1392@end ifset
1393
1394@node Multi-Alternative
1395@subsection Multiple Alternative Constraints
1396@cindex multiple alternative constraints
1397
1398Sometimes a single instruction has multiple alternative sets of possible
1399operands. For example, on the 68000, a logical-or instruction can combine
1400register or an immediate value into memory, or it can combine any kind of
1401operand into a register; but it cannot combine one memory location into
1402another.
1403
1404These constraints are represented as multiple alternatives. An alternative
1405can be described by a series of letters for each operand. The overall
1406constraint for an operand is made from the letters for this operand
1407from the first alternative, a comma, the letters for this operand from
1408the second alternative, a comma, and so on until the last alternative.
1409@ifset INTERNALS
1410Here is how it is done for fullword logical-or on the 68000:
1411
1412@smallexample
1413(define_insn "iorsi3"
1414 [(set (match_operand:SI 0 "general_operand" "=m,d")
1415 (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
1416 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
1417 @dots{})
1418@end smallexample
1419
1420The first alternative has @samp{m} (memory) for operand 0, @samp{0} for
1421operand 1 (meaning it must match operand 0), and @samp{dKs} for operand
14222. The second alternative has @samp{d} (data register) for operand 0,
1423@samp{0} for operand 1, and @samp{dmKs} for operand 2. The @samp{=} and
1424@samp{%} in the constraints apply to all the alternatives; their
1425meaning is explained in the next section (@pxref{Class Preferences}).
1426@end ifset
1427
1428@c FIXME Is this ? and ! stuff of use in asm()? If not, hide unless INTERNAL
1429If all the operands fit any one alternative, the instruction is valid.
1430Otherwise, for each alternative, the compiler counts how many instructions
1431must be added to copy the operands so that that alternative applies.
1432The alternative requiring the least copying is chosen. If two alternatives
1433need the same amount of copying, the one that comes first is chosen.
1434These choices can be altered with the @samp{?} and @samp{!} characters:
1435
1436@table @code
1437@cindex @samp{?} in constraint
1438@cindex question mark
1439@item ?
1440Disparage slightly the alternative that the @samp{?} appears in,
1441as a choice when no alternative applies exactly. The compiler regards
1442this alternative as one unit more costly for each @samp{?} that appears
1443in it.
1444
1445@cindex @samp{!} in constraint
1446@cindex exclamation point
1447@item !
1448Disparage severely the alternative that the @samp{!} appears in.
1449This alternative can still be used if it fits without reloading,
1450but if reloading is needed, some other alternative will be used.
1451@end table
1452
1453@ifset INTERNALS
1454When an insn pattern has multiple alternatives in its constraints, often
1455the appearance of the assembler code is determined mostly by which
1456alternative was matched. When this is so, the C code for writing the
1457assembler code can use the variable @code{which_alternative}, which is
1458the ordinal number of the alternative that was actually satisfied (0 for
1459the first, 1 for the second alternative, etc.). @xref{Output Statement}.
1460@end ifset
1461
1462@ifset INTERNALS
1463@node Class Preferences
1464@subsection Register Class Preferences
1465@cindex class preference constraints
1466@cindex register class preference constraints
1467
1468@cindex voting between constraint alternatives
1469The operand constraints have another function: they enable the compiler
1470to decide which kind of hardware register a pseudo register is best
1471allocated to. The compiler examines the constraints that apply to the
1472insns that use the pseudo register, looking for the machine-dependent
1473letters such as @samp{d} and @samp{a} that specify classes of registers.
1474The pseudo register is put in whichever class gets the most ``votes''.
1475The constraint letters @samp{g} and @samp{r} also vote: they vote in
1476favor of a general register. The machine description says which registers
1477are considered general.
1478
1479Of course, on some machines all registers are equivalent, and no register
1480classes are defined. Then none of this complexity is relevant.
1481@end ifset
1482
1483@node Modifiers
1484@subsection Constraint Modifier Characters
1485@cindex modifiers in constraints
1486@cindex constraint modifier characters
1487
1488@c prevent bad page break with this line
1489Here are constraint modifier characters.
1490
1491@table @samp
1492@cindex @samp{=} in constraint
1493@item =
1494Means that this operand is write-only for this instruction: the previous
1495value is discarded and replaced by output data.
1496
1497@cindex @samp{+} in constraint
1498@item +
1499Means that this operand is both read and written by the instruction.
1500
1501When the compiler fixes up the operands to satisfy the constraints,
1502it needs to know which operands are inputs to the instruction and
1503which are outputs from it. @samp{=} identifies an output; @samp{+}
1504identifies an operand that is both input and output; all other operands
1505are assumed to be input only.
1506
c5c76735
JL
1507If you specify @samp{=} or @samp{+} in a constraint, you put it in the
1508first character of the constraint string.
1509
03dda8e3
RK
1510@cindex @samp{&} in constraint
1511@cindex earlyclobber operand
1512@item &
1513Means (in a particular alternative) that this operand is an
1514@dfn{earlyclobber} operand, which is modified before the instruction is
1515finished using the input operands. Therefore, this operand may not lie
1516in a register that is used as an input operand or as part of any memory
1517address.
1518
1519@samp{&} applies only to the alternative in which it is written. In
1520constraints with multiple alternatives, sometimes one alternative
1521requires @samp{&} while others do not. See, for example, the
1522@samp{movdf} insn of the 68000.
1523
ebb48a4d 1524An input operand can be tied to an earlyclobber operand if its only
03dda8e3
RK
1525use as an input occurs before the early result is written. Adding
1526alternatives of this form often allows GCC to produce better code
ebb48a4d 1527when only some of the inputs can be affected by the earlyclobber.
161d7b59 1528See, for example, the @samp{mulsi3} insn of the ARM@.
03dda8e3
RK
1529
1530@samp{&} does not obviate the need to write @samp{=}.
1531
1532@cindex @samp{%} in constraint
1533@item %
1534Declares the instruction to be commutative for this operand and the
1535following operand. This means that the compiler may interchange the
1536two operands if that is the cheapest way to make all operands fit the
1537constraints.
1538@ifset INTERNALS
1539This is often used in patterns for addition instructions
1540that really have only two operands: the result must go in one of the
1541arguments. Here for example, is how the 68000 halfword-add
1542instruction is defined:
1543
1544@smallexample
1545(define_insn "addhi3"
1546 [(set (match_operand:HI 0 "general_operand" "=m,r")
1547 (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
1548 (match_operand:HI 2 "general_operand" "di,g")))]
1549 @dots{})
1550@end smallexample
1551@end ifset
daf2f129 1552GCC can only handle one commutative pair in an asm; if you use more,
595163db
EB
1553the compiler may fail. Note that you need not use the modifier if
1554the two alternatives are strictly identical; this would only waste
1555time in the reload pass.
03dda8e3
RK
1556
1557@cindex @samp{#} in constraint
1558@item #
1559Says that all following characters, up to the next comma, are to be
1560ignored as a constraint. They are significant only for choosing
1561register preferences.
1562
03dda8e3
RK
1563@cindex @samp{*} in constraint
1564@item *
1565Says that the following character should be ignored when choosing
1566register preferences. @samp{*} has no effect on the meaning of the
1567constraint as a constraint, and no effect on reloading.
1568
9f339dde 1569@ifset INTERNALS
03dda8e3
RK
1570Here is an example: the 68000 has an instruction to sign-extend a
1571halfword in a data register, and can also sign-extend a value by
1572copying it into an address register. While either kind of register is
1573acceptable, the constraints on an address-register destination are
1574less strict, so it is best if register allocation makes an address
1575register its goal. Therefore, @samp{*} is used so that the @samp{d}
1576constraint letter (for data register) is ignored when computing
1577register preferences.
1578
1579@smallexample
1580(define_insn "extendhisi2"
1581 [(set (match_operand:SI 0 "general_operand" "=*d,a")
1582 (sign_extend:SI
1583 (match_operand:HI 1 "general_operand" "0,g")))]
1584 @dots{})
1585@end smallexample
1586@end ifset
1587@end table
1588
1589@node Machine Constraints
1590@subsection Constraints for Particular Machines
1591@cindex machine specific constraints
1592@cindex constraints, machine specific
1593
1594Whenever possible, you should use the general-purpose constraint letters
1595in @code{asm} arguments, since they will convey meaning more readily to
1596people reading your code. Failing that, use the constraint letters
1597that usually have very similar meanings across architectures. The most
1598commonly used constraints are @samp{m} and @samp{r} (for memory and
1599general-purpose registers respectively; @pxref{Simple Constraints}), and
1600@samp{I}, usually the letter indicating the most common
1601immediate-constant format.
1602
9c34dbbf
ZW
1603For each machine architecture, the
1604@file{config/@var{machine}/@var{machine}.h} file defines additional
1605constraints. These constraints are used by the compiler itself for
1606instruction generation, as well as for @code{asm} statements; therefore,
1607some of the constraints are not particularly interesting for @code{asm}.
1608The constraints are defined through these macros:
03dda8e3
RK
1609
1610@table @code
1611@item REG_CLASS_FROM_LETTER
4bd0bee9 1612Register class constraints (usually lowercase).
03dda8e3
RK
1613
1614@item CONST_OK_FOR_LETTER_P
1615Immediate constant constraints, for non-floating point constants of
4bd0bee9 1616word size or smaller precision (usually uppercase).
03dda8e3
RK
1617
1618@item CONST_DOUBLE_OK_FOR_LETTER_P
1619Immediate constant constraints, for all floating point constants and for
4bd0bee9 1620constants of greater than word size precision (usually uppercase).
03dda8e3
RK
1621
1622@item EXTRA_CONSTRAINT
1623Special cases of registers or memory. This macro is not required, and
1624is only defined for some machines.
1625@end table
1626
1627Inspecting these macro definitions in the compiler source for your
1628machine is the best way to be certain you have the right constraints.
1629However, here is a summary of the machine-dependent constraints
1630available on some particular machines.
1631
1632@table @emph
1633@item ARM family---@file{arm.h}
1634@table @code
1635@item f
1636Floating-point register
1637
9b66ebb1
PB
1638@item w
1639VFP floating-point register
1640
03dda8e3
RK
1641@item F
1642One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0
1643or 10.0
1644
1645@item G
1646Floating-point constant that would satisfy the constraint @samp{F} if it
1647were negated
1648
1649@item I
1650Integer that is valid as an immediate operand in a data processing
1651instruction. That is, an integer in the range 0 to 255 rotated by a
1652multiple of 2
1653
1654@item J
630d3d5a 1655Integer in the range @minus{}4095 to 4095
03dda8e3
RK
1656
1657@item K
1658Integer that satisfies constraint @samp{I} when inverted (ones complement)
1659
1660@item L
1661Integer that satisfies constraint @samp{I} when negated (twos complement)
1662
1663@item M
1664Integer in the range 0 to 32
1665
1666@item Q
1667A memory reference where the exact address is in a single register
1668(`@samp{m}' is preferable for @code{asm} statements)
1669
1670@item R
1671An item in the constant pool
1672
1673@item S
1674A symbol in the text segment of the current file
1675@end table
1676
1e1ab407 1677@item Uv
9b66ebb1
PB
1678A memory reference suitable for VFP load/store insns (reg+constant offset)
1679
fdd695fd
PB
1680@item Uy
1681A memory reference suitable for iWMMXt load/store instructions.
1682
1e1ab407 1683@item Uq
0bdcd332 1684A memory reference suitable for the ARMv4 ldrsb instruction.
1e1ab407 1685
052a4b28
DC
1686@item AVR family---@file{avr.h}
1687@table @code
1688@item l
1689Registers from r0 to r15
1690
1691@item a
1692Registers from r16 to r23
1693
1694@item d
1695Registers from r16 to r31
1696
1697@item w
3a69a7d5 1698Registers from r24 to r31. These registers can be used in @samp{adiw} command
052a4b28
DC
1699
1700@item e
d7d9c429 1701Pointer register (r26--r31)
052a4b28
DC
1702
1703@item b
d7d9c429 1704Base pointer register (r28--r31)
052a4b28 1705
3a69a7d5
MM
1706@item q
1707Stack pointer register (SPH:SPL)
1708
052a4b28
DC
1709@item t
1710Temporary register r0
1711
1712@item x
1713Register pair X (r27:r26)
1714
1715@item y
1716Register pair Y (r29:r28)
1717
1718@item z
1719Register pair Z (r31:r30)
1720
1721@item I
630d3d5a 1722Constant greater than @minus{}1, less than 64
052a4b28
DC
1723
1724@item J
630d3d5a 1725Constant greater than @minus{}64, less than 1
052a4b28
DC
1726
1727@item K
1728Constant integer 2
1729
1730@item L
1731Constant integer 0
1732
1733@item M
1734Constant that fits in 8 bits
1735
1736@item N
630d3d5a 1737Constant integer @minus{}1
052a4b28
DC
1738
1739@item O
3a69a7d5 1740Constant integer 8, 16, or 24
052a4b28
DC
1741
1742@item P
1743Constant integer 1
1744
1745@item G
1746A floating point constant 0.0
1747@end table
1748
2dcfc29d 1749@item PowerPC and IBM RS6000---@file{rs6000.h}
03dda8e3
RK
1750@table @code
1751@item b
1752Address base register
1753
1754@item f
1755Floating point register
1756
2dcfc29d
DE
1757@item v
1758Vector register
1759
03dda8e3
RK
1760@item h
1761@samp{MQ}, @samp{CTR}, or @samp{LINK} register
1762
1763@item q
1764@samp{MQ} register
1765
1766@item c
1767@samp{CTR} register
1768
1769@item l
1770@samp{LINK} register
1771
1772@item x
1773@samp{CR} register (condition register) number 0
1774
1775@item y
1776@samp{CR} register (condition register)
1777
8f685459
DE
1778@item z
1779@samp{FPMEM} stack memory for FPR-GPR transfers
1780
03dda8e3 1781@item I
1e5f973d 1782Signed 16-bit constant
03dda8e3
RK
1783
1784@item J
ebb48a4d 1785Unsigned 16-bit constant shifted left 16 bits (use @samp{L} instead for
5f59ecb7 1786@code{SImode} constants)
03dda8e3
RK
1787
1788@item K
1e5f973d 1789Unsigned 16-bit constant
03dda8e3
RK
1790
1791@item L
1e5f973d 1792Signed 16-bit constant shifted left 16 bits
03dda8e3
RK
1793
1794@item M
1795Constant larger than 31
1796
1797@item N
1798Exact power of 2
1799
1800@item O
1801Zero
1802
1803@item P
1e5f973d 1804Constant whose negation is a signed 16-bit constant
03dda8e3
RK
1805
1806@item G
1807Floating point constant that can be loaded into a register with one
1808instruction per word
1809
1810@item Q
1811Memory operand that is an offset from a register (@samp{m} is preferable
1812for @code{asm} statements)
1813
1814@item R
1815AIX TOC entry
1816
1817@item S
8f685459 1818Constant suitable as a 64-bit mask operand
03dda8e3 1819
5f59ecb7
DE
1820@item T
1821Constant suitable as a 32-bit mask operand
1822
03dda8e3
RK
1823@item U
1824System V Release 4 small data area reference
1825@end table
1826
1827@item Intel 386---@file{i386.h}
1828@table @code
1829@item q
0c56474e 1830@samp{a}, @code{b}, @code{c}, or @code{d} register for the i386.
8a36672b
JM
1831For x86-64 it is equivalent to @samp{r} class (for 8-bit instructions that
1832do not use upper halves).
0c56474e
JH
1833
1834@item Q
8a36672b
JM
1835@samp{a}, @code{b}, @code{c}, or @code{d} register (for 8-bit instructions,
1836that do use upper halves).
0c56474e
JH
1837
1838@item R
d7d9c429 1839Legacy register---equivalent to @code{r} class in i386 mode.
1e5f973d 1840(for non-8-bit registers used together with 8-bit upper halves in a single
0c56474e 1841instruction)
03dda8e3
RK
1842
1843@item A
994682b9
AJ
1844Specifies the @samp{a} or @samp{d} registers. This is primarily useful
1845for 64-bit integer values (when in 32-bit mode) intended to be returned
1846with the @samp{d} register holding the most significant bits and the
1847@samp{a} register holding the least significant bits.
03dda8e3
RK
1848
1849@item f
1850Floating point register
1851
1852@item t
1853First (top of stack) floating point register
1854
1855@item u
1856Second floating point register
1857
1858@item a
1859@samp{a} register
1860
1861@item b
1862@samp{b} register
1863
1864@item c
1865@samp{c} register
1866
f8ca7923 1867@item C
c0478a66 1868Specifies constant that can be easily constructed in SSE register without
f8ca7923
JH
1869loading it from memory.
1870
03dda8e3
RK
1871@item d
1872@samp{d} register
1873
1874@item D
1875@samp{di} register
1876
1877@item S
1878@samp{si} register
1879
994682b9
AJ
1880@item x
1881@samp{xmm} SSE register
1882
1883@item y
1884MMX register
1885
03dda8e3 1886@item I
1e5f973d 1887Constant in range 0 to 31 (for 32-bit shifts)
03dda8e3
RK
1888
1889@item J
1e5f973d 1890Constant in range 0 to 63 (for 64-bit shifts)
03dda8e3
RK
1891
1892@item K
1893@samp{0xff}
1894
1895@item L
1896@samp{0xffff}
1897
1898@item M
18990, 1, 2, or 3 (shifts for @code{lea} instruction)
1900
1901@item N
1902Constant in range 0 to 255 (for @code{out} instruction)
1903
0c56474e 1904@item Z
aee96fe9 1905Constant in range 0 to @code{0xffffffff} or symbolic reference known to fit specified range.
1e5f973d 1906(for using immediates in zero extending 32-bit to 64-bit x86-64 instructions)
0c56474e
JH
1907
1908@item e
630d3d5a 1909Constant in range @minus{}2147483648 to 2147483647 or symbolic reference known to fit specified range.
1e5f973d 1910(for using immediates in 64-bit x86-64 instructions)
0c56474e 1911
03dda8e3
RK
1912@item G
1913Standard 80387 floating point constant
1914@end table
1915
7a430e3b
SC
1916@item Intel IA-64---@file{ia64.h}
1917@table @code
1918@item a
1919General register @code{r0} to @code{r3} for @code{addl} instruction
1920
1921@item b
1922Branch register
1923
1924@item c
1925Predicate register (@samp{c} as in ``conditional'')
1926
1927@item d
1928Application register residing in M-unit
1929
1930@item e
1931Application register residing in I-unit
1932
1933@item f
1934Floating-point register
1935
1936@item m
1937Memory operand.
1938Remember that @samp{m} allows postincrement and postdecrement which
1939require printing with @samp{%Pn} on IA-64.
1940Use @samp{S} to disallow postincrement and postdecrement.
1941
1942@item G
1943Floating-point constant 0.0 or 1.0
1944
1945@item I
194614-bit signed integer constant
1947
1948@item J
194922-bit signed integer constant
1950
1951@item K
19528-bit signed integer constant for logical instructions
1953
1954@item L
19558-bit adjusted signed integer constant for compare pseudo-ops
1956
1957@item M
19586-bit unsigned integer constant for shift counts
1959
1960@item N
19619-bit signed integer constant for load and store postincrements
1962
1963@item O
1964The constant zero
1965
1966@item P
78466c0e 19670 or @minus{}1 for @code{dep} instruction
7a430e3b
SC
1968
1969@item Q
1970Non-volatile memory for floating-point loads and stores
1971
1972@item R
1973Integer constant in the range 1 to 4 for @code{shladd} instruction
1974
1975@item S
1976Memory operand except postincrement and postdecrement
1977@end table
03dda8e3 1978
70899148
BS
1979@item FRV---@file{frv.h}
1980@table @code
1981@item a
840758d3 1982Register in the class @code{ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
1983
1984@item b
840758d3 1985Register in the class @code{EVEN_ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
1986
1987@item c
840758d3
BS
1988Register in the class @code{CC_REGS} (@code{fcc0} to @code{fcc3} and
1989@code{icc0} to @code{icc3}).
70899148
BS
1990
1991@item d
840758d3 1992Register in the class @code{GPR_REGS} (@code{gr0} to @code{gr63}).
70899148
BS
1993
1994@item e
840758d3 1995Register in the class @code{EVEN_REGS} (@code{gr0} to @code{gr63}).
70899148
BS
1996Odd registers are excluded not in the class but through the use of a machine
1997mode larger than 4 bytes.
1998
1999@item f
840758d3 2000Register in the class @code{FPR_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2001
2002@item h
840758d3 2003Register in the class @code{FEVEN_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2004Odd registers are excluded not in the class but through the use of a machine
2005mode larger than 4 bytes.
2006
2007@item l
840758d3 2008Register in the class @code{LR_REG} (the @code{lr} register).
70899148
BS
2009
2010@item q
840758d3 2011Register in the class @code{QUAD_REGS} (@code{gr2} to @code{gr63}).
70899148
BS
2012Register numbers not divisible by 4 are excluded not in the class but through
2013the use of a machine mode larger than 8 bytes.
2014
2015@item t
840758d3 2016Register in the class @code{ICC_REGS} (@code{icc0} to @code{icc3}).
70899148
BS
2017
2018@item u
840758d3 2019Register in the class @code{FCC_REGS} (@code{fcc0} to @code{fcc3}).
70899148
BS
2020
2021@item v
840758d3 2022Register in the class @code{ICR_REGS} (@code{cc4} to @code{cc7}).
70899148
BS
2023
2024@item w
840758d3 2025Register in the class @code{FCR_REGS} (@code{cc0} to @code{cc3}).
70899148
BS
2026
2027@item x
840758d3 2028Register in the class @code{QUAD_FPR_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2029Register numbers not divisible by 4 are excluded not in the class but through
2030the use of a machine mode larger than 8 bytes.
2031
2032@item z
840758d3 2033Register in the class @code{SPR_REGS} (@code{lcr} and @code{lr}).
70899148
BS
2034
2035@item A
840758d3 2036Register in the class @code{QUAD_ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2037
2038@item B
840758d3 2039Register in the class @code{ACCG_REGS} (@code{accg0} to @code{accg7}).
70899148
BS
2040
2041@item C
840758d3 2042Register in the class @code{CR_REGS} (@code{cc0} to @code{cc7}).
70899148
BS
2043
2044@item G
2045Floating point constant zero
2046
2047@item I
20486-bit signed integer constant
2049
2050@item J
205110-bit signed integer constant
2052
2053@item L
205416-bit signed integer constant
2055
2056@item M
205716-bit unsigned integer constant
2058
2059@item N
840758d3
BS
206012-bit signed integer constant that is negative---i.e.@: in the
2061range of @minus{}2048 to @minus{}1
70899148
BS
2062
2063@item O
2064Constant zero
2065
2066@item P
840758d3 206712-bit signed integer constant that is greater than zero---i.e.@: in the
70899148
BS
2068range of 1 to 2047.
2069
2070@end table
2071
0d4a78eb
BS
2072@item Blackfin family---@file{bfin.h}
2073@table @code
2074@item a
2075P register
2076
2077@item d
2078D register
2079
2080@item z
2081A call clobbered P register.
2082
2083@item D
2084Even-numbered D register
2085
2086@item W
2087Odd-numbered D register
2088
2089@item e
2090Accumulator register.
2091
2092@item A
2093Even-numbered accumulator register.
2094
2095@item B
2096Odd-numbered accumulator register.
2097
2098@item b
2099I register
2100
2101@item B
2102B register
2103
2104@item f
2105M register
2106
2107@item c
2108Registers used for circular buffering, i.e. I, B, or L registers.
2109
2110@item C
2111The CC register.
2112
2113@item x
2114Any D, P, B, M, I or L register.
2115
2116@item y
2117Additional registers typically used only in prologues and epilogues: RETS,
2118RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.
2119
2120@item w
2121Any register except accumulators or CC.
2122
2123@item Ksh
2124Signed 16 bit integer (in the range -32768 to 32767)
2125
2126@item Kuh
2127Unsigned 16 bit integer (in the range 0 to 65535)
2128
2129@item Ks7
2130Signed 7 bit integer (in the range -64 to 63)
2131
2132@item Ku7
2133Unsigned 7 bit integer (in the range 0 to 127)
2134
2135@item Ku5
2136Unsigned 5 bit integer (in the range 0 to 31)
2137
2138@item Ks4
2139Signed 4 bit integer (in the range -8 to 7)
2140
2141@item Ks3
2142Signed 3 bit integer (in the range -3 to 4)
2143
2144@item Ku3
2145Unsigned 3 bit integer (in the range 0 to 7)
2146
2147@item P@var{n}
2148Constant @var{n}, where @var{n} is a single-digit constant in the range 0 to 4.
2149
2150@item M1
2151Constant 255.
2152
2153@item M2
2154Constant 65535.
2155
2156@item J
2157An integer constant with exactly a single bit set.
2158
2159@item L
2160An integer constant with all bits set except exactly one.
2161
2162@item H
2163
2164@item Q
2165Any SYMBOL_REF.
2166@end table
2167
e3223ea2
DC
2168@item IP2K---@file{ip2k.h}
2169@table @code
2170@item a
2171@samp{DP} or @samp{IP} registers (general address)
2172
2173@item f
2174@samp{IP} register
2175
2176@item j
2177@samp{IPL} register
2178
2179@item k
2180@samp{IPH} register
2181
2182@item b
2183@samp{DP} register
2184
2185@item y
2186@samp{DPH} register
2187
2188@item z
2189@samp{DPL} register
2190
2191@item q
2192@samp{SP} register
2193
2194@item c
2195@samp{DP} or @samp{SP} registers (offsettable address)
2196
2197@item d
2198Non-pointer registers (not @samp{SP}, @samp{DP}, @samp{IP})
2199
2200@item u
2201Non-SP registers (everything except @samp{SP})
2202
2203@item R
78466c0e 2204Indirect through @samp{IP}---Avoid this except for @code{QImode}, since we
e3223ea2
DC
2205can't access extra bytes
2206
2207@item S
95ea367d 2208Indirect through @samp{SP} or @samp{DP} with short displacement (0..127)
e3223ea2
DC
2209
2210@item T
2211Data-section immediate value
2212
2213@item I
2214Integers from @minus{}255 to @minus{}1
2215
2216@item J
2217Integers from 0 to 7---valid bit number in a register
2218
2219@item K
2220Integers from 0 to 127---valid displacement for addressing mode
2221
2222@item L
2223Integers from 1 to 127
2224
2225@item M
2226Integer @minus{}1
2227
2228@item N
2229Integer 1
2230
2231@item O
2232Zero
2233
2234@item P
2235Integers from 0 to 255
2236@end table
2237
4226378a
PK
2238@item MIPS---@file{mips.h}
2239@table @code
2240@item d
2241General-purpose integer register
2242
2243@item f
2244Floating-point register (if available)
2245
2246@item h
2247@samp{Hi} register
2248
2249@item l
2250@samp{Lo} register
2251
2252@item x
2253@samp{Hi} or @samp{Lo} register
2254
2255@item y
2256General-purpose integer register
2257
2258@item z
2259Floating-point status register
2260
2261@item I
2262Signed 16-bit constant (for arithmetic instructions)
2263
2264@item J
2265Zero
2266
2267@item K
2268Zero-extended 16-bit constant (for logic instructions)
2269
2270@item L
2271Constant with low 16 bits zero (can be loaded with @code{lui})
2272
2273@item M
227432-bit constant which requires two instructions to load (a constant
2275which is not @samp{I}, @samp{K}, or @samp{L})
2276
2277@item N
2278Negative 16-bit constant
2279
2280@item O
2281Exact power of two
2282
2283@item P
2284Positive 16-bit constant
2285
2286@item G
2287Floating point zero
2288
2289@item Q
2290Memory reference that can be loaded with more than one instruction
2291(@samp{m} is preferable for @code{asm} statements)
2292
2293@item R
2294Memory reference that can be loaded with one instruction
2295(@samp{m} is preferable for @code{asm} statements)
2296
2297@item S
2298Memory reference in external OSF/rose PIC format
2299(@samp{m} is preferable for @code{asm} statements)
2300@end table
2301
03dda8e3
RK
2302@item Motorola 680x0---@file{m68k.h}
2303@table @code
2304@item a
2305Address register
2306
2307@item d
2308Data register
2309
2310@item f
231168881 floating-point register, if available
2312
03dda8e3
RK
2313@item I
2314Integer in the range 1 to 8
2315
2316@item J
1e5f973d 231716-bit signed number
03dda8e3
RK
2318
2319@item K
2320Signed number whose magnitude is greater than 0x80
2321
2322@item L
630d3d5a 2323Integer in the range @minus{}8 to @minus{}1
03dda8e3
RK
2324
2325@item M
2326Signed number whose magnitude is greater than 0x100
2327
2328@item G
2329Floating point constant that is not a 68881 constant
03dda8e3
RK
2330@end table
2331
2856c3e3
SC
2332@item Motorola 68HC11 & 68HC12 families---@file{m68hc11.h}
2333@table @code
2334@item a
78466c0e 2335Register `a'
2856c3e3
SC
2336
2337@item b
78466c0e 2338Register `b'
2856c3e3
SC
2339
2340@item d
78466c0e 2341Register `d'
2856c3e3
SC
2342
2343@item q
2344An 8-bit register
2345
2346@item t
2347Temporary soft register _.tmp
2348
2349@item u
2350A soft register _.d1 to _.d31
2351
2352@item w
2353Stack pointer register
2354
2355@item x
78466c0e 2356Register `x'
2856c3e3
SC
2357
2358@item y
78466c0e 2359Register `y'
2856c3e3
SC
2360
2361@item z
78466c0e 2362Pseudo register `z' (replaced by `x' or `y' at the end)
2856c3e3
SC
2363
2364@item A
2365An address register: x, y or z
2366
2367@item B
2368An address register: x or y
2369
2370@item D
2371Register pair (x:d) to form a 32-bit value
2372
2373@item L
630d3d5a 2374Constants in the range @minus{}65536 to 65535
2856c3e3
SC
2375
2376@item M
2377Constants whose 16-bit low part is zero
2378
2379@item N
630d3d5a 2380Constant integer 1 or @minus{}1
2856c3e3
SC
2381
2382@item O
2383Constant integer 16
2384
2385@item P
630d3d5a 2386Constants in the range @minus{}8 to 2
2856c3e3
SC
2387
2388@end table
2389
03dda8e3
RK
2390@need 1000
2391@item SPARC---@file{sparc.h}
2392@table @code
2393@item f
53e5f173
EB
2394Floating-point register on the SPARC-V8 architecture and
2395lower floating-point register on the SPARC-V9 architecture.
03dda8e3
RK
2396
2397@item e
8a36672b 2398Floating-point register. It is equivalent to @samp{f} on the
53e5f173
EB
2399SPARC-V8 architecture and contains both lower and upper
2400floating-point registers on the SPARC-V9 architecture.
03dda8e3 2401
8a69f99f
EB
2402@item c
2403Floating-point condition code register.
2404
2405@item d
8a36672b 2406Lower floating-point register. It is only valid on the SPARC-V9
53e5f173 2407architecture when the Visual Instruction Set is available.
8a69f99f
EB
2408
2409@item b
8a36672b 2410Floating-point register. It is only valid on the SPARC-V9 architecture
53e5f173 2411when the Visual Instruction Set is available.
8a69f99f
EB
2412
2413@item h
241464-bit global or out register for the SPARC-V8+ architecture.
2415
03dda8e3 2416@item I
1e5f973d 2417Signed 13-bit constant
03dda8e3
RK
2418
2419@item J
2420Zero
2421
2422@item K
1e5f973d 242332-bit constant with the low 12 bits clear (a constant that can be
03dda8e3
RK
2424loaded with the @code{sethi} instruction)
2425
7d6040e8
AO
2426@item L
2427A constant in the range supported by @code{movcc} instructions
2428
2429@item M
2430A constant in the range supported by @code{movrcc} instructions
2431
2432@item N
2433Same as @samp{K}, except that it verifies that bits that are not in the
57694e40 2434lower 32-bit range are all zero. Must be used instead of @samp{K} for
7d6040e8
AO
2435modes wider than @code{SImode}
2436
ef0139b1
EB
2437@item O
2438The constant 4096
2439
03dda8e3
RK
2440@item G
2441Floating-point zero
2442
2443@item H
1e5f973d 2444Signed 13-bit constant, sign-extended to 32 or 64 bits
03dda8e3
RK
2445
2446@item Q
62190128
DM
2447Floating-point constant whose integral representation can
2448be moved into an integer register using a single sethi
2449instruction
2450
2451@item R
2452Floating-point constant whose integral representation can
2453be moved into an integer register using a single mov
2454instruction
03dda8e3
RK
2455
2456@item S
62190128
DM
2457Floating-point constant whose integral representation can
2458be moved into an integer register using a high/lo_sum
2459instruction sequence
03dda8e3
RK
2460
2461@item T
2462Memory address aligned to an 8-byte boundary
2463
2464@item U
2465Even register
6ca30df6 2466
7a31a340 2467@item W
c75d6010
JM
2468Memory address for @samp{e} constraint registers
2469
2470@item Y
2471Vector zero
7a31a340 2472
6ca30df6
MH
2473@end table
2474
2475@item TMS320C3x/C4x---@file{c4x.h}
2476@table @code
2477@item a
2478Auxiliary (address) register (ar0-ar7)
2479
2480@item b
2481Stack pointer register (sp)
2482
2483@item c
1e5f973d 2484Standard (32-bit) precision integer register
6ca30df6
MH
2485
2486@item f
1e5f973d 2487Extended (40-bit) precision register (r0-r11)
6ca30df6
MH
2488
2489@item k
2490Block count register (bk)
2491
2492@item q
1e5f973d 2493Extended (40-bit) precision low register (r0-r7)
6ca30df6
MH
2494
2495@item t
1e5f973d 2496Extended (40-bit) precision register (r0-r1)
6ca30df6
MH
2497
2498@item u
1e5f973d 2499Extended (40-bit) precision register (r2-r3)
6ca30df6
MH
2500
2501@item v
2502Repeat count register (rc)
2503
2504@item x
2505Index register (ir0-ir1)
2506
2507@item y
2508Status (condition code) register (st)
2509
2510@item z
2511Data page register (dp)
2512
2513@item G
2514Floating-point zero
2515
2516@item H
1e5f973d 2517Immediate 16-bit floating-point constant
6ca30df6
MH
2518
2519@item I
1e5f973d 2520Signed 16-bit constant
6ca30df6
MH
2521
2522@item J
1e5f973d 2523Signed 8-bit constant
6ca30df6
MH
2524
2525@item K
1e5f973d 2526Signed 5-bit constant
6ca30df6
MH
2527
2528@item L
1e5f973d 2529Unsigned 16-bit constant
6ca30df6
MH
2530
2531@item M
1e5f973d 2532Unsigned 8-bit constant
6ca30df6
MH
2533
2534@item N
1e5f973d 2535Ones complement of unsigned 16-bit constant
6ca30df6
MH
2536
2537@item O
1e5f973d 2538High 16-bit constant (32-bit constant with 16 LSBs zero)
6ca30df6
MH
2539
2540@item Q
ebb48a4d 2541Indirect memory reference with signed 8-bit or index register displacement
6ca30df6
MH
2542
2543@item R
1e5f973d 2544Indirect memory reference with unsigned 5-bit displacement
6ca30df6
MH
2545
2546@item S
ebb48a4d 2547Indirect memory reference with 1 bit or index register displacement
6ca30df6
MH
2548
2549@item T
2550Direct memory reference
2551
2552@item U
2553Symbolic address
2554
03dda8e3 2555@end table
91abf72d
HP
2556
2557@item S/390 and zSeries---@file{s390.h}
2558@table @code
2559@item a
2560Address register (general purpose register except r0)
2561
9dc62c00
AK
2562@item c
2563Condition code register
2564
91abf72d
HP
2565@item d
2566Data register (arbitrary general purpose register)
2567
2568@item f
2569Floating-point register
2570
2571@item I
2572Unsigned 8-bit constant (0--255)
2573
2574@item J
2575Unsigned 12-bit constant (0--4095)
2576
2577@item K
2578Signed 16-bit constant (@minus{}32768--32767)
2579
2580@item L
f19a9af7
AK
2581Value appropriate as displacement.
2582@table @code
2583 @item (0..4095)
2584 for short displacement
2585 @item (-524288..524287)
2586 for long displacement
2587@end table
2588
2589@item M
2590Constant integer with a value of 0x7fffffff.
2591
2592@item N
2593Multiple letter constraint followed by 4 parameter letters.
2594@table @code
2595 @item 0..9:
2596 number of the part counting from most to least significant
2597 @item H,Q:
2598 mode of the part
2599 @item D,S,H:
2600 mode of the containing operand
2601 @item 0,F:
78466c0e 2602 value of the other parts (F---all bits set)
f19a9af7
AK
2603@end table
2604The constraint matches if the specified part of a constant
2605has a value different from it's other parts.
91abf72d
HP
2606
2607@item Q
f19a9af7
AK
2608Memory reference without index register and with short displacement.
2609
2610@item R
2611Memory reference with index register and short displacement.
91abf72d
HP
2612
2613@item S
f19a9af7
AK
2614Memory reference without index register but with long displacement.
2615
2616@item T
2617Memory reference with index register and long displacement.
2618
2619@item U
2620Pointer with short displacement.
2621
2622@item W
2623Pointer with long displacement.
2624
2625@item Y
2626Shift count operand.
91abf72d
HP
2627
2628@end table
2629
9f339dde
GK
2630@item Xstormy16---@file{stormy16.h}
2631@table @code
2632@item a
2633Register r0.
2634
2635@item b
2636Register r1.
2637
2638@item c
2639Register r2.
2640
2641@item d
2642Register r8.
2643
2644@item e
2645Registers r0 through r7.
2646
2647@item t
2648Registers r0 and r1.
2649
2650@item y
2651The carry register.
2652
2653@item z
2654Registers r8 and r9.
2655
2656@item I
2657A constant between 0 and 3 inclusive.
2658
2659@item J
2660A constant that has exactly one bit set.
2661
2662@item K
2663A constant that has exactly one bit clear.
2664
2665@item L
2666A constant between 0 and 255 inclusive.
2667
2668@item M
69a0611f 2669A constant between @minus{}255 and 0 inclusive.
9f339dde
GK
2670
2671@item N
69a0611f 2672A constant between @minus{}3 and 0 inclusive.
9f339dde
GK
2673
2674@item O
2675A constant between 1 and 4 inclusive.
2676
2677@item P
69a0611f 2678A constant between @minus{}4 and @minus{}1 inclusive.
9f339dde
GK
2679
2680@item Q
2681A memory reference that is a stack push.
2682
2683@item R
2684A memory reference that is a stack pop.
2685
2686@item S
63519d23 2687A memory reference that refers to a constant address of known value.
9f339dde
GK
2688
2689@item T
2690The register indicated by Rx (not implemented yet).
2691
2692@item U
2693A constant that is not between 2 and 15 inclusive.
2694
e2ce66a9
DD
2695@item Z
2696The constant 0.
2697
9f339dde
GK
2698@end table
2699
03984308
BW
2700@item Xtensa---@file{xtensa.h}
2701@table @code
2702@item a
2703General-purpose 32-bit register
2704
2705@item b
2706One-bit boolean register
2707
2708@item A
2709MAC16 40-bit accumulator register
2710
2711@item I
2712Signed 12-bit integer constant, for use in MOVI instructions
2713
2714@item J
2715Signed 8-bit integer constant, for use in ADDI instructions
2716
2717@item K
2718Integer constant valid for BccI instructions
2719
2720@item L
2721Unsigned constant valid for BccUI instructions
2722
2723@end table
2724
03dda8e3
RK
2725@end table
2726
03dda8e3
RK
2727@ifset INTERNALS
2728@node Standard Names
2729@section Standard Pattern Names For Generation
2730@cindex standard pattern names
2731@cindex pattern names
2732@cindex names, pattern
2733
2734Here is a table of the instruction names that are meaningful in the RTL
2735generation pass of the compiler. Giving one of these names to an
2736instruction pattern tells the RTL generation pass that it can use the
556e0f21 2737pattern to accomplish a certain task.
03dda8e3
RK
2738
2739@table @asis
2740@cindex @code{mov@var{m}} instruction pattern
2741@item @samp{mov@var{m}}
4bd0bee9 2742Here @var{m} stands for a two-letter machine mode name, in lowercase.
03dda8e3
RK
2743This instruction pattern moves data with that machine mode from operand
27441 to operand 0. For example, @samp{movsi} moves full-word data.
2745
2746If operand 0 is a @code{subreg} with mode @var{m} of a register whose
2747own mode is wider than @var{m}, the effect of this instruction is
2748to store the specified value in the part of the register that corresponds
8feb4e28
JL
2749to mode @var{m}. Bits outside of @var{m}, but which are within the
2750same target word as the @code{subreg} are undefined. Bits which are
2751outside the target word are left unchanged.
03dda8e3
RK
2752
2753This class of patterns is special in several ways. First of all, each
65945ec1
HPN
2754of these names up to and including full word size @emph{must} be defined,
2755because there is no other way to copy a datum from one place to another.
2756If there are patterns accepting operands in larger modes,
2757@samp{mov@var{m}} must be defined for integer modes of those sizes.
03dda8e3
RK
2758
2759Second, these patterns are not used solely in the RTL generation pass.
2760Even the reload pass can generate move insns to copy values from stack
2761slots into temporary registers. When it does so, one of the operands is
2762a hard register and the other is an operand that can need to be reloaded
2763into a register.
2764
2765@findex force_reg
2766Therefore, when given such a pair of operands, the pattern must generate
2767RTL which needs no reloading and needs no temporary registers---no
2768registers other than the operands. For example, if you support the
2769pattern with a @code{define_expand}, then in such a case the
2770@code{define_expand} mustn't call @code{force_reg} or any other such
2771function which might generate new pseudo registers.
2772
2773This requirement exists even for subword modes on a RISC machine where
2774fetching those modes from memory normally requires several insns and
39ed8974 2775some temporary registers.
03dda8e3
RK
2776
2777@findex change_address
2778During reload a memory reference with an invalid address may be passed
2779as an operand. Such an address will be replaced with a valid address
2780later in the reload pass. In this case, nothing may be done with the
2781address except to use it as it stands. If it is copied, it will not be
2782replaced with a valid address. No attempt should be made to make such
2783an address into a valid address and no routine (such as
2784@code{change_address}) that will do so may be called. Note that
2785@code{general_operand} will fail when applied to such an address.
2786
2787@findex reload_in_progress
2788The global variable @code{reload_in_progress} (which must be explicitly
2789declared if required) can be used to determine whether such special
2790handling is required.
2791
2792The variety of operands that have reloads depends on the rest of the
2793machine description, but typically on a RISC machine these can only be
2794pseudo registers that did not get hard registers, while on other
2795machines explicit memory references will get optional reloads.
2796
2797If a scratch register is required to move an object to or from memory,
f1db3576
JL
2798it can be allocated using @code{gen_reg_rtx} prior to life analysis.
2799
9c34dbbf
ZW
2800If there are cases which need scratch registers during or after reload,
2801you must define @code{SECONDARY_INPUT_RELOAD_CLASS} and/or
03dda8e3
RK
2802@code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide
2803patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle
2804them. @xref{Register Classes}.
2805
f1db3576
JL
2806@findex no_new_pseudos
2807The global variable @code{no_new_pseudos} can be used to determine if it
2808is unsafe to create new pseudo registers. If this variable is nonzero, then
2809it is unsafe to call @code{gen_reg_rtx} to allocate a new pseudo.
2810
956d6950 2811The constraints on a @samp{mov@var{m}} must permit moving any hard
03dda8e3
RK
2812register to any other hard register provided that
2813@code{HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and
2814@code{REGISTER_MOVE_COST} applied to their classes returns a value of 2.
2815
956d6950 2816It is obligatory to support floating point @samp{mov@var{m}}
03dda8e3
RK
2817instructions into and out of any registers that can hold fixed point
2818values, because unions and structures (which have modes @code{SImode} or
2819@code{DImode}) can be in those registers and they may have floating
2820point members.
2821
956d6950 2822There may also be a need to support fixed point @samp{mov@var{m}}
03dda8e3
RK
2823instructions in and out of floating point registers. Unfortunately, I
2824have forgotten why this was so, and I don't know whether it is still
2825true. If @code{HARD_REGNO_MODE_OK} rejects fixed point values in
2826floating point registers, then the constraints of the fixed point
956d6950 2827@samp{mov@var{m}} instructions must be designed to avoid ever trying to
03dda8e3
RK
2828reload into a floating point register.
2829
2830@cindex @code{reload_in} instruction pattern
2831@cindex @code{reload_out} instruction pattern
2832@item @samp{reload_in@var{m}}
2833@itemx @samp{reload_out@var{m}}
2834Like @samp{mov@var{m}}, but used when a scratch register is required to
2835move between operand 0 and operand 1. Operand 2 describes the scratch
2836register. See the discussion of the @code{SECONDARY_RELOAD_CLASS}
2837macro in @pxref{Register Classes}.
2838
d989f648 2839There are special restrictions on the form of the @code{match_operand}s
f282ffb3 2840used in these patterns. First, only the predicate for the reload
560dbedd
RH
2841operand is examined, i.e., @code{reload_in} examines operand 1, but not
2842the predicates for operand 0 or 2. Second, there may be only one
d989f648
RH
2843alternative in the constraints. Third, only a single register class
2844letter may be used for the constraint; subsequent constraint letters
2845are ignored. As a special exception, an empty constraint string
2846matches the @code{ALL_REGS} register class. This may relieve ports
2847of the burden of defining an @code{ALL_REGS} constraint letter just
2848for these patterns.
2849
03dda8e3
RK
2850@cindex @code{movstrict@var{m}} instruction pattern
2851@item @samp{movstrict@var{m}}
2852Like @samp{mov@var{m}} except that if operand 0 is a @code{subreg}
2853with mode @var{m} of a register whose natural mode is wider,
2854the @samp{movstrict@var{m}} instruction is guaranteed not to alter
2855any of the register except the part which belongs to mode @var{m}.
2856
1e0598e2
RH
2857@cindex @code{movmisalign@var{m}} instruction pattern
2858@item @samp{movmisalign@var{m}}
2859This variant of a move pattern is designed to load or store a value
2860from a memory address that is not naturally aligned for its mode.
2861For a store, the memory will be in operand 0; for a load, the memory
2862will be in operand 1. The other operand is guaranteed not to be a
2863memory, so that it's easy to tell whether this is a load or store.
2864
2865This pattern is used by the autovectorizer, and when expanding a
2866@code{MISALIGNED_INDIRECT_REF} expression.
2867
03dda8e3
RK
2868@cindex @code{load_multiple} instruction pattern
2869@item @samp{load_multiple}
2870Load several consecutive memory locations into consecutive registers.
2871Operand 0 is the first of the consecutive registers, operand 1
2872is the first memory location, and operand 2 is a constant: the
2873number of consecutive registers.
2874
2875Define this only if the target machine really has such an instruction;
2876do not define this if the most efficient way of loading consecutive
2877registers from memory is to do them one at a time.
2878
2879On some machines, there are restrictions as to which consecutive
2880registers can be stored into memory, such as particular starting or
2881ending register numbers or only a range of valid counts. For those
2882machines, use a @code{define_expand} (@pxref{Expander Definitions})
2883and make the pattern fail if the restrictions are not met.
2884
2885Write the generated insn as a @code{parallel} with elements being a
2886@code{set} of one register from the appropriate memory location (you may
2887also need @code{use} or @code{clobber} elements). Use a
2888@code{match_parallel} (@pxref{RTL Template}) to recognize the insn. See
c9693e96 2889@file{rs6000.md} for examples of the use of this insn pattern.
03dda8e3
RK
2890
2891@cindex @samp{store_multiple} instruction pattern
2892@item @samp{store_multiple}
2893Similar to @samp{load_multiple}, but store several consecutive registers
2894into consecutive memory locations. Operand 0 is the first of the
2895consecutive memory locations, operand 1 is the first register, and
2896operand 2 is a constant: the number of consecutive registers.
2897
ef1140a9
JH
2898@cindex @code{vec_set@var{m}} instruction pattern
2899@item @samp{vec_set@var{m}}
2900Set given field in the vector value. Operand 0 is the vector to modify,
2901operand 1 is new value of field and operand 2 specify the field index.
2902
2903@cindex @code{vec_extract@var{m}} instruction pattern
2904@item @samp{vec_extract@var{m}}
2905Extract given field from the vector value. Operand 1 is the vector, operand 2
2906specify field index and operand 0 place to store value into.
2907
2908@cindex @code{vec_init@var{m}} instruction pattern
2909@item @samp{vec_init@var{m}}
425a2bde 2910Initialize the vector to given values. Operand 0 is the vector to initialize
ef1140a9
JH
2911and operand 1 is parallel containing values for individual fields.
2912
38f4324c
JH
2913@cindex @code{push@var{m}} instruction pattern
2914@item @samp{push@var{m}}
299c5111 2915Output a push instruction. Operand 0 is value to push. Used only when
38f4324c
JH
2916@code{PUSH_ROUNDING} is defined. For historical reason, this pattern may be
2917missing and in such case an @code{mov} expander is used instead, with a
6e9aac46 2918@code{MEM} expression forming the push operation. The @code{mov} expander
38f4324c
JH
2919method is deprecated.
2920
03dda8e3
RK
2921@cindex @code{add@var{m}3} instruction pattern
2922@item @samp{add@var{m}3}
2923Add operand 2 and operand 1, storing the result in operand 0. All operands
2924must have mode @var{m}. This can be used even on two-address machines, by
2925means of constraints requiring operands 1 and 0 to be the same location.
2926
2927@cindex @code{sub@var{m}3} instruction pattern
2928@cindex @code{mul@var{m}3} instruction pattern
2929@cindex @code{div@var{m}3} instruction pattern
2930@cindex @code{udiv@var{m}3} instruction pattern
2931@cindex @code{mod@var{m}3} instruction pattern
2932@cindex @code{umod@var{m}3} instruction pattern
03dda8e3
RK
2933@cindex @code{umin@var{m}3} instruction pattern
2934@cindex @code{umax@var{m}3} instruction pattern
2935@cindex @code{and@var{m}3} instruction pattern
2936@cindex @code{ior@var{m}3} instruction pattern
2937@cindex @code{xor@var{m}3} instruction pattern
2938@item @samp{sub@var{m}3}, @samp{mul@var{m}3}
7ae4d8d4
RH
2939@itemx @samp{div@var{m}3}, @samp{udiv@var{m}3}
2940@itemx @samp{mod@var{m}3}, @samp{umod@var{m}3}
2941@itemx @samp{umin@var{m}3}, @samp{umax@var{m}3}
03dda8e3
RK
2942@itemx @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3}
2943Similar, for other arithmetic operations.
7ae4d8d4 2944
b71b019a
JH
2945@cindex @code{min@var{m}3} instruction pattern
2946@cindex @code{max@var{m}3} instruction pattern
7ae4d8d4
RH
2947@item @samp{smin@var{m}3}, @samp{smax@var{m}3}
2948Signed minimum and maximum operations. When used with floating point,
2949if both operands are zeros, or if either operand is @code{NaN}, then
2950it is unspecified which of the two operands is returned as the result.
03dda8e3
RK
2951
2952@cindex @code{mulhisi3} instruction pattern
2953@item @samp{mulhisi3}
2954Multiply operands 1 and 2, which have mode @code{HImode}, and store
2955a @code{SImode} product in operand 0.
2956
2957@cindex @code{mulqihi3} instruction pattern
2958@cindex @code{mulsidi3} instruction pattern
2959@item @samp{mulqihi3}, @samp{mulsidi3}
2960Similar widening-multiplication instructions of other widths.
2961
2962@cindex @code{umulqihi3} instruction pattern
2963@cindex @code{umulhisi3} instruction pattern
2964@cindex @code{umulsidi3} instruction pattern
2965@item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3}
2966Similar widening-multiplication instructions that do unsigned
2967multiplication.
2968
2969@cindex @code{smul@var{m}3_highpart} instruction pattern
759c58af 2970@item @samp{smul@var{m}3_highpart}
03dda8e3
RK
2971Perform a signed multiplication of operands 1 and 2, which have mode
2972@var{m}, and store the most significant half of the product in operand 0.
2973The least significant half of the product is discarded.
2974
2975@cindex @code{umul@var{m}3_highpart} instruction pattern
2976@item @samp{umul@var{m}3_highpart}
2977Similar, but the multiplication is unsigned.
2978
2979@cindex @code{divmod@var{m}4} instruction pattern
2980@item @samp{divmod@var{m}4}
2981Signed division that produces both a quotient and a remainder.
2982Operand 1 is divided by operand 2 to produce a quotient stored
2983in operand 0 and a remainder stored in operand 3.
2984
2985For machines with an instruction that produces both a quotient and a
2986remainder, provide a pattern for @samp{divmod@var{m}4} but do not
2987provide patterns for @samp{div@var{m}3} and @samp{mod@var{m}3}. This
2988allows optimization in the relatively common case when both the quotient
2989and remainder are computed.
2990
2991If an instruction that just produces a quotient or just a remainder
2992exists and is more efficient than the instruction that produces both,
2993write the output routine of @samp{divmod@var{m}4} to call
2994@code{find_reg_note} and look for a @code{REG_UNUSED} note on the
2995quotient or remainder and generate the appropriate instruction.
2996
2997@cindex @code{udivmod@var{m}4} instruction pattern
2998@item @samp{udivmod@var{m}4}
2999Similar, but does unsigned division.
3000
273a2526 3001@anchor{shift patterns}
03dda8e3
RK
3002@cindex @code{ashl@var{m}3} instruction pattern
3003@item @samp{ashl@var{m}3}
3004Arithmetic-shift operand 1 left by a number of bits specified by operand
30052, and store the result in operand 0. Here @var{m} is the mode of
3006operand 0 and operand 1; operand 2's mode is specified by the
3007instruction pattern, and the compiler will convert the operand to that
273a2526
RS
3008mode before generating the instruction. The meaning of out-of-range shift
3009counts can optionally be specified by @code{TARGET_SHIFT_TRUNCATION_MASK}.
3010@xref{TARGET_SHIFT_TRUNCATION_MASK}.
03dda8e3
RK
3011
3012@cindex @code{ashr@var{m}3} instruction pattern
3013@cindex @code{lshr@var{m}3} instruction pattern
3014@cindex @code{rotl@var{m}3} instruction pattern
3015@cindex @code{rotr@var{m}3} instruction pattern
3016@item @samp{ashr@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3}
3017Other shift and rotate instructions, analogous to the
3018@code{ashl@var{m}3} instructions.
3019
3020@cindex @code{neg@var{m}2} instruction pattern
3021@item @samp{neg@var{m}2}
3022Negate operand 1 and store the result in operand 0.
3023
3024@cindex @code{abs@var{m}2} instruction pattern
3025@item @samp{abs@var{m}2}
3026Store the absolute value of operand 1 into operand 0.
3027
3028@cindex @code{sqrt@var{m}2} instruction pattern
3029@item @samp{sqrt@var{m}2}
3030Store the square root of operand 1 into operand 0.
3031
3032The @code{sqrt} built-in function of C always uses the mode which
e7b489c8
RS
3033corresponds to the C data type @code{double} and the @code{sqrtf}
3034built-in function uses the mode which corresponds to the C data
3035type @code{float}.
3036
3037@cindex @code{cos@var{m}2} instruction pattern
3038@item @samp{cos@var{m}2}
3039Store the cosine of operand 1 into operand 0.
3040
3041The @code{cos} built-in function of C always uses the mode which
3042corresponds to the C data type @code{double} and the @code{cosf}
3043built-in function uses the mode which corresponds to the C data
3044type @code{float}.
3045
3046@cindex @code{sin@var{m}2} instruction pattern
3047@item @samp{sin@var{m}2}
3048Store the sine of operand 1 into operand 0.
3049
3050The @code{sin} built-in function of C always uses the mode which
3051corresponds to the C data type @code{double} and the @code{sinf}
3052built-in function uses the mode which corresponds to the C data
3053type @code{float}.
3054
3055@cindex @code{exp@var{m}2} instruction pattern
3056@item @samp{exp@var{m}2}
3057Store the exponential of operand 1 into operand 0.
3058
3059The @code{exp} built-in function of C always uses the mode which
3060corresponds to the C data type @code{double} and the @code{expf}
3061built-in function uses the mode which corresponds to the C data
3062type @code{float}.
3063
3064@cindex @code{log@var{m}2} instruction pattern
3065@item @samp{log@var{m}2}
3066Store the natural logarithm of operand 1 into operand 0.
3067
3068The @code{log} built-in function of C always uses the mode which
3069corresponds to the C data type @code{double} and the @code{logf}
3070built-in function uses the mode which corresponds to the C data
3071type @code{float}.
03dda8e3 3072
b5e01d4b
RS
3073@cindex @code{pow@var{m}3} instruction pattern
3074@item @samp{pow@var{m}3}
3075Store the value of operand 1 raised to the exponent operand 2
3076into operand 0.
3077
3078The @code{pow} built-in function of C always uses the mode which
3079corresponds to the C data type @code{double} and the @code{powf}
3080built-in function uses the mode which corresponds to the C data
3081type @code{float}.
3082
3083@cindex @code{atan2@var{m}3} instruction pattern
3084@item @samp{atan2@var{m}3}
3085Store the arc tangent (inverse tangent) of operand 1 divided by
3086operand 2 into operand 0, using the signs of both arguments to
3087determine the quadrant of the result.
3088
3089The @code{atan2} built-in function of C always uses the mode which
3090corresponds to the C data type @code{double} and the @code{atan2f}
3091built-in function uses the mode which corresponds to the C data
3092type @code{float}.
3093
4977bab6
ZW
3094@cindex @code{floor@var{m}2} instruction pattern
3095@item @samp{floor@var{m}2}
3096Store the largest integral value not greater than argument.
3097
3098The @code{floor} built-in function of C always uses the mode which
3099corresponds to the C data type @code{double} and the @code{floorf}
3100built-in function uses the mode which corresponds to the C data
3101type @code{float}.
3102
10553f10
UB
3103@cindex @code{btrunc@var{m}2} instruction pattern
3104@item @samp{btrunc@var{m}2}
4977bab6
ZW
3105Store the argument rounded to integer towards zero.
3106
3107The @code{trunc} built-in function of C always uses the mode which
3108corresponds to the C data type @code{double} and the @code{truncf}
3109built-in function uses the mode which corresponds to the C data
3110type @code{float}.
3111
3112@cindex @code{round@var{m}2} instruction pattern
3113@item @samp{round@var{m}2}
3114Store the argument rounded to integer away from zero.
3115
3116The @code{round} built-in function of C always uses the mode which
3117corresponds to the C data type @code{double} and the @code{roundf}
3118built-in function uses the mode which corresponds to the C data
3119type @code{float}.
3120
3121@cindex @code{ceil@var{m}2} instruction pattern
3122@item @samp{ceil@var{m}2}
3123Store the argument rounded to integer away from zero.
3124
3125The @code{ceil} built-in function of C always uses the mode which
3126corresponds to the C data type @code{double} and the @code{ceilf}
3127built-in function uses the mode which corresponds to the C data
3128type @code{float}.
3129
3130@cindex @code{nearbyint@var{m}2} instruction pattern
3131@item @samp{nearbyint@var{m}2}
3132Store the argument rounded according to the default rounding mode
3133
3134The @code{nearbyint} built-in function of C always uses the mode which
3135corresponds to the C data type @code{double} and the @code{nearbyintf}
3136built-in function uses the mode which corresponds to the C data
3137type @code{float}.
3138
10553f10
UB
3139@cindex @code{rint@var{m}2} instruction pattern
3140@item @samp{rint@var{m}2}
3141Store the argument rounded according to the default rounding mode and
3142raise the inexact exception when the result differs in value from
3143the argument
3144
3145The @code{rint} built-in function of C always uses the mode which
3146corresponds to the C data type @code{double} and the @code{rintf}
3147built-in function uses the mode which corresponds to the C data
3148type @code{float}.
3149
03dda8e3
RK
3150@cindex @code{ffs@var{m}2} instruction pattern
3151@item @samp{ffs@var{m}2}
3152Store into operand 0 one plus the index of the least significant 1-bit
3153of operand 1. If operand 1 is zero, store zero. @var{m} is the mode
3154of operand 0; operand 1's mode is specified by the instruction
3155pattern, and the compiler will convert the operand to that mode before
3156generating the instruction.
3157
3158The @code{ffs} built-in function of C always uses the mode which
3159corresponds to the C data type @code{int}.
3160
2928cd7a
RH
3161@cindex @code{clz@var{m}2} instruction pattern
3162@item @samp{clz@var{m}2}
3163Store into operand 0 the number of leading 0-bits in @var{x}, starting
3164at the most significant bit position. If @var{x} is 0, the result is
3165undefined. @var{m} is the mode of operand 0; operand 1's mode is
3166specified by the instruction pattern, and the compiler will convert the
3167operand to that mode before generating the instruction.
3168
3169@cindex @code{ctz@var{m}2} instruction pattern
3170@item @samp{ctz@var{m}2}
3171Store into operand 0 the number of trailing 0-bits in @var{x}, starting
3172at the least significant bit position. If @var{x} is 0, the result is
3173undefined. @var{m} is the mode of operand 0; operand 1's mode is
3174specified by the instruction pattern, and the compiler will convert the
3175operand to that mode before generating the instruction.
3176
3177@cindex @code{popcount@var{m}2} instruction pattern
3178@item @samp{popcount@var{m}2}
3179Store into operand 0 the number of 1-bits in @var{x}. @var{m} is the
3180mode of operand 0; operand 1's mode is specified by the instruction
3181pattern, and the compiler will convert the operand to that mode before
3182generating the instruction.
3183
3184@cindex @code{parity@var{m}2} instruction pattern
3185@item @samp{parity@var{m}2}
8a36672b 3186Store into operand 0 the parity of @var{x}, i.e.@: the number of 1-bits
2928cd7a
RH
3187in @var{x} modulo 2. @var{m} is the mode of operand 0; operand 1's mode
3188is specified by the instruction pattern, and the compiler will convert
3189the operand to that mode before generating the instruction.
3190
03dda8e3
RK
3191@cindex @code{one_cmpl@var{m}2} instruction pattern
3192@item @samp{one_cmpl@var{m}2}
3193Store the bitwise-complement of operand 1 into operand 0.
3194
3195@cindex @code{cmp@var{m}} instruction pattern
3196@item @samp{cmp@var{m}}
3197Compare operand 0 and operand 1, and set the condition codes.
3198The RTL pattern should look like this:
3199
3200@smallexample
3201(set (cc0) (compare (match_operand:@var{m} 0 @dots{})
3202 (match_operand:@var{m} 1 @dots{})))
3203@end smallexample
3204
3205@cindex @code{tst@var{m}} instruction pattern
3206@item @samp{tst@var{m}}
3207Compare operand 0 against zero, and set the condition codes.
3208The RTL pattern should look like this:
3209
3210@smallexample
3211(set (cc0) (match_operand:@var{m} 0 @dots{}))
3212@end smallexample
3213
3214@samp{tst@var{m}} patterns should not be defined for machines that do
3215not use @code{(cc0)}. Doing so would confuse the optimizer since it
3216would no longer be clear which @code{set} operations were comparisons.
3217The @samp{cmp@var{m}} patterns should be used instead.
3218
70128ad9
AO
3219@cindex @code{movmem@var{m}} instruction pattern
3220@item @samp{movmem@var{m}}
beed8fc0
AO
3221Block move instruction. The destination and source blocks of memory
3222are the first two operands, and both are @code{mem:BLK}s with an
3223address in mode @code{Pmode}.
e5e809f4 3224
03dda8e3 3225The number of bytes to move is the third operand, in mode @var{m}.
e5e809f4
JL
3226Usually, you specify @code{word_mode} for @var{m}. However, if you can
3227generate better code knowing the range of valid lengths is smaller than
3228those representable in a full word, you should provide a pattern with a
3229mode corresponding to the range of values you can handle efficiently
3230(e.g., @code{QImode} for values in the range 0--127; note we avoid numbers
3231that appear negative) and also a pattern with @code{word_mode}.
03dda8e3
RK
3232
3233The fourth operand is the known shared alignment of the source and
3234destination, in the form of a @code{const_int} rtx. Thus, if the
3235compiler knows that both source and destination are word-aligned,
3236it may provide the value 4 for this operand.
3237
70128ad9 3238Descriptions of multiple @code{movmem@var{m}} patterns can only be
4693911f 3239beneficial if the patterns for smaller modes have fewer restrictions
8c01d9b6 3240on their first, second and fourth operands. Note that the mode @var{m}
70128ad9 3241in @code{movmem@var{m}} does not impose any restriction on the mode of
8c01d9b6
JL
3242individually moved data units in the block.
3243
03dda8e3
RK
3244These patterns need not give special consideration to the possibility
3245that the source and destination strings might overlap.
3246
beed8fc0
AO
3247@cindex @code{movstr} instruction pattern
3248@item @samp{movstr}
3249String copy instruction, with @code{stpcpy} semantics. Operand 0 is
3250an output operand in mode @code{Pmode}. The addresses of the
3251destination and source strings are operands 1 and 2, and both are
3252@code{mem:BLK}s with addresses in mode @code{Pmode}. The execution of
3253the expansion of this pattern should store in operand 0 the address in
3254which the @code{NUL} terminator was stored in the destination string.
3255
57e84f18
AS
3256@cindex @code{setmem@var{m}} instruction pattern
3257@item @samp{setmem@var{m}}
3258Block set instruction. The destination string is the first operand,
beed8fc0 3259given as a @code{mem:BLK} whose address is in mode @code{Pmode}. The
57e84f18
AS
3260number of bytes to set is the second operand, in mode @var{m}. The value to
3261initialize the memory with is the third operand. Targets that only support the
3262clearing of memory should reject any value that is not the constant 0. See
beed8fc0 3263@samp{movmem@var{m}} for a discussion of the choice of mode.
03dda8e3 3264
57e84f18 3265The fourth operand is the known alignment of the destination, in the form
03dda8e3
RK
3266of a @code{const_int} rtx. Thus, if the compiler knows that the
3267destination is word-aligned, it may provide the value 4 for this
3268operand.
3269
57e84f18 3270The use for multiple @code{setmem@var{m}} is as for @code{movmem@var{m}}.
8c01d9b6 3271
40c1d5f8
AS
3272@cindex @code{cmpstrn@var{m}} instruction pattern
3273@item @samp{cmpstrn@var{m}}
358b8f01 3274String compare instruction, with five operands. Operand 0 is the output;
03dda8e3 3275it has mode @var{m}. The remaining four operands are like the operands
70128ad9 3276of @samp{movmem@var{m}}. The two memory blocks specified are compared
5cc2f4f3
KG
3277byte by byte in lexicographic order starting at the beginning of each
3278string. The instruction is not allowed to prefetch more than one byte
3279at a time since either string may end in the first byte and reading past
3280that may access an invalid page or segment and cause a fault. The
3281effect of the instruction is to store a value in operand 0 whose sign
3282indicates the result of the comparison.
03dda8e3 3283
40c1d5f8
AS
3284@cindex @code{cmpstr@var{m}} instruction pattern
3285@item @samp{cmpstr@var{m}}
3286String compare instruction, without known maximum length. Operand 0 is the
3287output; it has mode @var{m}. The second and third operand are the blocks of
3288memory to be compared; both are @code{mem:BLK} with an address in mode
3289@code{Pmode}.
3290
3291The fourth operand is the known shared alignment of the source and
3292destination, in the form of a @code{const_int} rtx. Thus, if the
3293compiler knows that both source and destination are word-aligned,
3294it may provide the value 4 for this operand.
3295
3296The two memory blocks specified are compared byte by byte in lexicographic
3297order starting at the beginning of each string. The instruction is not allowed
3298to prefetch more than one byte at a time since either string may end in the
3299first byte and reading past that may access an invalid page or segment and
3300cause a fault. The effect of the instruction is to store a value in operand 0
3301whose sign indicates the result of the comparison.
3302
358b8f01
JJ
3303@cindex @code{cmpmem@var{m}} instruction pattern
3304@item @samp{cmpmem@var{m}}
3305Block compare instruction, with five operands like the operands
3306of @samp{cmpstr@var{m}}. The two memory blocks specified are compared
3307byte by byte in lexicographic order starting at the beginning of each
3308block. Unlike @samp{cmpstr@var{m}} the instruction can prefetch
3309any bytes in the two memory blocks. The effect of the instruction is
3310to store a value in operand 0 whose sign indicates the result of the
3311comparison.
3312
03dda8e3
RK
3313@cindex @code{strlen@var{m}} instruction pattern
3314@item @samp{strlen@var{m}}
3315Compute the length of a string, with three operands.
3316Operand 0 is the result (of mode @var{m}), operand 1 is
3317a @code{mem} referring to the first character of the string,
3318operand 2 is the character to search for (normally zero),
3319and operand 3 is a constant describing the known alignment
3320of the beginning of the string.
3321
3322@cindex @code{float@var{mn}2} instruction pattern
3323@item @samp{float@var{m}@var{n}2}
3324Convert signed integer operand 1 (valid for fixed point mode @var{m}) to
3325floating point mode @var{n} and store in operand 0 (which has mode
3326@var{n}).
3327
3328@cindex @code{floatuns@var{mn}2} instruction pattern
3329@item @samp{floatuns@var{m}@var{n}2}
3330Convert unsigned integer operand 1 (valid for fixed point mode @var{m})
3331to floating point mode @var{n} and store in operand 0 (which has mode
3332@var{n}).
3333
3334@cindex @code{fix@var{mn}2} instruction pattern
3335@item @samp{fix@var{m}@var{n}2}
3336Convert operand 1 (valid for floating point mode @var{m}) to fixed
3337point mode @var{n} as a signed number and store in operand 0 (which
3338has mode @var{n}). This instruction's result is defined only when
3339the value of operand 1 is an integer.
3340
0e1d7f32
AH
3341If the machine description defines this pattern, it also needs to
3342define the @code{ftrunc} pattern.
3343
03dda8e3
RK
3344@cindex @code{fixuns@var{mn}2} instruction pattern
3345@item @samp{fixuns@var{m}@var{n}2}
3346Convert operand 1 (valid for floating point mode @var{m}) to fixed
3347point mode @var{n} as an unsigned number and store in operand 0 (which
3348has mode @var{n}). This instruction's result is defined only when the
3349value of operand 1 is an integer.
3350
3351@cindex @code{ftrunc@var{m}2} instruction pattern
3352@item @samp{ftrunc@var{m}2}
3353Convert operand 1 (valid for floating point mode @var{m}) to an
3354integer value, still represented in floating point mode @var{m}, and
3355store it in operand 0 (valid for floating point mode @var{m}).
3356
3357@cindex @code{fix_trunc@var{mn}2} instruction pattern
3358@item @samp{fix_trunc@var{m}@var{n}2}
3359Like @samp{fix@var{m}@var{n}2} but works for any floating point value
3360of mode @var{m} by converting the value to an integer.
3361
3362@cindex @code{fixuns_trunc@var{mn}2} instruction pattern
3363@item @samp{fixuns_trunc@var{m}@var{n}2}
3364Like @samp{fixuns@var{m}@var{n}2} but works for any floating point
3365value of mode @var{m} by converting the value to an integer.
3366
3367@cindex @code{trunc@var{mn}2} instruction pattern
3368@item @samp{trunc@var{m}@var{n}2}
3369Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and
3370store in operand 0 (which has mode @var{n}). Both modes must be fixed
3371point or both floating point.
3372
3373@cindex @code{extend@var{mn}2} instruction pattern
3374@item @samp{extend@var{m}@var{n}2}
3375Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
3376store in operand 0 (which has mode @var{n}). Both modes must be fixed
3377point or both floating point.
3378
3379@cindex @code{zero_extend@var{mn}2} instruction pattern
3380@item @samp{zero_extend@var{m}@var{n}2}
3381Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
3382store in operand 0 (which has mode @var{n}). Both modes must be fixed
3383point.
3384
3385@cindex @code{extv} instruction pattern
3386@item @samp{extv}
c771326b 3387Extract a bit-field from operand 1 (a register or memory operand), where
03dda8e3
RK
3388operand 2 specifies the width in bits and operand 3 the starting bit,
3389and store it in operand 0. Operand 0 must have mode @code{word_mode}.
3390Operand 1 may have mode @code{byte_mode} or @code{word_mode}; often
3391@code{word_mode} is allowed only for registers. Operands 2 and 3 must
3392be valid for @code{word_mode}.
3393
3394The RTL generation pass generates this instruction only with constants
3395for operands 2 and 3.
3396
3397The bit-field value is sign-extended to a full word integer
3398before it is stored in operand 0.
3399
3400@cindex @code{extzv} instruction pattern
3401@item @samp{extzv}
3402Like @samp{extv} except that the bit-field value is zero-extended.
3403
3404@cindex @code{insv} instruction pattern
3405@item @samp{insv}
c771326b
JM
3406Store operand 3 (which must be valid for @code{word_mode}) into a
3407bit-field in operand 0, where operand 1 specifies the width in bits and
03dda8e3
RK
3408operand 2 the starting bit. Operand 0 may have mode @code{byte_mode} or
3409@code{word_mode}; often @code{word_mode} is allowed only for registers.
3410Operands 1 and 2 must be valid for @code{word_mode}.
3411
3412The RTL generation pass generates this instruction only with constants
3413for operands 1 and 2.
3414
3415@cindex @code{mov@var{mode}cc} instruction pattern
3416@item @samp{mov@var{mode}cc}
3417Conditionally move operand 2 or operand 3 into operand 0 according to the
3418comparison in operand 1. If the comparison is true, operand 2 is moved
3419into operand 0, otherwise operand 3 is moved.
3420
3421The mode of the operands being compared need not be the same as the operands
3422being moved. Some machines, sparc64 for example, have instructions that
3423conditionally move an integer value based on the floating point condition
3424codes and vice versa.
3425
3426If the machine does not have conditional move instructions, do not
3427define these patterns.
3428
068f5dea 3429@cindex @code{add@var{mode}cc} instruction pattern
4b5cc2b3 3430@item @samp{add@var{mode}cc}
068f5dea
JH
3431Similar to @samp{mov@var{mode}cc} but for conditional addition. Conditionally
3432move operand 2 or (operands 2 + operand 3) into operand 0 according to the
3433comparison in operand 1. If the comparison is true, operand 2 is moved into
4b5cc2b3 3434operand 0, otherwise (operand 2 + operand 3) is moved.
068f5dea 3435
03dda8e3
RK
3436@cindex @code{s@var{cond}} instruction pattern
3437@item @samp{s@var{cond}}
3438Store zero or nonzero in the operand according to the condition codes.
3439Value stored is nonzero iff the condition @var{cond} is true.
3440@var{cond} is the name of a comparison operation expression code, such
3441as @code{eq}, @code{lt} or @code{leu}.
3442
3443You specify the mode that the operand must have when you write the
3444@code{match_operand} expression. The compiler automatically sees
3445which mode you have used and supplies an operand of that mode.
3446
3447The value stored for a true condition must have 1 as its low bit, or
3448else must be negative. Otherwise the instruction is not suitable and
3449you should omit it from the machine description. You describe to the
3450compiler exactly which value is stored by defining the macro
3451@code{STORE_FLAG_VALUE} (@pxref{Misc}). If a description cannot be
3452found that can be used for all the @samp{s@var{cond}} patterns, you
3453should omit those operations from the machine description.
3454
3455These operations may fail, but should do so only in relatively
3456uncommon cases; if they would fail for common cases involving
3457integer comparisons, it is best to omit these patterns.
3458
3459If these operations are omitted, the compiler will usually generate code
3460that copies the constant one to the target and branches around an
3461assignment of zero to the target. If this code is more efficient than
3462the potential instructions used for the @samp{s@var{cond}} pattern
3463followed by those required to convert the result into a 1 or a zero in
3464@code{SImode}, you should omit the @samp{s@var{cond}} operations from
3465the machine description.
3466
3467@cindex @code{b@var{cond}} instruction pattern
3468@item @samp{b@var{cond}}
3469Conditional branch instruction. Operand 0 is a @code{label_ref} that
3470refers to the label to jump to. Jump if the condition codes meet
3471condition @var{cond}.
3472
3473Some machines do not follow the model assumed here where a comparison
3474instruction is followed by a conditional branch instruction. In that
3475case, the @samp{cmp@var{m}} (and @samp{tst@var{m}}) patterns should
3476simply store the operands away and generate all the required insns in a
3477@code{define_expand} (@pxref{Expander Definitions}) for the conditional
3478branch operations. All calls to expand @samp{b@var{cond}} patterns are
3479immediately preceded by calls to expand either a @samp{cmp@var{m}}
3480pattern or a @samp{tst@var{m}} pattern.
3481
3482Machines that use a pseudo register for the condition code value, or
3483where the mode used for the comparison depends on the condition being
0b433de6 3484tested, should also use the above mechanism. @xref{Jump Patterns}.
03dda8e3
RK
3485
3486The above discussion also applies to the @samp{mov@var{mode}cc} and
3487@samp{s@var{cond}} patterns.
3488
66c87bae
KH
3489@cindex @code{cbranch@var{mode}4} instruction pattern
3490@item @samp{cbranch@var{mode}4}
3491Conditional branch instruction combined with a compare instruction.
3492Operand 0 is a comparison operator. Operand 1 and operand 2 are the
3493first and second operands of the comparison, respectively. Operand 3
3494is a @code{label_ref} that refers to the label to jump to.
3495
d26eedb6
HPN
3496@cindex @code{jump} instruction pattern
3497@item @samp{jump}
3498A jump inside a function; an unconditional branch. Operand 0 is the
3499@code{label_ref} of the label to jump to. This pattern name is mandatory
3500on all machines.
3501
03dda8e3
RK
3502@cindex @code{call} instruction pattern
3503@item @samp{call}
3504Subroutine call instruction returning no value. Operand 0 is the
3505function to call; operand 1 is the number of bytes of arguments pushed
f5963e61
JL
3506as a @code{const_int}; operand 2 is the number of registers used as
3507operands.
03dda8e3
RK
3508
3509On most machines, operand 2 is not actually stored into the RTL
3510pattern. It is supplied for the sake of some RISC machines which need
3511to put this information into the assembler code; they can put it in
3512the RTL instead of operand 1.
3513
3514Operand 0 should be a @code{mem} RTX whose address is the address of the
3515function. Note, however, that this address can be a @code{symbol_ref}
3516expression even if it would not be a legitimate memory address on the
3517target machine. If it is also not a valid argument for a call
3518instruction, the pattern for this operation should be a
3519@code{define_expand} (@pxref{Expander Definitions}) that places the
3520address into a register and uses that register in the call instruction.
3521
3522@cindex @code{call_value} instruction pattern
3523@item @samp{call_value}
3524Subroutine call instruction returning a value. Operand 0 is the hard
3525register in which the value is returned. There are three more
3526operands, the same as the three operands of the @samp{call}
3527instruction (but with numbers increased by one).
3528
3529Subroutines that return @code{BLKmode} objects use the @samp{call}
3530insn.
3531
3532@cindex @code{call_pop} instruction pattern
3533@cindex @code{call_value_pop} instruction pattern
3534@item @samp{call_pop}, @samp{call_value_pop}
3535Similar to @samp{call} and @samp{call_value}, except used if defined and
df2a54e9 3536if @code{RETURN_POPS_ARGS} is nonzero. They should emit a @code{parallel}
03dda8e3
RK
3537that contains both the function call and a @code{set} to indicate the
3538adjustment made to the frame pointer.
3539
df2a54e9 3540For machines where @code{RETURN_POPS_ARGS} can be nonzero, the use of these
03dda8e3
RK
3541patterns increases the number of functions for which the frame pointer
3542can be eliminated, if desired.
3543
3544@cindex @code{untyped_call} instruction pattern
3545@item @samp{untyped_call}
3546Subroutine call instruction returning a value of any type. Operand 0 is
3547the function to call; operand 1 is a memory location where the result of
3548calling the function is to be stored; operand 2 is a @code{parallel}
3549expression where each element is a @code{set} expression that indicates
3550the saving of a function return value into the result block.
3551
3552This instruction pattern should be defined to support
3553@code{__builtin_apply} on machines where special instructions are needed
3554to call a subroutine with arbitrary arguments or to save the value
3555returned. This instruction pattern is required on machines that have
e979f9e8
JM
3556multiple registers that can hold a return value
3557(i.e.@: @code{FUNCTION_VALUE_REGNO_P} is true for more than one register).
03dda8e3
RK
3558
3559@cindex @code{return} instruction pattern
3560@item @samp{return}
3561Subroutine return instruction. This instruction pattern name should be
3562defined only if a single instruction can do all the work of returning
3563from a function.
3564
3565Like the @samp{mov@var{m}} patterns, this pattern is also used after the
3566RTL generation phase. In this case it is to support machines where
3567multiple instructions are usually needed to return from a function, but
3568some class of functions only requires one instruction to implement a
3569return. Normally, the applicable functions are those which do not need
3570to save any registers or allocate stack space.
3571
3572@findex reload_completed
3573@findex leaf_function_p
3574For such machines, the condition specified in this pattern should only
df2a54e9 3575be true when @code{reload_completed} is nonzero and the function's
03dda8e3
RK
3576epilogue would only be a single instruction. For machines with register
3577windows, the routine @code{leaf_function_p} may be used to determine if
3578a register window push is required.
3579
3580Machines that have conditional return instructions should define patterns
3581such as
3582
3583@smallexample
3584(define_insn ""
3585 [(set (pc)
3586 (if_then_else (match_operator
3587 0 "comparison_operator"
3588 [(cc0) (const_int 0)])
3589 (return)
3590 (pc)))]
3591 "@var{condition}"
3592 "@dots{}")
3593@end smallexample
3594
3595where @var{condition} would normally be the same condition specified on the
3596named @samp{return} pattern.
3597
3598@cindex @code{untyped_return} instruction pattern
3599@item @samp{untyped_return}
3600Untyped subroutine return instruction. This instruction pattern should
3601be defined to support @code{__builtin_return} on machines where special
3602instructions are needed to return a value of any type.
3603
3604Operand 0 is a memory location where the result of calling a function
3605with @code{__builtin_apply} is stored; operand 1 is a @code{parallel}
3606expression where each element is a @code{set} expression that indicates
3607the restoring of a function return value from the result block.
3608
3609@cindex @code{nop} instruction pattern
3610@item @samp{nop}
3611No-op instruction. This instruction pattern name should always be defined
3612to output a no-op in assembler code. @code{(const_int 0)} will do as an
3613RTL pattern.
3614
3615@cindex @code{indirect_jump} instruction pattern
3616@item @samp{indirect_jump}
3617An instruction to jump to an address which is operand zero.
3618This pattern name is mandatory on all machines.
3619
3620@cindex @code{casesi} instruction pattern
3621@item @samp{casesi}
3622Instruction to jump through a dispatch table, including bounds checking.
3623This instruction takes five operands:
3624
3625@enumerate
3626@item
3627The index to dispatch on, which has mode @code{SImode}.
3628
3629@item
3630The lower bound for indices in the table, an integer constant.
3631
3632@item
3633The total range of indices in the table---the largest index
3634minus the smallest one (both inclusive).
3635
3636@item
3637A label that precedes the table itself.
3638
3639@item
3640A label to jump to if the index has a value outside the bounds.
03dda8e3
RK
3641@end enumerate
3642
3643The table is a @code{addr_vec} or @code{addr_diff_vec} inside of a
3644@code{jump_insn}. The number of elements in the table is one plus the
3645difference between the upper bound and the lower bound.
3646
3647@cindex @code{tablejump} instruction pattern
3648@item @samp{tablejump}
3649Instruction to jump to a variable address. This is a low-level
3650capability which can be used to implement a dispatch table when there
3651is no @samp{casesi} pattern.
3652
3653This pattern requires two operands: the address or offset, and a label
3654which should immediately precede the jump table. If the macro
f1f5f142
JL
3655@code{CASE_VECTOR_PC_RELATIVE} evaluates to a nonzero value then the first
3656operand is an offset which counts from the address of the table; otherwise,
3657it is an absolute address to jump to. In either case, the first operand has
03dda8e3
RK
3658mode @code{Pmode}.
3659
3660The @samp{tablejump} insn is always the last insn before the jump
3661table it uses. Its assembler code normally has no need to use the
3662second operand, but you should incorporate it in the RTL pattern so
3663that the jump optimizer will not delete the table as unreachable code.
3664
6e4fcc95
MH
3665
3666@cindex @code{decrement_and_branch_until_zero} instruction pattern
3667@item @samp{decrement_and_branch_until_zero}
3668Conditional branch instruction that decrements a register and
df2a54e9 3669jumps if the register is nonzero. Operand 0 is the register to
6e4fcc95 3670decrement and test; operand 1 is the label to jump to if the
df2a54e9 3671register is nonzero. @xref{Looping Patterns}.
6e4fcc95
MH
3672
3673This optional instruction pattern is only used by the combiner,
3674typically for loops reversed by the loop optimizer when strength
3675reduction is enabled.
3676
3677@cindex @code{doloop_end} instruction pattern
3678@item @samp{doloop_end}
3679Conditional branch instruction that decrements a register and jumps if
df2a54e9 3680the register is nonzero. This instruction takes five operands: Operand
6e4fcc95
MH
36810 is the register to decrement and test; operand 1 is the number of loop
3682iterations as a @code{const_int} or @code{const0_rtx} if this cannot be
3683determined until run-time; operand 2 is the actual or estimated maximum
3684number of iterations as a @code{const_int}; operand 3 is the number of
3685enclosed loops as a @code{const_int} (an innermost loop has a value of
df2a54e9 36861); operand 4 is the label to jump to if the register is nonzero.
5c25e11d 3687@xref{Looping Patterns}.
6e4fcc95
MH
3688
3689This optional instruction pattern should be defined for machines with
3690low-overhead looping instructions as the loop optimizer will try to
3691modify suitable loops to utilize it. If nested low-overhead looping is
3692not supported, use a @code{define_expand} (@pxref{Expander Definitions})
3693and make the pattern fail if operand 3 is not @code{const1_rtx}.
3694Similarly, if the actual or estimated maximum number of iterations is
3695too large for this instruction, make it fail.
3696
3697@cindex @code{doloop_begin} instruction pattern
3698@item @samp{doloop_begin}
3699Companion instruction to @code{doloop_end} required for machines that
c21cd8b1
JM
3700need to perform some initialization, such as loading special registers
3701used by a low-overhead looping instruction. If initialization insns do
6e4fcc95
MH
3702not always need to be emitted, use a @code{define_expand}
3703(@pxref{Expander Definitions}) and make it fail.
3704
3705
03dda8e3
RK
3706@cindex @code{canonicalize_funcptr_for_compare} instruction pattern
3707@item @samp{canonicalize_funcptr_for_compare}
3708Canonicalize the function pointer in operand 1 and store the result
3709into operand 0.
3710
3711Operand 0 is always a @code{reg} and has mode @code{Pmode}; operand 1
3712may be a @code{reg}, @code{mem}, @code{symbol_ref}, @code{const_int}, etc
3713and also has mode @code{Pmode}.
3714
3715Canonicalization of a function pointer usually involves computing
3716the address of the function which would be called if the function
3717pointer were used in an indirect call.
3718
3719Only define this pattern if function pointers on the target machine
3720can have different values but still call the same function when
3721used in an indirect call.
3722
3723@cindex @code{save_stack_block} instruction pattern
3724@cindex @code{save_stack_function} instruction pattern
3725@cindex @code{save_stack_nonlocal} instruction pattern
3726@cindex @code{restore_stack_block} instruction pattern
3727@cindex @code{restore_stack_function} instruction pattern
3728@cindex @code{restore_stack_nonlocal} instruction pattern
3729@item @samp{save_stack_block}
3730@itemx @samp{save_stack_function}
3731@itemx @samp{save_stack_nonlocal}
3732@itemx @samp{restore_stack_block}
3733@itemx @samp{restore_stack_function}
3734@itemx @samp{restore_stack_nonlocal}
3735Most machines save and restore the stack pointer by copying it to or
3736from an object of mode @code{Pmode}. Do not define these patterns on
3737such machines.
3738
3739Some machines require special handling for stack pointer saves and
3740restores. On those machines, define the patterns corresponding to the
3741non-standard cases by using a @code{define_expand} (@pxref{Expander
3742Definitions}) that produces the required insns. The three types of
3743saves and restores are:
3744
3745@enumerate
3746@item
3747@samp{save_stack_block} saves the stack pointer at the start of a block
3748that allocates a variable-sized object, and @samp{restore_stack_block}
3749restores the stack pointer when the block is exited.
3750
3751@item
3752@samp{save_stack_function} and @samp{restore_stack_function} do a
3753similar job for the outermost block of a function and are used when the
3754function allocates variable-sized objects or calls @code{alloca}. Only
3755the epilogue uses the restored stack pointer, allowing a simpler save or
3756restore sequence on some machines.
3757
3758@item
3759@samp{save_stack_nonlocal} is used in functions that contain labels
3760branched to by nested functions. It saves the stack pointer in such a
3761way that the inner function can use @samp{restore_stack_nonlocal} to
3762restore the stack pointer. The compiler generates code to restore the
3763frame and argument pointer registers, but some machines require saving
3764and restoring additional data such as register window information or
3765stack backchains. Place insns in these patterns to save and restore any
3766such required data.
3767@end enumerate
3768
3769When saving the stack pointer, operand 0 is the save area and operand 1
73c8090f
DE
3770is the stack pointer. The mode used to allocate the save area defaults
3771to @code{Pmode} but you can override that choice by defining the
7e390c9d 3772@code{STACK_SAVEAREA_MODE} macro (@pxref{Storage Layout}). You must
73c8090f
DE
3773specify an integral mode, or @code{VOIDmode} if no save area is needed
3774for a particular type of save (either because no save is needed or
3775because a machine-specific save area can be used). Operand 0 is the
3776stack pointer and operand 1 is the save area for restore operations. If
3777@samp{save_stack_block} is defined, operand 0 must not be
3778@code{VOIDmode} since these saves can be arbitrarily nested.
03dda8e3
RK
3779
3780A save area is a @code{mem} that is at a constant offset from
3781@code{virtual_stack_vars_rtx} when the stack pointer is saved for use by
3782nonlocal gotos and a @code{reg} in the other two cases.
3783
3784@cindex @code{allocate_stack} instruction pattern
3785@item @samp{allocate_stack}
72938a4c 3786Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 1 from
03dda8e3
RK
3787the stack pointer to create space for dynamically allocated data.
3788
72938a4c
MM
3789Store the resultant pointer to this space into operand 0. If you
3790are allocating space from the main stack, do this by emitting a
3791move insn to copy @code{virtual_stack_dynamic_rtx} to operand 0.
3792If you are allocating the space elsewhere, generate code to copy the
3793location of the space to operand 0. In the latter case, you must
956d6950 3794ensure this space gets freed when the corresponding space on the main
72938a4c
MM
3795stack is free.
3796
03dda8e3
RK
3797Do not define this pattern if all that must be done is the subtraction.
3798Some machines require other operations such as stack probes or
3799maintaining the back chain. Define this pattern to emit those
3800operations in addition to updating the stack pointer.
3801
861bb6c1
JL
3802@cindex @code{check_stack} instruction pattern
3803@item @samp{check_stack}
3804If stack checking cannot be done on your system by probing the stack with
3805a load or store instruction (@pxref{Stack Checking}), define this pattern
3806to perform the needed check and signaling an error if the stack
3807has overflowed. The single operand is the location in the stack furthest
3808from the current stack pointer that you need to validate. Normally,
3809on machines where this pattern is needed, you would obtain the stack
3810limit from a global or thread-specific variable or register.
3811
03dda8e3
RK
3812@cindex @code{nonlocal_goto} instruction pattern
3813@item @samp{nonlocal_goto}
3814Emit code to generate a non-local goto, e.g., a jump from one function
3815to a label in an outer function. This pattern has four arguments,
3816each representing a value to be used in the jump. The first
45bb86fd 3817argument is to be loaded into the frame pointer, the second is
03dda8e3
RK
3818the address to branch to (code to dispatch to the actual label),
3819the third is the address of a location where the stack is saved,
3820and the last is the address of the label, to be placed in the
3821location for the incoming static chain.
3822
f0523f02 3823On most machines you need not define this pattern, since GCC will
03dda8e3
RK
3824already generate the correct code, which is to load the frame pointer
3825and static chain, restore the stack (using the
3826@samp{restore_stack_nonlocal} pattern, if defined), and jump indirectly
3827to the dispatcher. You need only define this pattern if this code will
3828not work on your machine.
3829
3830@cindex @code{nonlocal_goto_receiver} instruction pattern
3831@item @samp{nonlocal_goto_receiver}
3832This pattern, if defined, contains code needed at the target of a
161d7b59 3833nonlocal goto after the code already generated by GCC@. You will not
03dda8e3
RK
3834normally need to define this pattern. A typical reason why you might
3835need this pattern is if some value, such as a pointer to a global table,
c30ddbc9 3836must be restored when the frame pointer is restored. Note that a nonlocal
89bcce1b 3837goto only occurs within a unit-of-translation, so a global table pointer
c30ddbc9
RH
3838that is shared by all functions of a given module need not be restored.
3839There are no arguments.
861bb6c1
JL
3840
3841@cindex @code{exception_receiver} instruction pattern
3842@item @samp{exception_receiver}
3843This pattern, if defined, contains code needed at the site of an
3844exception handler that isn't needed at the site of a nonlocal goto. You
3845will not normally need to define this pattern. A typical reason why you
3846might need this pattern is if some value, such as a pointer to a global
3847table, must be restored after control flow is branched to the handler of
3848an exception. There are no arguments.
c85f7c16 3849
c30ddbc9
RH
3850@cindex @code{builtin_setjmp_setup} instruction pattern
3851@item @samp{builtin_setjmp_setup}
3852This pattern, if defined, contains additional code needed to initialize
3853the @code{jmp_buf}. You will not normally need to define this pattern.
3854A typical reason why you might need this pattern is if some value, such
3855as a pointer to a global table, must be restored. Though it is
3856preferred that the pointer value be recalculated if possible (given the
3857address of a label for instance). The single argument is a pointer to
3858the @code{jmp_buf}. Note that the buffer is five words long and that
3859the first three are normally used by the generic mechanism.
3860
c85f7c16
JL
3861@cindex @code{builtin_setjmp_receiver} instruction pattern
3862@item @samp{builtin_setjmp_receiver}
3863This pattern, if defined, contains code needed at the site of an
c771326b 3864built-in setjmp that isn't needed at the site of a nonlocal goto. You
c85f7c16
JL
3865will not normally need to define this pattern. A typical reason why you
3866might need this pattern is if some value, such as a pointer to a global
c30ddbc9
RH
3867table, must be restored. It takes one argument, which is the label
3868to which builtin_longjmp transfered control; this pattern may be emitted
3869at a small offset from that label.
3870
3871@cindex @code{builtin_longjmp} instruction pattern
3872@item @samp{builtin_longjmp}
3873This pattern, if defined, performs the entire action of the longjmp.
3874You will not normally need to define this pattern unless you also define
3875@code{builtin_setjmp_setup}. The single argument is a pointer to the
3876@code{jmp_buf}.
f69864aa 3877
52a11cbf
RH
3878@cindex @code{eh_return} instruction pattern
3879@item @samp{eh_return}
f69864aa 3880This pattern, if defined, affects the way @code{__builtin_eh_return},
52a11cbf
RH
3881and thence the call frame exception handling library routines, are
3882built. It is intended to handle non-trivial actions needed along
3883the abnormal return path.
3884
34dc173c 3885The address of the exception handler to which the function should return
daf2f129 3886is passed as operand to this pattern. It will normally need to copied by
34dc173c
UW
3887the pattern to some special register or memory location.
3888If the pattern needs to determine the location of the target call
3889frame in order to do so, it may use @code{EH_RETURN_STACKADJ_RTX},
3890if defined; it will have already been assigned.
3891
3892If this pattern is not defined, the default action will be to simply
3893copy the return address to @code{EH_RETURN_HANDLER_RTX}. Either
3894that macro or this pattern needs to be defined if call frame exception
3895handling is to be used.
0b433de6
JL
3896
3897@cindex @code{prologue} instruction pattern
17b53c33 3898@anchor{prologue instruction pattern}
0b433de6
JL
3899@item @samp{prologue}
3900This pattern, if defined, emits RTL for entry to a function. The function
b192711e 3901entry is responsible for setting up the stack frame, initializing the frame
0b433de6
JL
3902pointer register, saving callee saved registers, etc.
3903
3904Using a prologue pattern is generally preferred over defining
17b53c33 3905@code{TARGET_ASM_FUNCTION_PROLOGUE} to emit assembly code for the prologue.
0b433de6
JL
3906
3907The @code{prologue} pattern is particularly useful for targets which perform
3908instruction scheduling.
3909
3910@cindex @code{epilogue} instruction pattern
17b53c33 3911@anchor{epilogue instruction pattern}
0b433de6 3912@item @samp{epilogue}
396ad517 3913This pattern emits RTL for exit from a function. The function
b192711e 3914exit is responsible for deallocating the stack frame, restoring callee saved
0b433de6
JL
3915registers and emitting the return instruction.
3916
3917Using an epilogue pattern is generally preferred over defining
17b53c33 3918@code{TARGET_ASM_FUNCTION_EPILOGUE} to emit assembly code for the epilogue.
0b433de6
JL
3919
3920The @code{epilogue} pattern is particularly useful for targets which perform
3921instruction scheduling or which have delay slots for their return instruction.
3922
3923@cindex @code{sibcall_epilogue} instruction pattern
3924@item @samp{sibcall_epilogue}
3925This pattern, if defined, emits RTL for exit from a function without the final
3926branch back to the calling function. This pattern will be emitted before any
3927sibling call (aka tail call) sites.
3928
3929The @code{sibcall_epilogue} pattern must not clobber any arguments used for
3930parameter passing or any stack slots for arguments passed to the current
ebb48a4d 3931function.
a157febd
GK
3932
3933@cindex @code{trap} instruction pattern
3934@item @samp{trap}
3935This pattern, if defined, signals an error, typically by causing some
3936kind of signal to be raised. Among other places, it is used by the Java
c771326b 3937front end to signal `invalid array index' exceptions.
a157febd
GK
3938
3939@cindex @code{conditional_trap} instruction pattern
3940@item @samp{conditional_trap}
3941Conditional trap instruction. Operand 0 is a piece of RTL which
3942performs a comparison. Operand 1 is the trap code, an integer.
3943
3944A typical @code{conditional_trap} pattern looks like
3945
3946@smallexample
3947(define_insn "conditional_trap"
ebb48a4d 3948 [(trap_if (match_operator 0 "trap_operator"
a157febd
GK
3949 [(cc0) (const_int 0)])
3950 (match_operand 1 "const_int_operand" "i"))]
3951 ""
3952 "@dots{}")
3953@end smallexample
3954
e83d297b
JJ
3955@cindex @code{prefetch} instruction pattern
3956@item @samp{prefetch}
3957
3958This pattern, if defined, emits code for a non-faulting data prefetch
3959instruction. Operand 0 is the address of the memory to prefetch. Operand 1
3960is a constant 1 if the prefetch is preparing for a write to the memory
3961address, or a constant 0 otherwise. Operand 2 is the expected degree of
3962temporal locality of the data and is a value between 0 and 3, inclusive; 0
3963means that the data has no temporal locality, so it need not be left in the
3964cache after the access; 3 means that the data has a high degree of temporal
3965locality and should be left in all levels of cache possible; 1 and 2 mean,
3966respectively, a low or moderate degree of temporal locality.
3967
3968Targets that do not support write prefetches or locality hints can ignore
3969the values of operands 1 and 2.
3970
48ae6c13
RH
3971@cindex @code{memory_barrier} instruction pattern
3972@item @samp{memory_barrier}
3973
3974If the target memory model is not fully synchronous, then this pattern
3975should be defined to an instruction that orders both loads and stores
3976before the instruction with respect to loads and stores after the instruction.
3977This pattern has no operands.
3978
3979@cindex @code{sync_compare_and_swap@var{mode}} instruction pattern
3980@item @samp{sync_compare_and_swap@var{mode}}
3981
3982This pattern, if defined, emits code for an atomic compare-and-swap
3983operation. Operand 1 is the memory on which the atomic operation is
3984performed. Operand 2 is the ``old'' value to be compared against the
3985current contents of the memory location. Operand 3 is the ``new'' value
3986to store in the memory if the compare succeeds. Operand 0 is the result
915167f5
GK
3987of the operation; it should contain the contents of the memory
3988before the operation. If the compare succeeds, this should obviously be
3989a copy of operand 2.
48ae6c13
RH
3990
3991This pattern must show that both operand 0 and operand 1 are modified.
3992
915167f5
GK
3993This pattern must issue any memory barrier instructions such that all
3994memory operations before the atomic operation occur before the atomic
3995operation and all memory operations after the atomic operation occur
3996after the atomic operation.
48ae6c13
RH
3997
3998@cindex @code{sync_compare_and_swap_cc@var{mode}} instruction pattern
3999@item @samp{sync_compare_and_swap_cc@var{mode}}
4000
4001This pattern is just like @code{sync_compare_and_swap@var{mode}}, except
4002it should act as if compare part of the compare-and-swap were issued via
4003@code{cmp@var{m}}. This comparison will only be used with @code{EQ} and
4004@code{NE} branches and @code{setcc} operations.
4005
4006Some targets do expose the success or failure of the compare-and-swap
4007operation via the status flags. Ideally we wouldn't need a separate
4008named pattern in order to take advantage of this, but the combine pass
4009does not handle patterns with multiple sets, which is required by
4010definition for @code{sync_compare_and_swap@var{mode}}.
4011
4012@cindex @code{sync_add@var{mode}} instruction pattern
4013@cindex @code{sync_sub@var{mode}} instruction pattern
4014@cindex @code{sync_ior@var{mode}} instruction pattern
4015@cindex @code{sync_and@var{mode}} instruction pattern
4016@cindex @code{sync_xor@var{mode}} instruction pattern
4017@cindex @code{sync_nand@var{mode}} instruction pattern
4018@item @samp{sync_add@var{mode}}, @samp{sync_sub@var{mode}}
4019@itemx @samp{sync_ior@var{mode}}, @samp{sync_and@var{mode}}
4020@itemx @samp{sync_xor@var{mode}}, @samp{sync_nand@var{mode}}
4021
4022These patterns emit code for an atomic operation on memory.
4023Operand 0 is the memory on which the atomic operation is performed.
4024Operand 1 is the second operand to the binary operator.
4025
4026The ``nand'' operation is @code{op0 & ~op1}.
4027
915167f5
GK
4028This pattern must issue any memory barrier instructions such that all
4029memory operations before the atomic operation occur before the atomic
4030operation and all memory operations after the atomic operation occur
4031after the atomic operation.
48ae6c13
RH
4032
4033If these patterns are not defined, the operation will be constructed
4034from a compare-and-swap operation, if defined.
4035
4036@cindex @code{sync_old_add@var{mode}} instruction pattern
4037@cindex @code{sync_old_sub@var{mode}} instruction pattern
4038@cindex @code{sync_old_ior@var{mode}} instruction pattern
4039@cindex @code{sync_old_and@var{mode}} instruction pattern
4040@cindex @code{sync_old_xor@var{mode}} instruction pattern
4041@cindex @code{sync_old_nand@var{mode}} instruction pattern
4042@item @samp{sync_old_add@var{mode}}, @samp{sync_old_sub@var{mode}}
4043@itemx @samp{sync_old_ior@var{mode}}, @samp{sync_old_and@var{mode}}
4044@itemx @samp{sync_old_xor@var{mode}}, @samp{sync_old_nand@var{mode}}
4045
4046These patterns are emit code for an atomic operation on memory,
4047and return the value that the memory contained before the operation.
4048Operand 0 is the result value, operand 1 is the memory on which the
4049atomic operation is performed, and operand 2 is the second operand
4050to the binary operator.
4051
915167f5
GK
4052This pattern must issue any memory barrier instructions such that all
4053memory operations before the atomic operation occur before the atomic
4054operation and all memory operations after the atomic operation occur
4055after the atomic operation.
48ae6c13
RH
4056
4057If these patterns are not defined, the operation will be constructed
4058from a compare-and-swap operation, if defined.
4059
4060@cindex @code{sync_new_add@var{mode}} instruction pattern
4061@cindex @code{sync_new_sub@var{mode}} instruction pattern
4062@cindex @code{sync_new_ior@var{mode}} instruction pattern
4063@cindex @code{sync_new_and@var{mode}} instruction pattern
4064@cindex @code{sync_new_xor@var{mode}} instruction pattern
4065@cindex @code{sync_new_nand@var{mode}} instruction pattern
4066@item @samp{sync_new_add@var{mode}}, @samp{sync_new_sub@var{mode}}
4067@itemx @samp{sync_new_ior@var{mode}}, @samp{sync_new_and@var{mode}}
4068@itemx @samp{sync_new_xor@var{mode}}, @samp{sync_new_nand@var{mode}}
4069
4070These patterns are like their @code{sync_old_@var{op}} counterparts,
4071except that they return the value that exists in the memory location
4072after the operation, rather than before the operation.
4073
4074@cindex @code{sync_lock_test_and_set@var{mode}} instruction pattern
4075@item @samp{sync_lock_test_and_set@var{mode}}
4076
4077This pattern takes two forms, based on the capabilities of the target.
4078In either case, operand 0 is the result of the operand, operand 1 is
4079the memory on which the atomic operation is performed, and operand 2
4080is the value to set in the lock.
4081
4082In the ideal case, this operation is an atomic exchange operation, in
4083which the previous value in memory operand is copied into the result
4084operand, and the value operand is stored in the memory operand.
4085
4086For less capable targets, any value operand that is not the constant 1
4087should be rejected with @code{FAIL}. In this case the target may use
4088an atomic test-and-set bit operation. The result operand should contain
40891 if the bit was previously set and 0 if the bit was previously clear.
4090The true contents of the memory operand are implementation defined.
4091
4092This pattern must issue any memory barrier instructions such that the
915167f5
GK
4093pattern as a whole acts as an acquire barrier, that is all memory
4094operations after the pattern do not occur until the lock is acquired.
48ae6c13
RH
4095
4096If this pattern is not defined, the operation will be constructed from
4097a compare-and-swap operation, if defined.
4098
4099@cindex @code{sync_lock_release@var{mode}} instruction pattern
4100@item @samp{sync_lock_release@var{mode}}
4101
4102This pattern, if defined, releases a lock set by
4103@code{sync_lock_test_and_set@var{mode}}. Operand 0 is the memory
8635a919
GK
4104that contains the lock; operand 1 is the value to store in the lock.
4105
4106If the target doesn't implement full semantics for
4107@code{sync_lock_test_and_set@var{mode}}, any value operand which is not
4108the constant 0 should be rejected with @code{FAIL}, and the true contents
4109of the memory operand are implementation defined.
48ae6c13
RH
4110
4111This pattern must issue any memory barrier instructions such that the
915167f5
GK
4112pattern as a whole acts as a release barrier, that is the lock is
4113released only after all previous memory operations have completed.
48ae6c13
RH
4114
4115If this pattern is not defined, then a @code{memory_barrier} pattern
8635a919 4116will be emitted, followed by a store of the value to the memory operand.
48ae6c13 4117
7d69de61
RH
4118@cindex @code{stack_protect_set} instruction pattern
4119@item @samp{stack_protect_set}
4120
4121This pattern, if defined, moves a @code{Pmode} value from the memory
4122in operand 1 to the memory in operand 0 without leaving the value in
4123a register afterward. This is to avoid leaking the value some place
4124that an attacker might use to rewrite the stack guard slot after
4125having clobbered it.
4126
4127If this pattern is not defined, then a plain move pattern is generated.
4128
4129@cindex @code{stack_protect_test} instruction pattern
4130@item @samp{stack_protect_test}
4131
4132This pattern, if defined, compares a @code{Pmode} value from the
4133memory in operand 1 with the memory in operand 0 without leaving the
3aebbe5f
JJ
4134value in a register afterward and branches to operand 2 if the values
4135weren't equal.
7d69de61 4136
3aebbe5f
JJ
4137If this pattern is not defined, then a plain compare pattern and
4138conditional branch pattern is used.
7d69de61 4139
03dda8e3
RK
4140@end table
4141
a5249a21
HPN
4142@end ifset
4143@c Each of the following nodes are wrapped in separate
4144@c "@ifset INTERNALS" to work around memory limits for the default
4145@c configuration in older tetex distributions. Known to not work:
4146@c tetex-1.0.7, known to work: tetex-2.0.2.
4147@ifset INTERNALS
03dda8e3
RK
4148@node Pattern Ordering
4149@section When the Order of Patterns Matters
4150@cindex Pattern Ordering
4151@cindex Ordering of Patterns
4152
4153Sometimes an insn can match more than one instruction pattern. Then the
4154pattern that appears first in the machine description is the one used.
4155Therefore, more specific patterns (patterns that will match fewer things)
4156and faster instructions (those that will produce better code when they
4157do match) should usually go first in the description.
4158
4159In some cases the effect of ordering the patterns can be used to hide
4160a pattern when it is not valid. For example, the 68000 has an
4161instruction for converting a fullword to floating point and another
4162for converting a byte to floating point. An instruction converting
4163an integer to floating point could match either one. We put the
4164pattern to convert the fullword first to make sure that one will
4165be used rather than the other. (Otherwise a large integer might
4166be generated as a single-byte immediate quantity, which would not work.)
4167Instead of using this pattern ordering it would be possible to make the
4168pattern for convert-a-byte smart enough to deal properly with any
4169constant value.
4170
a5249a21
HPN
4171@end ifset
4172@ifset INTERNALS
03dda8e3
RK
4173@node Dependent Patterns
4174@section Interdependence of Patterns
4175@cindex Dependent Patterns
4176@cindex Interdependence of Patterns
4177
4178Every machine description must have a named pattern for each of the
4179conditional branch names @samp{b@var{cond}}. The recognition template
4180must always have the form
4181
3ab51846 4182@smallexample
03dda8e3
RK
4183(set (pc)
4184 (if_then_else (@var{cond} (cc0) (const_int 0))
4185 (label_ref (match_operand 0 "" ""))
4186 (pc)))
3ab51846 4187@end smallexample
03dda8e3
RK
4188
4189@noindent
4190In addition, every machine description must have an anonymous pattern
4191for each of the possible reverse-conditional branches. Their templates
4192look like
4193
3ab51846 4194@smallexample
03dda8e3
RK
4195(set (pc)
4196 (if_then_else (@var{cond} (cc0) (const_int 0))
4197 (pc)
4198 (label_ref (match_operand 0 "" ""))))
3ab51846 4199@end smallexample
03dda8e3
RK
4200
4201@noindent
4202They are necessary because jump optimization can turn direct-conditional
4203branches into reverse-conditional branches.
4204
4205It is often convenient to use the @code{match_operator} construct to
4206reduce the number of patterns that must be specified for branches. For
4207example,
4208
3ab51846 4209@smallexample
03dda8e3
RK
4210(define_insn ""
4211 [(set (pc)
4212 (if_then_else (match_operator 0 "comparison_operator"
4213 [(cc0) (const_int 0)])
4214 (pc)
4215 (label_ref (match_operand 1 "" ""))))]
4216 "@var{condition}"
4217 "@dots{}")
3ab51846 4218@end smallexample
03dda8e3
RK
4219
4220In some cases machines support instructions identical except for the
4221machine mode of one or more operands. For example, there may be
4222``sign-extend halfword'' and ``sign-extend byte'' instructions whose
4223patterns are
4224
3ab51846 4225@smallexample
03dda8e3
RK
4226(set (match_operand:SI 0 @dots{})
4227 (extend:SI (match_operand:HI 1 @dots{})))
4228
4229(set (match_operand:SI 0 @dots{})
4230 (extend:SI (match_operand:QI 1 @dots{})))
3ab51846 4231@end smallexample
03dda8e3
RK
4232
4233@noindent
4234Constant integers do not specify a machine mode, so an instruction to
4235extend a constant value could match either pattern. The pattern it
4236actually will match is the one that appears first in the file. For correct
4237results, this must be the one for the widest possible mode (@code{HImode},
4238here). If the pattern matches the @code{QImode} instruction, the results
4239will be incorrect if the constant value does not actually fit that mode.
4240
4241Such instructions to extend constants are rarely generated because they are
4242optimized away, but they do occasionally happen in nonoptimized
4243compilations.
4244
4245If a constraint in a pattern allows a constant, the reload pass may
4246replace a register with a constant permitted by the constraint in some
4247cases. Similarly for memory references. Because of this substitution,
4248you should not provide separate patterns for increment and decrement
4249instructions. Instead, they should be generated from the same pattern
4250that supports register-register add insns by examining the operands and
4251generating the appropriate machine instruction.
4252
a5249a21
HPN
4253@end ifset
4254@ifset INTERNALS
03dda8e3
RK
4255@node Jump Patterns
4256@section Defining Jump Instruction Patterns
4257@cindex jump instruction patterns
4258@cindex defining jump instruction patterns
4259
f0523f02 4260For most machines, GCC assumes that the machine has a condition code.
03dda8e3
RK
4261A comparison insn sets the condition code, recording the results of both
4262signed and unsigned comparison of the given operands. A separate branch
4263insn tests the condition code and branches or not according its value.
4264The branch insns come in distinct signed and unsigned flavors. Many
8aeea6e6 4265common machines, such as the VAX, the 68000 and the 32000, work this
03dda8e3
RK
4266way.
4267
4268Some machines have distinct signed and unsigned compare instructions, and
4269only one set of conditional branch instructions. The easiest way to handle
4270these machines is to treat them just like the others until the final stage
4271where assembly code is written. At this time, when outputting code for the
4272compare instruction, peek ahead at the following branch using
4273@code{next_cc0_user (insn)}. (The variable @code{insn} refers to the insn
4274being output, in the output-writing code in an instruction pattern.) If
4275the RTL says that is an unsigned branch, output an unsigned compare;
4276otherwise output a signed compare. When the branch itself is output, you
4277can treat signed and unsigned branches identically.
4278
f0523f02 4279The reason you can do this is that GCC always generates a pair of
03dda8e3
RK
4280consecutive RTL insns, possibly separated by @code{note} insns, one to
4281set the condition code and one to test it, and keeps the pair inviolate
4282until the end.
4283
4284To go with this technique, you must define the machine-description macro
4285@code{NOTICE_UPDATE_CC} to do @code{CC_STATUS_INIT}; in other words, no
4286compare instruction is superfluous.
4287
4288Some machines have compare-and-branch instructions and no condition code.
4289A similar technique works for them. When it is time to ``output'' a
4290compare instruction, record its operands in two static variables. When
4291outputting the branch-on-condition-code instruction that follows, actually
4292output a compare-and-branch instruction that uses the remembered operands.
4293
4294It also works to define patterns for compare-and-branch instructions.
4295In optimizing compilation, the pair of compare and branch instructions
4296will be combined according to these patterns. But this does not happen
4297if optimization is not requested. So you must use one of the solutions
4298above in addition to any special patterns you define.
4299
4300In many RISC machines, most instructions do not affect the condition
4301code and there may not even be a separate condition code register. On
4302these machines, the restriction that the definition and use of the
4303condition code be adjacent insns is not necessary and can prevent
4304important optimizations. For example, on the IBM RS/6000, there is a
4305delay for taken branches unless the condition code register is set three
4306instructions earlier than the conditional branch. The instruction
4307scheduler cannot perform this optimization if it is not permitted to
4308separate the definition and use of the condition code register.
4309
4310On these machines, do not use @code{(cc0)}, but instead use a register
4311to represent the condition code. If there is a specific condition code
4312register in the machine, use a hard register. If the condition code or
4313comparison result can be placed in any general register, or if there are
4314multiple condition registers, use a pseudo register.
4315
4316@findex prev_cc0_setter
4317@findex next_cc0_user
4318On some machines, the type of branch instruction generated may depend on
4319the way the condition code was produced; for example, on the 68k and
981f6289 4320SPARC, setting the condition code directly from an add or subtract
03dda8e3
RK
4321instruction does not clear the overflow bit the way that a test
4322instruction does, so a different branch instruction must be used for
4323some conditional branches. For machines that use @code{(cc0)}, the set
4324and use of the condition code must be adjacent (separated only by
4325@code{note} insns) allowing flags in @code{cc_status} to be used.
4326(@xref{Condition Code}.) Also, the comparison and branch insns can be
4327located from each other by using the functions @code{prev_cc0_setter}
4328and @code{next_cc0_user}.
4329
4330However, this is not true on machines that do not use @code{(cc0)}. On
4331those machines, no assumptions can be made about the adjacency of the
4332compare and branch insns and the above methods cannot be used. Instead,
4333we use the machine mode of the condition code register to record
4334different formats of the condition code register.
4335
4336Registers used to store the condition code value should have a mode that
4337is in class @code{MODE_CC}. Normally, it will be @code{CCmode}. If
4338additional modes are required (as for the add example mentioned above in
f1c9d07d
EC
4339the SPARC), define them in @file{@var{machine}-modes.def}
4340(@pxref{Condition Code}). Also define @code{SELECT_CC_MODE} to choose
4341a mode given an operand of a compare.
03dda8e3
RK
4342
4343If it is known during RTL generation that a different mode will be
4344required (for example, if the machine has separate compare instructions
4345for signed and unsigned quantities, like most IBM processors), they can
4346be specified at that time.
4347
4348If the cases that require different modes would be made by instruction
4349combination, the macro @code{SELECT_CC_MODE} determines which machine
4350mode should be used for the comparison result. The patterns should be
981f6289 4351written using that mode. To support the case of the add on the SPARC
03dda8e3
RK
4352discussed above, we have the pattern
4353
4354@smallexample
4355(define_insn ""
4356 [(set (reg:CC_NOOV 0)
4357 (compare:CC_NOOV
4358 (plus:SI (match_operand:SI 0 "register_operand" "%r")
4359 (match_operand:SI 1 "arith_operand" "rI"))
4360 (const_int 0)))]
4361 ""
4362 "@dots{}")
4363@end smallexample
4364
981f6289 4365The @code{SELECT_CC_MODE} macro on the SPARC returns @code{CC_NOOVmode}
03dda8e3
RK
4366for comparisons whose argument is a @code{plus}.
4367
a5249a21
HPN
4368@end ifset
4369@ifset INTERNALS
6e4fcc95
MH
4370@node Looping Patterns
4371@section Defining Looping Instruction Patterns
4372@cindex looping instruction patterns
4373@cindex defining looping instruction patterns
4374
05713b80 4375Some machines have special jump instructions that can be utilized to
6e4fcc95
MH
4376make loops more efficient. A common example is the 68000 @samp{dbra}
4377instruction which performs a decrement of a register and a branch if the
4378result was greater than zero. Other machines, in particular digital
4379signal processors (DSPs), have special block repeat instructions to
4380provide low-overhead loop support. For example, the TI TMS320C3x/C4x
4381DSPs have a block repeat instruction that loads special registers to
4382mark the top and end of a loop and to count the number of loop
4383iterations. This avoids the need for fetching and executing a
c771326b 4384@samp{dbra}-like instruction and avoids pipeline stalls associated with
6e4fcc95
MH
4385the jump.
4386
9c34dbbf
ZW
4387GCC has three special named patterns to support low overhead looping.
4388They are @samp{decrement_and_branch_until_zero}, @samp{doloop_begin},
4389and @samp{doloop_end}. The first pattern,
6e4fcc95
MH
4390@samp{decrement_and_branch_until_zero}, is not emitted during RTL
4391generation but may be emitted during the instruction combination phase.
4392This requires the assistance of the loop optimizer, using information
4393collected during strength reduction, to reverse a loop to count down to
4394zero. Some targets also require the loop optimizer to add a
4395@code{REG_NONNEG} note to indicate that the iteration count is always
4396positive. This is needed if the target performs a signed loop
4397termination test. For example, the 68000 uses a pattern similar to the
4398following for its @code{dbra} instruction:
4399
4400@smallexample
4401@group
4402(define_insn "decrement_and_branch_until_zero"
4403 [(set (pc)
4404 (if_then_else
4405 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
4406 (const_int -1))
4407 (const_int 0))
4408 (label_ref (match_operand 1 "" ""))
4409 (pc)))
4410 (set (match_dup 0)
4411 (plus:SI (match_dup 0)
4412 (const_int -1)))]
4413 "find_reg_note (insn, REG_NONNEG, 0)"
630d3d5a 4414 "@dots{}")
6e4fcc95
MH
4415@end group
4416@end smallexample
4417
4418Note that since the insn is both a jump insn and has an output, it must
4419deal with its own reloads, hence the `m' constraints. Also note that
4420since this insn is generated by the instruction combination phase
4421combining two sequential insns together into an implicit parallel insn,
4422the iteration counter needs to be biased by the same amount as the
630d3d5a 4423decrement operation, in this case @minus{}1. Note that the following similar
6e4fcc95
MH
4424pattern will not be matched by the combiner.
4425
4426@smallexample
4427@group
4428(define_insn "decrement_and_branch_until_zero"
4429 [(set (pc)
4430 (if_then_else
4431 (ge (match_operand:SI 0 "general_operand" "+d*am")
4432 (const_int 1))
4433 (label_ref (match_operand 1 "" ""))
4434 (pc)))
4435 (set (match_dup 0)
4436 (plus:SI (match_dup 0)
4437 (const_int -1)))]
4438 "find_reg_note (insn, REG_NONNEG, 0)"
630d3d5a 4439 "@dots{}")
6e4fcc95
MH
4440@end group
4441@end smallexample
4442
4443The other two special looping patterns, @samp{doloop_begin} and
c21cd8b1 4444@samp{doloop_end}, are emitted by the loop optimizer for certain
6e4fcc95 4445well-behaved loops with a finite number of loop iterations using
ebb48a4d 4446information collected during strength reduction.
6e4fcc95
MH
4447
4448The @samp{doloop_end} pattern describes the actual looping instruction
4449(or the implicit looping operation) and the @samp{doloop_begin} pattern
c21cd8b1 4450is an optional companion pattern that can be used for initialization
6e4fcc95
MH
4451needed for some low-overhead looping instructions.
4452
4453Note that some machines require the actual looping instruction to be
4454emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting
4455the true RTL for a looping instruction at the top of the loop can cause
4456problems with flow analysis. So instead, a dummy @code{doloop} insn is
4457emitted at the end of the loop. The machine dependent reorg pass checks
4458for the presence of this @code{doloop} insn and then searches back to
4459the top of the loop, where it inserts the true looping insn (provided
4460there are no instructions in the loop which would cause problems). Any
4461additional labels can be emitted at this point. In addition, if the
4462desired special iteration counter register was not allocated, this
4463machine dependent reorg pass could emit a traditional compare and jump
4464instruction pair.
4465
4466The essential difference between the
4467@samp{decrement_and_branch_until_zero} and the @samp{doloop_end}
4468patterns is that the loop optimizer allocates an additional pseudo
4469register for the latter as an iteration counter. This pseudo register
4470cannot be used within the loop (i.e., general induction variables cannot
4471be derived from it), however, in many cases the loop induction variable
4472may become redundant and removed by the flow pass.
4473
4474
a5249a21
HPN
4475@end ifset
4476@ifset INTERNALS
03dda8e3
RK
4477@node Insn Canonicalizations
4478@section Canonicalization of Instructions
4479@cindex canonicalization of instructions
4480@cindex insn canonicalization
4481
4482There are often cases where multiple RTL expressions could represent an
4483operation performed by a single machine instruction. This situation is
4484most commonly encountered with logical, branch, and multiply-accumulate
4485instructions. In such cases, the compiler attempts to convert these
4486multiple RTL expressions into a single canonical form to reduce the
4487number of insn patterns required.
4488
4489In addition to algebraic simplifications, following canonicalizations
4490are performed:
4491
4492@itemize @bullet
4493@item
4494For commutative and comparison operators, a constant is always made the
4495second operand. If a machine only supports a constant as the second
4496operand, only patterns that match a constant in the second operand need
4497be supplied.
4498
e3d6e740
GK
4499@item
4500For associative operators, a sequence of operators will always chain
4501to the left; for instance, only the left operand of an integer @code{plus}
4502can itself be a @code{plus}. @code{and}, @code{ior}, @code{xor},
4503@code{plus}, @code{mult}, @code{smin}, @code{smax}, @code{umin}, and
4504@code{umax} are associative when applied to integers, and sometimes to
4505floating-point.
4506
4507@item
03dda8e3
RK
4508@cindex @code{neg}, canonicalization of
4509@cindex @code{not}, canonicalization of
4510@cindex @code{mult}, canonicalization of
4511@cindex @code{plus}, canonicalization of
4512@cindex @code{minus}, canonicalization of
4513For these operators, if only one operand is a @code{neg}, @code{not},
4514@code{mult}, @code{plus}, or @code{minus} expression, it will be the
4515first operand.
4516
16823694
GK
4517@item
4518In combinations of @code{neg}, @code{mult}, @code{plus}, and
4519@code{minus}, the @code{neg} operations (if any) will be moved inside
daf2f129 4520the operations as far as possible. For instance,
16823694
GK
4521@code{(neg (mult A B))} is canonicalized as @code{(mult (neg A) B)}, but
4522@code{(plus (mult (neg A) B) C)} is canonicalized as
4523@code{(minus A (mult B C))}.
4524
03dda8e3
RK
4525@cindex @code{compare}, canonicalization of
4526@item
4527For the @code{compare} operator, a constant is always the second operand
4528on machines where @code{cc0} is used (@pxref{Jump Patterns}). On other
4529machines, there are rare cases where the compiler might want to construct
4530a @code{compare} with a constant as the first operand. However, these
4531cases are not common enough for it to be worthwhile to provide a pattern
4532matching a constant as the first operand unless the machine actually has
4533such an instruction.
4534
4535An operand of @code{neg}, @code{not}, @code{mult}, @code{plus}, or
4536@code{minus} is made the first operand under the same conditions as
4537above.
4538
4539@item
4540@code{(minus @var{x} (const_int @var{n}))} is converted to
4541@code{(plus @var{x} (const_int @var{-n}))}.
4542
4543@item
4544Within address computations (i.e., inside @code{mem}), a left shift is
4545converted into the appropriate multiplication by a power of two.
4546
4547@cindex @code{ior}, canonicalization of
4548@cindex @code{and}, canonicalization of
4549@cindex De Morgan's law
72938a4c 4550@item
090359d6 4551De Morgan's Law is used to move bitwise negation inside a bitwise
03dda8e3
RK
4552logical-and or logical-or operation. If this results in only one
4553operand being a @code{not} expression, it will be the first one.
4554
4555A machine that has an instruction that performs a bitwise logical-and of one
4556operand with the bitwise negation of the other should specify the pattern
4557for that instruction as
4558
3ab51846 4559@smallexample
03dda8e3
RK
4560(define_insn ""
4561 [(set (match_operand:@var{m} 0 @dots{})
4562 (and:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
4563 (match_operand:@var{m} 2 @dots{})))]
4564 "@dots{}"
4565 "@dots{}")
3ab51846 4566@end smallexample
03dda8e3
RK
4567
4568@noindent
4569Similarly, a pattern for a ``NAND'' instruction should be written
4570
3ab51846 4571@smallexample
03dda8e3
RK
4572(define_insn ""
4573 [(set (match_operand:@var{m} 0 @dots{})
4574 (ior:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
4575 (not:@var{m} (match_operand:@var{m} 2 @dots{}))))]
4576 "@dots{}"
4577 "@dots{}")
3ab51846 4578@end smallexample
03dda8e3
RK
4579
4580In both cases, it is not necessary to include patterns for the many
4581logically equivalent RTL expressions.
4582
4583@cindex @code{xor}, canonicalization of
4584@item
4585The only possible RTL expressions involving both bitwise exclusive-or
4586and bitwise negation are @code{(xor:@var{m} @var{x} @var{y})}
bd819a4a 4587and @code{(not:@var{m} (xor:@var{m} @var{x} @var{y}))}.
03dda8e3
RK
4588
4589@item
4590The sum of three items, one of which is a constant, will only appear in
4591the form
4592
3ab51846 4593@smallexample
03dda8e3 4594(plus:@var{m} (plus:@var{m} @var{x} @var{y}) @var{constant})
3ab51846 4595@end smallexample
03dda8e3
RK
4596
4597@item
4598On machines that do not use @code{cc0},
4599@code{(compare @var{x} (const_int 0))} will be converted to
bd819a4a 4600@var{x}.
03dda8e3
RK
4601
4602@cindex @code{zero_extract}, canonicalization of
4603@cindex @code{sign_extract}, canonicalization of
4604@item
4605Equality comparisons of a group of bits (usually a single bit) with zero
4606will be written using @code{zero_extract} rather than the equivalent
4607@code{and} or @code{sign_extract} operations.
4608
4609@end itemize
4610
a5249a21
HPN
4611@end ifset
4612@ifset INTERNALS
03dda8e3
RK
4613@node Expander Definitions
4614@section Defining RTL Sequences for Code Generation
4615@cindex expander definitions
4616@cindex code generation RTL sequences
4617@cindex defining RTL sequences for code generation
4618
4619On some target machines, some standard pattern names for RTL generation
4620cannot be handled with single insn, but a sequence of RTL insns can
4621represent them. For these target machines, you can write a
161d7b59 4622@code{define_expand} to specify how to generate the sequence of RTL@.
03dda8e3
RK
4623
4624@findex define_expand
4625A @code{define_expand} is an RTL expression that looks almost like a
4626@code{define_insn}; but, unlike the latter, a @code{define_expand} is used
4627only for RTL generation and it can produce more than one RTL insn.
4628
4629A @code{define_expand} RTX has four operands:
4630
4631@itemize @bullet
4632@item
4633The name. Each @code{define_expand} must have a name, since the only
4634use for it is to refer to it by name.
4635
03dda8e3 4636@item
f3a3d0d3
RH
4637The RTL template. This is a vector of RTL expressions representing
4638a sequence of separate instructions. Unlike @code{define_insn}, there
4639is no implicit surrounding @code{PARALLEL}.
03dda8e3
RK
4640
4641@item
4642The condition, a string containing a C expression. This expression is
4643used to express how the availability of this pattern depends on
f0523f02
JM
4644subclasses of target machine, selected by command-line options when GCC
4645is run. This is just like the condition of a @code{define_insn} that
03dda8e3
RK
4646has a standard name. Therefore, the condition (if present) may not
4647depend on the data in the insn being matched, but only the
4648target-machine-type flags. The compiler needs to test these conditions
4649during initialization in order to learn exactly which named instructions
4650are available in a particular run.
4651
4652@item
4653The preparation statements, a string containing zero or more C
4654statements which are to be executed before RTL code is generated from
4655the RTL template.
4656
4657Usually these statements prepare temporary registers for use as
4658internal operands in the RTL template, but they can also generate RTL
4659insns directly by calling routines such as @code{emit_insn}, etc.
4660Any such insns precede the ones that come from the RTL template.
4661@end itemize
4662
4663Every RTL insn emitted by a @code{define_expand} must match some
4664@code{define_insn} in the machine description. Otherwise, the compiler
4665will crash when trying to generate code for the insn or trying to optimize
4666it.
4667
4668The RTL template, in addition to controlling generation of RTL insns,
4669also describes the operands that need to be specified when this pattern
4670is used. In particular, it gives a predicate for each operand.
4671
4672A true operand, which needs to be specified in order to generate RTL from
4673the pattern, should be described with a @code{match_operand} in its first
4674occurrence in the RTL template. This enters information on the operand's
f0523f02 4675predicate into the tables that record such things. GCC uses the
03dda8e3
RK
4676information to preload the operand into a register if that is required for
4677valid RTL code. If the operand is referred to more than once, subsequent
4678references should use @code{match_dup}.
4679
4680The RTL template may also refer to internal ``operands'' which are
4681temporary registers or labels used only within the sequence made by the
4682@code{define_expand}. Internal operands are substituted into the RTL
4683template with @code{match_dup}, never with @code{match_operand}. The
4684values of the internal operands are not passed in as arguments by the
4685compiler when it requests use of this pattern. Instead, they are computed
4686within the pattern, in the preparation statements. These statements
4687compute the values and store them into the appropriate elements of
4688@code{operands} so that @code{match_dup} can find them.
4689
4690There are two special macros defined for use in the preparation statements:
4691@code{DONE} and @code{FAIL}. Use them with a following semicolon,
4692as a statement.
4693
4694@table @code
4695
4696@findex DONE
4697@item DONE
4698Use the @code{DONE} macro to end RTL generation for the pattern. The
4699only RTL insns resulting from the pattern on this occasion will be
4700those already emitted by explicit calls to @code{emit_insn} within the
4701preparation statements; the RTL template will not be generated.
4702
4703@findex FAIL
4704@item FAIL
4705Make the pattern fail on this occasion. When a pattern fails, it means
4706that the pattern was not truly available. The calling routines in the
4707compiler will try other strategies for code generation using other patterns.
4708
4709Failure is currently supported only for binary (addition, multiplication,
c771326b 4710shifting, etc.) and bit-field (@code{extv}, @code{extzv}, and @code{insv})
03dda8e3
RK
4711operations.
4712@end table
4713
55e4756f
DD
4714If the preparation falls through (invokes neither @code{DONE} nor
4715@code{FAIL}), then the @code{define_expand} acts like a
4716@code{define_insn} in that the RTL template is used to generate the
4717insn.
4718
4719The RTL template is not used for matching, only for generating the
4720initial insn list. If the preparation statement always invokes
4721@code{DONE} or @code{FAIL}, the RTL template may be reduced to a simple
4722list of operands, such as this example:
4723
4724@smallexample
4725@group
4726(define_expand "addsi3"
4727 [(match_operand:SI 0 "register_operand" "")
4728 (match_operand:SI 1 "register_operand" "")
4729 (match_operand:SI 2 "register_operand" "")]
4730@end group
4731@group
4732 ""
4733 "
58097133 4734@{
55e4756f
DD
4735 handle_add (operands[0], operands[1], operands[2]);
4736 DONE;
58097133 4737@}")
55e4756f
DD
4738@end group
4739@end smallexample
4740
03dda8e3
RK
4741Here is an example, the definition of left-shift for the SPUR chip:
4742
4743@smallexample
4744@group
4745(define_expand "ashlsi3"
4746 [(set (match_operand:SI 0 "register_operand" "")
4747 (ashift:SI
4748@end group
4749@group
4750 (match_operand:SI 1 "register_operand" "")
4751 (match_operand:SI 2 "nonmemory_operand" "")))]
4752 ""
4753 "
4754@end group
4755@end smallexample
4756
4757@smallexample
4758@group
4759@{
4760 if (GET_CODE (operands[2]) != CONST_INT
4761 || (unsigned) INTVAL (operands[2]) > 3)
4762 FAIL;
4763@}")
4764@end group
4765@end smallexample
4766
4767@noindent
4768This example uses @code{define_expand} so that it can generate an RTL insn
4769for shifting when the shift-count is in the supported range of 0 to 3 but
4770fail in other cases where machine insns aren't available. When it fails,
4771the compiler tries another strategy using different patterns (such as, a
4772library call).
4773
4774If the compiler were able to handle nontrivial condition-strings in
4775patterns with names, then it would be possible to use a
4776@code{define_insn} in that case. Here is another case (zero-extension
4777on the 68000) which makes more use of the power of @code{define_expand}:
4778
4779@smallexample
4780(define_expand "zero_extendhisi2"
4781 [(set (match_operand:SI 0 "general_operand" "")
4782 (const_int 0))
4783 (set (strict_low_part
4784 (subreg:HI
4785 (match_dup 0)
4786 0))
4787 (match_operand:HI 1 "general_operand" ""))]
4788 ""
4789 "operands[1] = make_safe_from (operands[1], operands[0]);")
4790@end smallexample
4791
4792@noindent
4793@findex make_safe_from
4794Here two RTL insns are generated, one to clear the entire output operand
4795and the other to copy the input operand into its low half. This sequence
4796is incorrect if the input operand refers to [the old value of] the output
4797operand, so the preparation statement makes sure this isn't so. The
4798function @code{make_safe_from} copies the @code{operands[1]} into a
4799temporary register if it refers to @code{operands[0]}. It does this
4800by emitting another RTL insn.
4801
4802Finally, a third example shows the use of an internal operand.
4803Zero-extension on the SPUR chip is done by @code{and}-ing the result
4804against a halfword mask. But this mask cannot be represented by a
4805@code{const_int} because the constant value is too large to be legitimate
4806on this machine. So it must be copied into a register with
4807@code{force_reg} and then the register used in the @code{and}.
4808
4809@smallexample
4810(define_expand "zero_extendhisi2"
4811 [(set (match_operand:SI 0 "register_operand" "")
4812 (and:SI (subreg:SI
4813 (match_operand:HI 1 "register_operand" "")
4814 0)
4815 (match_dup 2)))]
4816 ""
4817 "operands[2]
3a598fbe 4818 = force_reg (SImode, GEN_INT (65535)); ")
03dda8e3
RK
4819@end smallexample
4820
f4559287 4821@emph{Note:} If the @code{define_expand} is used to serve a
c771326b 4822standard binary or unary arithmetic operation or a bit-field operation,
03dda8e3
RK
4823then the last insn it generates must not be a @code{code_label},
4824@code{barrier} or @code{note}. It must be an @code{insn},
4825@code{jump_insn} or @code{call_insn}. If you don't need a real insn
4826at the end, emit an insn to copy the result of the operation into
4827itself. Such an insn will generate no code, but it can avoid problems
bd819a4a 4828in the compiler.
03dda8e3 4829
a5249a21
HPN
4830@end ifset
4831@ifset INTERNALS
03dda8e3
RK
4832@node Insn Splitting
4833@section Defining How to Split Instructions
4834@cindex insn splitting
4835@cindex instruction splitting
4836@cindex splitting instructions
4837
fae15c93
VM
4838There are two cases where you should specify how to split a pattern
4839into multiple insns. On machines that have instructions requiring
4840delay slots (@pxref{Delay Slots}) or that have instructions whose
4841output is not available for multiple cycles (@pxref{Processor pipeline
4842description}), the compiler phases that optimize these cases need to
4843be able to move insns into one-instruction delay slots. However, some
4844insns may generate more than one machine instruction. These insns
4845cannot be placed into a delay slot.
03dda8e3
RK
4846
4847Often you can rewrite the single insn as a list of individual insns,
4848each corresponding to one machine instruction. The disadvantage of
4849doing so is that it will cause the compilation to be slower and require
4850more space. If the resulting insns are too complex, it may also
4851suppress some optimizations. The compiler splits the insn if there is a
4852reason to believe that it might improve instruction or delay slot
4853scheduling.
4854
4855The insn combiner phase also splits putative insns. If three insns are
4856merged into one insn with a complex expression that cannot be matched by
4857some @code{define_insn} pattern, the combiner phase attempts to split
4858the complex pattern into two insns that are recognized. Usually it can
4859break the complex pattern into two patterns by splitting out some
4860subexpression. However, in some other cases, such as performing an
4861addition of a large constant in two insns on a RISC machine, the way to
4862split the addition into two insns is machine-dependent.
4863
f3a3d0d3 4864@findex define_split
03dda8e3
RK
4865The @code{define_split} definition tells the compiler how to split a
4866complex insn into several simpler insns. It looks like this:
4867
4868@smallexample
4869(define_split
4870 [@var{insn-pattern}]
4871 "@var{condition}"
4872 [@var{new-insn-pattern-1}
4873 @var{new-insn-pattern-2}
4874 @dots{}]
630d3d5a 4875 "@var{preparation-statements}")
03dda8e3
RK
4876@end smallexample
4877
4878@var{insn-pattern} is a pattern that needs to be split and
4879@var{condition} is the final condition to be tested, as in a
4880@code{define_insn}. When an insn matching @var{insn-pattern} and
4881satisfying @var{condition} is found, it is replaced in the insn list
4882with the insns given by @var{new-insn-pattern-1},
4883@var{new-insn-pattern-2}, etc.
4884
630d3d5a 4885The @var{preparation-statements} are similar to those statements that
03dda8e3
RK
4886are specified for @code{define_expand} (@pxref{Expander Definitions})
4887and are executed before the new RTL is generated to prepare for the
4888generated code or emit some insns whose pattern is not fixed. Unlike
4889those in @code{define_expand}, however, these statements must not
4890generate any new pseudo-registers. Once reload has completed, they also
4891must not allocate any space in the stack frame.
4892
4893Patterns are matched against @var{insn-pattern} in two different
4894circumstances. If an insn needs to be split for delay slot scheduling
4895or insn scheduling, the insn is already known to be valid, which means
4896that it must have been matched by some @code{define_insn} and, if
df2a54e9 4897@code{reload_completed} is nonzero, is known to satisfy the constraints
03dda8e3
RK
4898of that @code{define_insn}. In that case, the new insn patterns must
4899also be insns that are matched by some @code{define_insn} and, if
df2a54e9 4900@code{reload_completed} is nonzero, must also satisfy the constraints
03dda8e3
RK
4901of those definitions.
4902
4903As an example of this usage of @code{define_split}, consider the following
4904example from @file{a29k.md}, which splits a @code{sign_extend} from
4905@code{HImode} to @code{SImode} into a pair of shift insns:
4906
4907@smallexample
4908(define_split
4909 [(set (match_operand:SI 0 "gen_reg_operand" "")
4910 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
4911 ""
4912 [(set (match_dup 0)
4913 (ashift:SI (match_dup 1)
4914 (const_int 16)))
4915 (set (match_dup 0)
4916 (ashiftrt:SI (match_dup 0)
4917 (const_int 16)))]
4918 "
4919@{ operands[1] = gen_lowpart (SImode, operands[1]); @}")
4920@end smallexample
4921
4922When the combiner phase tries to split an insn pattern, it is always the
4923case that the pattern is @emph{not} matched by any @code{define_insn}.
4924The combiner pass first tries to split a single @code{set} expression
4925and then the same @code{set} expression inside a @code{parallel}, but
4926followed by a @code{clobber} of a pseudo-reg to use as a scratch
4927register. In these cases, the combiner expects exactly two new insn
4928patterns to be generated. It will verify that these patterns match some
4929@code{define_insn} definitions, so you need not do this test in the
4930@code{define_split} (of course, there is no point in writing a
4931@code{define_split} that will never produce insns that match).
4932
4933Here is an example of this use of @code{define_split}, taken from
4934@file{rs6000.md}:
4935
4936@smallexample
4937(define_split
4938 [(set (match_operand:SI 0 "gen_reg_operand" "")
4939 (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
4940 (match_operand:SI 2 "non_add_cint_operand" "")))]
4941 ""
4942 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
4943 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
4944"
4945@{
4946 int low = INTVAL (operands[2]) & 0xffff;
4947 int high = (unsigned) INTVAL (operands[2]) >> 16;
4948
4949 if (low & 0x8000)
4950 high++, low |= 0xffff0000;
4951
3a598fbe
JL
4952 operands[3] = GEN_INT (high << 16);
4953 operands[4] = GEN_INT (low);
03dda8e3
RK
4954@}")
4955@end smallexample
4956
4957Here the predicate @code{non_add_cint_operand} matches any
4958@code{const_int} that is @emph{not} a valid operand of a single add
4959insn. The add with the smaller displacement is written so that it
4960can be substituted into the address of a subsequent operation.
4961
4962An example that uses a scratch register, from the same file, generates
4963an equality comparison of a register and a large constant:
4964
4965@smallexample
4966(define_split
4967 [(set (match_operand:CC 0 "cc_reg_operand" "")
4968 (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
4969 (match_operand:SI 2 "non_short_cint_operand" "")))
4970 (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
4971 "find_single_use (operands[0], insn, 0)
4972 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
4973 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
4974 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
4975 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
4976 "
4977@{
12bcfaa1 4978 /* @r{Get the constant we are comparing against, C, and see what it
03dda8e3 4979 looks like sign-extended to 16 bits. Then see what constant
12bcfaa1 4980 could be XOR'ed with C to get the sign-extended value.} */
03dda8e3
RK
4981
4982 int c = INTVAL (operands[2]);
4983 int sextc = (c << 16) >> 16;
4984 int xorv = c ^ sextc;
4985
3a598fbe
JL
4986 operands[4] = GEN_INT (xorv);
4987 operands[5] = GEN_INT (sextc);
03dda8e3
RK
4988@}")
4989@end smallexample
4990
4991To avoid confusion, don't write a single @code{define_split} that
4992accepts some insns that match some @code{define_insn} as well as some
4993insns that don't. Instead, write two separate @code{define_split}
4994definitions, one for the insns that are valid and one for the insns that
4995are not valid.
4996
6b24c259
JH
4997The splitter is allowed to split jump instructions into sequence of
4998jumps or create new jumps in while splitting non-jump instructions. As
4999the central flowgraph and branch prediction information needs to be updated,
f282ffb3 5000several restriction apply.
6b24c259
JH
5001
5002Splitting of jump instruction into sequence that over by another jump
c21cd8b1 5003instruction is always valid, as compiler expect identical behavior of new
6b24c259
JH
5004jump. When new sequence contains multiple jump instructions or new labels,
5005more assistance is needed. Splitter is required to create only unconditional
5006jumps, or simple conditional jump instructions. Additionally it must attach a
63519d23 5007@code{REG_BR_PROB} note to each conditional jump. A global variable
addd6f64 5008@code{split_branch_probability} holds the probability of the original branch in case
6b24c259 5009it was an simple conditional jump, @minus{}1 otherwise. To simplify
addd6f64 5010recomputing of edge frequencies, the new sequence is required to have only
6b24c259
JH
5011forward jumps to the newly created labels.
5012
fae81b38 5013@findex define_insn_and_split
c88c0d42
CP
5014For the common case where the pattern of a define_split exactly matches the
5015pattern of a define_insn, use @code{define_insn_and_split}. It looks like
5016this:
5017
5018@smallexample
5019(define_insn_and_split
5020 [@var{insn-pattern}]
5021 "@var{condition}"
5022 "@var{output-template}"
5023 "@var{split-condition}"
5024 [@var{new-insn-pattern-1}
5025 @var{new-insn-pattern-2}
5026 @dots{}]
630d3d5a 5027 "@var{preparation-statements}"
c88c0d42
CP
5028 [@var{insn-attributes}])
5029
5030@end smallexample
5031
5032@var{insn-pattern}, @var{condition}, @var{output-template}, and
5033@var{insn-attributes} are used as in @code{define_insn}. The
5034@var{new-insn-pattern} vector and the @var{preparation-statements} are used as
5035in a @code{define_split}. The @var{split-condition} is also used as in
5036@code{define_split}, with the additional behavior that if the condition starts
5037with @samp{&&}, the condition used for the split will be the constructed as a
d7d9c429 5038logical ``and'' of the split condition with the insn condition. For example,
c88c0d42
CP
5039from i386.md:
5040
5041@smallexample
5042(define_insn_and_split "zero_extendhisi2_and"
5043 [(set (match_operand:SI 0 "register_operand" "=r")
5044 (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
5045 (clobber (reg:CC 17))]
5046 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
5047 "#"
5048 "&& reload_completed"
f282ffb3 5049 [(parallel [(set (match_dup 0)
9c34dbbf 5050 (and:SI (match_dup 0) (const_int 65535)))
c88c0d42
CP
5051 (clobber (reg:CC 17))])]
5052 ""
5053 [(set_attr "type" "alu1")])
5054
5055@end smallexample
5056
ebb48a4d 5057In this case, the actual split condition will be
aee96fe9 5058@samp{TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed}.
c88c0d42
CP
5059
5060The @code{define_insn_and_split} construction provides exactly the same
5061functionality as two separate @code{define_insn} and @code{define_split}
5062patterns. It exists for compactness, and as a maintenance tool to prevent
5063having to ensure the two patterns' templates match.
5064
a5249a21
HPN
5065@end ifset
5066@ifset INTERNALS
04d8aa70
AM
5067@node Including Patterns
5068@section Including Patterns in Machine Descriptions.
5069@cindex insn includes
5070
5071@findex include
5072The @code{include} pattern tells the compiler tools where to
5073look for patterns that are in files other than in the file
8a36672b 5074@file{.md}. This is used only at build time and there is no preprocessing allowed.
04d8aa70
AM
5075
5076It looks like:
5077
5078@smallexample
5079
5080(include
5081 @var{pathname})
5082@end smallexample
5083
5084For example:
5085
5086@smallexample
5087
f282ffb3 5088(include "filestuff")
04d8aa70
AM
5089
5090@end smallexample
5091
27d30956 5092Where @var{pathname} is a string that specifies the location of the file,
8a36672b 5093specifies the include file to be in @file{gcc/config/target/filestuff}. The
04d8aa70
AM
5094directory @file{gcc/config/target} is regarded as the default directory.
5095
5096
f282ffb3
JM
5097Machine descriptions may be split up into smaller more manageable subsections
5098and placed into subdirectories.
04d8aa70
AM
5099
5100By specifying:
5101
5102@smallexample
5103
f282ffb3 5104(include "BOGUS/filestuff")
04d8aa70
AM
5105
5106@end smallexample
5107
5108the include file is specified to be in @file{gcc/config/@var{target}/BOGUS/filestuff}.
5109
5110Specifying an absolute path for the include file such as;
5111@smallexample
5112
f282ffb3 5113(include "/u2/BOGUS/filestuff")
04d8aa70
AM
5114
5115@end smallexample
f282ffb3 5116is permitted but is not encouraged.
04d8aa70
AM
5117
5118@subsection RTL Generation Tool Options for Directory Search
5119@cindex directory options .md
5120@cindex options, directory search
5121@cindex search options
5122
5123The @option{-I@var{dir}} option specifies directories to search for machine descriptions.
5124For example:
5125
5126@smallexample
5127
5128genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
5129
5130@end smallexample
5131
5132
5133Add the directory @var{dir} to the head of the list of directories to be
5134searched for header files. This can be used to override a system machine definition
5135file, substituting your own version, since these directories are
5136searched before the default machine description file directories. If you use more than
5137one @option{-I} option, the directories are scanned in left-to-right
5138order; the standard default directory come after.
5139
5140
a5249a21
HPN
5141@end ifset
5142@ifset INTERNALS
f3a3d0d3
RH
5143@node Peephole Definitions
5144@section Machine-Specific Peephole Optimizers
5145@cindex peephole optimizer definitions
5146@cindex defining peephole optimizers
5147
5148In addition to instruction patterns the @file{md} file may contain
5149definitions of machine-specific peephole optimizations.
5150
5151The combiner does not notice certain peephole optimizations when the data
5152flow in the program does not suggest that it should try them. For example,
5153sometimes two consecutive insns related in purpose can be combined even
5154though the second one does not appear to use a register computed in the
5155first one. A machine-specific peephole optimizer can detect such
5156opportunities.
5157
5158There are two forms of peephole definitions that may be used. The
5159original @code{define_peephole} is run at assembly output time to
5160match insns and substitute assembly text. Use of @code{define_peephole}
5161is deprecated.
5162
5163A newer @code{define_peephole2} matches insns and substitutes new
5164insns. The @code{peephole2} pass is run after register allocation
ebb48a4d 5165but before scheduling, which may result in much better code for
f3a3d0d3
RH
5166targets that do scheduling.
5167
5168@menu
5169* define_peephole:: RTL to Text Peephole Optimizers
5170* define_peephole2:: RTL to RTL Peephole Optimizers
5171@end menu
5172
a5249a21
HPN
5173@end ifset
5174@ifset INTERNALS
f3a3d0d3
RH
5175@node define_peephole
5176@subsection RTL to Text Peephole Optimizers
5177@findex define_peephole
5178
5179@need 1000
5180A definition looks like this:
5181
5182@smallexample
5183(define_peephole
5184 [@var{insn-pattern-1}
5185 @var{insn-pattern-2}
5186 @dots{}]
5187 "@var{condition}"
5188 "@var{template}"
630d3d5a 5189 "@var{optional-insn-attributes}")
f3a3d0d3
RH
5190@end smallexample
5191
5192@noindent
5193The last string operand may be omitted if you are not using any
5194machine-specific information in this machine description. If present,
5195it must obey the same rules as in a @code{define_insn}.
5196
5197In this skeleton, @var{insn-pattern-1} and so on are patterns to match
5198consecutive insns. The optimization applies to a sequence of insns when
5199@var{insn-pattern-1} matches the first one, @var{insn-pattern-2} matches
bd819a4a 5200the next, and so on.
f3a3d0d3
RH
5201
5202Each of the insns matched by a peephole must also match a
5203@code{define_insn}. Peepholes are checked only at the last stage just
5204before code generation, and only optionally. Therefore, any insn which
5205would match a peephole but no @code{define_insn} will cause a crash in code
5206generation in an unoptimized compilation, or at various optimization
5207stages.
5208
5209The operands of the insns are matched with @code{match_operands},
5210@code{match_operator}, and @code{match_dup}, as usual. What is not
5211usual is that the operand numbers apply to all the insn patterns in the
5212definition. So, you can check for identical operands in two insns by
5213using @code{match_operand} in one insn and @code{match_dup} in the
5214other.
5215
5216The operand constraints used in @code{match_operand} patterns do not have
5217any direct effect on the applicability of the peephole, but they will
5218be validated afterward, so make sure your constraints are general enough
5219to apply whenever the peephole matches. If the peephole matches
5220but the constraints are not satisfied, the compiler will crash.
5221
5222It is safe to omit constraints in all the operands of the peephole; or
5223you can write constraints which serve as a double-check on the criteria
5224previously tested.
5225
5226Once a sequence of insns matches the patterns, the @var{condition} is
5227checked. This is a C expression which makes the final decision whether to
5228perform the optimization (we do so if the expression is nonzero). If
5229@var{condition} is omitted (in other words, the string is empty) then the
5230optimization is applied to every sequence of insns that matches the
5231patterns.
5232
5233The defined peephole optimizations are applied after register allocation
5234is complete. Therefore, the peephole definition can check which
5235operands have ended up in which kinds of registers, just by looking at
5236the operands.
5237
5238@findex prev_active_insn
5239The way to refer to the operands in @var{condition} is to write
5240@code{operands[@var{i}]} for operand number @var{i} (as matched by
5241@code{(match_operand @var{i} @dots{})}). Use the variable @code{insn}
5242to refer to the last of the insns being matched; use
5243@code{prev_active_insn} to find the preceding insns.
5244
5245@findex dead_or_set_p
5246When optimizing computations with intermediate results, you can use
5247@var{condition} to match only when the intermediate results are not used
5248elsewhere. Use the C expression @code{dead_or_set_p (@var{insn},
5249@var{op})}, where @var{insn} is the insn in which you expect the value
5250to be used for the last time (from the value of @code{insn}, together
5251with use of @code{prev_nonnote_insn}), and @var{op} is the intermediate
bd819a4a 5252value (from @code{operands[@var{i}]}).
f3a3d0d3
RH
5253
5254Applying the optimization means replacing the sequence of insns with one
5255new insn. The @var{template} controls ultimate output of assembler code
5256for this combined insn. It works exactly like the template of a
5257@code{define_insn}. Operand numbers in this template are the same ones
5258used in matching the original sequence of insns.
5259
5260The result of a defined peephole optimizer does not need to match any of
5261the insn patterns in the machine description; it does not even have an
5262opportunity to match them. The peephole optimizer definition itself serves
5263as the insn pattern to control how the insn is output.
5264
5265Defined peephole optimizers are run as assembler code is being output,
5266so the insns they produce are never combined or rearranged in any way.
5267
5268Here is an example, taken from the 68000 machine description:
5269
5270@smallexample
5271(define_peephole
5272 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
5273 (set (match_operand:DF 0 "register_operand" "=f")
5274 (match_operand:DF 1 "register_operand" "ad"))]
5275 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
f3a3d0d3
RH
5276@{
5277 rtx xoperands[2];
a2a8cc44 5278 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
f3a3d0d3 5279#ifdef MOTOROLA
0f40f9f7
ZW
5280 output_asm_insn ("move.l %1,(sp)", xoperands);
5281 output_asm_insn ("move.l %1,-(sp)", operands);
5282 return "fmove.d (sp)+,%0";
f3a3d0d3 5283#else
0f40f9f7
ZW
5284 output_asm_insn ("movel %1,sp@@", xoperands);
5285 output_asm_insn ("movel %1,sp@@-", operands);
5286 return "fmoved sp@@+,%0";
f3a3d0d3 5287#endif
0f40f9f7 5288@})
f3a3d0d3
RH
5289@end smallexample
5290
5291@need 1000
5292The effect of this optimization is to change
5293
5294@smallexample
5295@group
5296jbsr _foobar
5297addql #4,sp
5298movel d1,sp@@-
5299movel d0,sp@@-
5300fmoved sp@@+,fp0
5301@end group
5302@end smallexample
5303
5304@noindent
5305into
5306
5307@smallexample
5308@group
5309jbsr _foobar
5310movel d1,sp@@
5311movel d0,sp@@-
5312fmoved sp@@+,fp0
5313@end group
5314@end smallexample
5315
5316@ignore
5317@findex CC_REVERSED
5318If a peephole matches a sequence including one or more jump insns, you must
5319take account of the flags such as @code{CC_REVERSED} which specify that the
5320condition codes are represented in an unusual manner. The compiler
5321automatically alters any ordinary conditional jumps which occur in such
5322situations, but the compiler cannot alter jumps which have been replaced by
5323peephole optimizations. So it is up to you to alter the assembler code
5324that the peephole produces. Supply C code to write the assembler output,
5325and in this C code check the condition code status flags and change the
5326assembler code as appropriate.
5327@end ignore
5328
5329@var{insn-pattern-1} and so on look @emph{almost} like the second
5330operand of @code{define_insn}. There is one important difference: the
5331second operand of @code{define_insn} consists of one or more RTX's
5332enclosed in square brackets. Usually, there is only one: then the same
5333action can be written as an element of a @code{define_peephole}. But
5334when there are multiple actions in a @code{define_insn}, they are
5335implicitly enclosed in a @code{parallel}. Then you must explicitly
5336write the @code{parallel}, and the square brackets within it, in the
5337@code{define_peephole}. Thus, if an insn pattern looks like this,
5338
5339@smallexample
5340(define_insn "divmodsi4"
5341 [(set (match_operand:SI 0 "general_operand" "=d")
5342 (div:SI (match_operand:SI 1 "general_operand" "0")
5343 (match_operand:SI 2 "general_operand" "dmsK")))
5344 (set (match_operand:SI 3 "general_operand" "=d")
5345 (mod:SI (match_dup 1) (match_dup 2)))]
5346 "TARGET_68020"
5347 "divsl%.l %2,%3:%0")
5348@end smallexample
5349
5350@noindent
5351then the way to mention this insn in a peephole is as follows:
5352
5353@smallexample
5354(define_peephole
5355 [@dots{}
5356 (parallel
5357 [(set (match_operand:SI 0 "general_operand" "=d")
5358 (div:SI (match_operand:SI 1 "general_operand" "0")
5359 (match_operand:SI 2 "general_operand" "dmsK")))
5360 (set (match_operand:SI 3 "general_operand" "=d")
5361 (mod:SI (match_dup 1) (match_dup 2)))])
5362 @dots{}]
5363 @dots{})
5364@end smallexample
5365
a5249a21
HPN
5366@end ifset
5367@ifset INTERNALS
f3a3d0d3
RH
5368@node define_peephole2
5369@subsection RTL to RTL Peephole Optimizers
5370@findex define_peephole2
5371
5372The @code{define_peephole2} definition tells the compiler how to
ebb48a4d 5373substitute one sequence of instructions for another sequence,
f3a3d0d3
RH
5374what additional scratch registers may be needed and what their
5375lifetimes must be.
5376
5377@smallexample
5378(define_peephole2
5379 [@var{insn-pattern-1}
5380 @var{insn-pattern-2}
5381 @dots{}]
5382 "@var{condition}"
5383 [@var{new-insn-pattern-1}
5384 @var{new-insn-pattern-2}
5385 @dots{}]
630d3d5a 5386 "@var{preparation-statements}")
f3a3d0d3
RH
5387@end smallexample
5388
5389The definition is almost identical to @code{define_split}
5390(@pxref{Insn Splitting}) except that the pattern to match is not a
5391single instruction, but a sequence of instructions.
5392
5393It is possible to request additional scratch registers for use in the
5394output template. If appropriate registers are not free, the pattern
5395will simply not match.
5396
5397@findex match_scratch
5398@findex match_dup
5399Scratch registers are requested with a @code{match_scratch} pattern at
5400the top level of the input pattern. The allocated register (initially) will
5401be dead at the point requested within the original sequence. If the scratch
5402is used at more than a single point, a @code{match_dup} pattern at the
5403top level of the input pattern marks the last position in the input sequence
5404at which the register must be available.
5405
5406Here is an example from the IA-32 machine description:
5407
5408@smallexample
5409(define_peephole2
5410 [(match_scratch:SI 2 "r")
5411 (parallel [(set (match_operand:SI 0 "register_operand" "")
5412 (match_operator:SI 3 "arith_or_logical_operator"
5413 [(match_dup 0)
5414 (match_operand:SI 1 "memory_operand" "")]))
5415 (clobber (reg:CC 17))])]
5416 "! optimize_size && ! TARGET_READ_MODIFY"
5417 [(set (match_dup 2) (match_dup 1))
5418 (parallel [(set (match_dup 0)
5419 (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
5420 (clobber (reg:CC 17))])]
5421 "")
5422@end smallexample
5423
5424@noindent
5425This pattern tries to split a load from its use in the hopes that we'll be
5426able to schedule around the memory load latency. It allocates a single
5427@code{SImode} register of class @code{GENERAL_REGS} (@code{"r"}) that needs
5428to be live only at the point just before the arithmetic.
5429
b192711e 5430A real example requiring extended scratch lifetimes is harder to come by,
f3a3d0d3
RH
5431so here's a silly made-up example:
5432
5433@smallexample
5434(define_peephole2
5435 [(match_scratch:SI 4 "r")
5436 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
5437 (set (match_operand:SI 2 "" "") (match_dup 1))
5438 (match_dup 4)
5439 (set (match_operand:SI 3 "" "") (match_dup 1))]
630d3d5a 5440 "/* @r{determine 1 does not overlap 0 and 2} */"
f3a3d0d3
RH
5441 [(set (match_dup 4) (match_dup 1))
5442 (set (match_dup 0) (match_dup 4))
5443 (set (match_dup 2) (match_dup 4))]
5444 (set (match_dup 3) (match_dup 4))]
5445 "")
5446@end smallexample
5447
5448@noindent
a628d195
RH
5449If we had not added the @code{(match_dup 4)} in the middle of the input
5450sequence, it might have been the case that the register we chose at the
5451beginning of the sequence is killed by the first or second @code{set}.
f3a3d0d3 5452
a5249a21
HPN
5453@end ifset
5454@ifset INTERNALS
03dda8e3
RK
5455@node Insn Attributes
5456@section Instruction Attributes
5457@cindex insn attributes
5458@cindex instruction attributes
5459
5460In addition to describing the instruction supported by the target machine,
5461the @file{md} file also defines a group of @dfn{attributes} and a set of
5462values for each. Every generated insn is assigned a value for each attribute.
5463One possible attribute would be the effect that the insn has on the machine's
5464condition code. This attribute can then be used by @code{NOTICE_UPDATE_CC}
5465to track the condition codes.
5466
5467@menu
5468* Defining Attributes:: Specifying attributes and their values.
5469* Expressions:: Valid expressions for attribute values.
5470* Tagging Insns:: Assigning attribute values to insns.
5471* Attr Example:: An example of assigning attributes.
5472* Insn Lengths:: Computing the length of insns.
5473* Constant Attributes:: Defining attributes that are constant.
5474* Delay Slots:: Defining delay slots required for a machine.
fae15c93 5475* Processor pipeline description:: Specifying information for insn scheduling.
03dda8e3
RK
5476@end menu
5477
a5249a21
HPN
5478@end ifset
5479@ifset INTERNALS
03dda8e3
RK
5480@node Defining Attributes
5481@subsection Defining Attributes and their Values
5482@cindex defining attributes and their values
5483@cindex attributes, defining
5484
5485@findex define_attr
5486The @code{define_attr} expression is used to define each attribute required
5487by the target machine. It looks like:
5488
5489@smallexample
5490(define_attr @var{name} @var{list-of-values} @var{default})
5491@end smallexample
5492
5493@var{name} is a string specifying the name of the attribute being defined.
5494
5495@var{list-of-values} is either a string that specifies a comma-separated
5496list of values that can be assigned to the attribute, or a null string to
5497indicate that the attribute takes numeric values.
5498
5499@var{default} is an attribute expression that gives the value of this
5500attribute for insns that match patterns whose definition does not include
5501an explicit value for this attribute. @xref{Attr Example}, for more
5502information on the handling of defaults. @xref{Constant Attributes},
5503for information on attributes that do not depend on any particular insn.
5504
5505@findex insn-attr.h
5506For each defined attribute, a number of definitions are written to the
5507@file{insn-attr.h} file. For cases where an explicit set of values is
5508specified for an attribute, the following are defined:
5509
5510@itemize @bullet
5511@item
5512A @samp{#define} is written for the symbol @samp{HAVE_ATTR_@var{name}}.
5513
5514@item
2eac577f 5515An enumerated class is defined for @samp{attr_@var{name}} with
03dda8e3 5516elements of the form @samp{@var{upper-name}_@var{upper-value}} where
4bd0bee9 5517the attribute name and value are first converted to uppercase.
03dda8e3
RK
5518
5519@item
5520A function @samp{get_attr_@var{name}} is defined that is passed an insn and
5521returns the attribute value for that insn.
5522@end itemize
5523
5524For example, if the following is present in the @file{md} file:
5525
5526@smallexample
5527(define_attr "type" "branch,fp,load,store,arith" @dots{})
5528@end smallexample
5529
5530@noindent
5531the following lines will be written to the file @file{insn-attr.h}.
5532
5533@smallexample
5534#define HAVE_ATTR_type
5535enum attr_type @{TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
5536 TYPE_STORE, TYPE_ARITH@};
5537extern enum attr_type get_attr_type ();
5538@end smallexample
5539
5540If the attribute takes numeric values, no @code{enum} type will be
5541defined and the function to obtain the attribute's value will return
5542@code{int}.
5543
a5249a21
HPN
5544@end ifset
5545@ifset INTERNALS
03dda8e3
RK
5546@node Expressions
5547@subsection Attribute Expressions
5548@cindex attribute expressions
5549
5550RTL expressions used to define attributes use the codes described above
5551plus a few specific to attribute definitions, to be discussed below.
5552Attribute value expressions must have one of the following forms:
5553
5554@table @code
5555@cindex @code{const_int} and attributes
5556@item (const_int @var{i})
5557The integer @var{i} specifies the value of a numeric attribute. @var{i}
5558must be non-negative.
5559
5560The value of a numeric attribute can be specified either with a
00bc45c1
RH
5561@code{const_int}, or as an integer represented as a string in
5562@code{const_string}, @code{eq_attr} (see below), @code{attr},
5563@code{symbol_ref}, simple arithmetic expressions, and @code{set_attr}
5564overrides on specific instructions (@pxref{Tagging Insns}).
03dda8e3
RK
5565
5566@cindex @code{const_string} and attributes
5567@item (const_string @var{value})
5568The string @var{value} specifies a constant attribute value.
5569If @var{value} is specified as @samp{"*"}, it means that the default value of
5570the attribute is to be used for the insn containing this expression.
5571@samp{"*"} obviously cannot be used in the @var{default} expression
bd819a4a 5572of a @code{define_attr}.
03dda8e3
RK
5573
5574If the attribute whose value is being specified is numeric, @var{value}
5575must be a string containing a non-negative integer (normally
5576@code{const_int} would be used in this case). Otherwise, it must
5577contain one of the valid values for the attribute.
5578
5579@cindex @code{if_then_else} and attributes
5580@item (if_then_else @var{test} @var{true-value} @var{false-value})
5581@var{test} specifies an attribute test, whose format is defined below.
5582The value of this expression is @var{true-value} if @var{test} is true,
5583otherwise it is @var{false-value}.
5584
5585@cindex @code{cond} and attributes
5586@item (cond [@var{test1} @var{value1} @dots{}] @var{default})
5587The first operand of this expression is a vector containing an even
5588number of expressions and consisting of pairs of @var{test} and @var{value}
5589expressions. The value of the @code{cond} expression is that of the
5590@var{value} corresponding to the first true @var{test} expression. If
5591none of the @var{test} expressions are true, the value of the @code{cond}
5592expression is that of the @var{default} expression.
5593@end table
5594
5595@var{test} expressions can have one of the following forms:
5596
5597@table @code
5598@cindex @code{const_int} and attribute tests
5599@item (const_int @var{i})
df2a54e9 5600This test is true if @var{i} is nonzero and false otherwise.
03dda8e3
RK
5601
5602@cindex @code{not} and attributes
5603@cindex @code{ior} and attributes
5604@cindex @code{and} and attributes
5605@item (not @var{test})
5606@itemx (ior @var{test1} @var{test2})
5607@itemx (and @var{test1} @var{test2})
5608These tests are true if the indicated logical function is true.
5609
5610@cindex @code{match_operand} and attributes
5611@item (match_operand:@var{m} @var{n} @var{pred} @var{constraints})
5612This test is true if operand @var{n} of the insn whose attribute value
5613is being determined has mode @var{m} (this part of the test is ignored
5614if @var{m} is @code{VOIDmode}) and the function specified by the string
df2a54e9 5615@var{pred} returns a nonzero value when passed operand @var{n} and mode
03dda8e3
RK
5616@var{m} (this part of the test is ignored if @var{pred} is the null
5617string).
5618
5619The @var{constraints} operand is ignored and should be the null string.
5620
5621@cindex @code{le} and attributes
5622@cindex @code{leu} and attributes
5623@cindex @code{lt} and attributes
5624@cindex @code{gt} and attributes
5625@cindex @code{gtu} and attributes
5626@cindex @code{ge} and attributes
5627@cindex @code{geu} and attributes
5628@cindex @code{ne} and attributes
5629@cindex @code{eq} and attributes
5630@cindex @code{plus} and attributes
5631@cindex @code{minus} and attributes
5632@cindex @code{mult} and attributes
5633@cindex @code{div} and attributes
5634@cindex @code{mod} and attributes
5635@cindex @code{abs} and attributes
5636@cindex @code{neg} and attributes
5637@cindex @code{ashift} and attributes
5638@cindex @code{lshiftrt} and attributes
5639@cindex @code{ashiftrt} and attributes
5640@item (le @var{arith1} @var{arith2})
5641@itemx (leu @var{arith1} @var{arith2})
5642@itemx (lt @var{arith1} @var{arith2})
5643@itemx (ltu @var{arith1} @var{arith2})
5644@itemx (gt @var{arith1} @var{arith2})
5645@itemx (gtu @var{arith1} @var{arith2})
5646@itemx (ge @var{arith1} @var{arith2})
5647@itemx (geu @var{arith1} @var{arith2})
5648@itemx (ne @var{arith1} @var{arith2})
5649@itemx (eq @var{arith1} @var{arith2})
5650These tests are true if the indicated comparison of the two arithmetic
5651expressions is true. Arithmetic expressions are formed with
5652@code{plus}, @code{minus}, @code{mult}, @code{div}, @code{mod},
5653@code{abs}, @code{neg}, @code{and}, @code{ior}, @code{xor}, @code{not},
bd819a4a 5654@code{ashift}, @code{lshiftrt}, and @code{ashiftrt} expressions.
03dda8e3
RK
5655
5656@findex get_attr
5657@code{const_int} and @code{symbol_ref} are always valid terms (@pxref{Insn
5658Lengths},for additional forms). @code{symbol_ref} is a string
5659denoting a C expression that yields an @code{int} when evaluated by the
5660@samp{get_attr_@dots{}} routine. It should normally be a global
bd819a4a 5661variable.
03dda8e3
RK
5662
5663@findex eq_attr
5664@item (eq_attr @var{name} @var{value})
5665@var{name} is a string specifying the name of an attribute.
5666
5667@var{value} is a string that is either a valid value for attribute
5668@var{name}, a comma-separated list of values, or @samp{!} followed by a
5669value or list. If @var{value} does not begin with a @samp{!}, this
5670test is true if the value of the @var{name} attribute of the current
5671insn is in the list specified by @var{value}. If @var{value} begins
5672with a @samp{!}, this test is true if the attribute's value is
5673@emph{not} in the specified list.
5674
5675For example,
5676
5677@smallexample
5678(eq_attr "type" "load,store")
5679@end smallexample
5680
5681@noindent
5682is equivalent to
5683
5684@smallexample
5685(ior (eq_attr "type" "load") (eq_attr "type" "store"))
5686@end smallexample
5687
5688If @var{name} specifies an attribute of @samp{alternative}, it refers to the
5689value of the compiler variable @code{which_alternative}
5690(@pxref{Output Statement}) and the values must be small integers. For
bd819a4a 5691example,
03dda8e3
RK
5692
5693@smallexample
5694(eq_attr "alternative" "2,3")
5695@end smallexample
5696
5697@noindent
5698is equivalent to
5699
5700@smallexample
5701(ior (eq (symbol_ref "which_alternative") (const_int 2))
5702 (eq (symbol_ref "which_alternative") (const_int 3)))
5703@end smallexample
5704
5705Note that, for most attributes, an @code{eq_attr} test is simplified in cases
5706where the value of the attribute being tested is known for all insns matching
bd819a4a 5707a particular pattern. This is by far the most common case.
03dda8e3
RK
5708
5709@findex attr_flag
5710@item (attr_flag @var{name})
5711The value of an @code{attr_flag} expression is true if the flag
5712specified by @var{name} is true for the @code{insn} currently being
5713scheduled.
5714
5715@var{name} is a string specifying one of a fixed set of flags to test.
5716Test the flags @code{forward} and @code{backward} to determine the
5717direction of a conditional branch. Test the flags @code{very_likely},
5718@code{likely}, @code{very_unlikely}, and @code{unlikely} to determine
5719if a conditional branch is expected to be taken.
5720
5721If the @code{very_likely} flag is true, then the @code{likely} flag is also
5722true. Likewise for the @code{very_unlikely} and @code{unlikely} flags.
5723
5724This example describes a conditional branch delay slot which
5725can be nullified for forward branches that are taken (annul-true) or
5726for backward branches which are not taken (annul-false).
5727
5728@smallexample
5729(define_delay (eq_attr "type" "cbranch")
5730 [(eq_attr "in_branch_delay" "true")
5731 (and (eq_attr "in_branch_delay" "true")
5732 (attr_flag "forward"))
5733 (and (eq_attr "in_branch_delay" "true")
5734 (attr_flag "backward"))])
5735@end smallexample
5736
5737The @code{forward} and @code{backward} flags are false if the current
5738@code{insn} being scheduled is not a conditional branch.
5739
5740The @code{very_likely} and @code{likely} flags are true if the
5741@code{insn} being scheduled is not a conditional branch.
5742The @code{very_unlikely} and @code{unlikely} flags are false if the
5743@code{insn} being scheduled is not a conditional branch.
5744
5745@code{attr_flag} is only used during delay slot scheduling and has no
5746meaning to other passes of the compiler.
00bc45c1
RH
5747
5748@findex attr
5749@item (attr @var{name})
5750The value of another attribute is returned. This is most useful
5751for numeric attributes, as @code{eq_attr} and @code{attr_flag}
5752produce more efficient code for non-numeric attributes.
03dda8e3
RK
5753@end table
5754
a5249a21
HPN
5755@end ifset
5756@ifset INTERNALS
03dda8e3
RK
5757@node Tagging Insns
5758@subsection Assigning Attribute Values to Insns
5759@cindex tagging insns
5760@cindex assigning attribute values to insns
5761
5762The value assigned to an attribute of an insn is primarily determined by
5763which pattern is matched by that insn (or which @code{define_peephole}
5764generated it). Every @code{define_insn} and @code{define_peephole} can
5765have an optional last argument to specify the values of attributes for
5766matching insns. The value of any attribute not specified in a particular
5767insn is set to the default value for that attribute, as specified in its
5768@code{define_attr}. Extensive use of default values for attributes
5769permits the specification of the values for only one or two attributes
5770in the definition of most insn patterns, as seen in the example in the
bd819a4a 5771next section.
03dda8e3
RK
5772
5773The optional last argument of @code{define_insn} and
5774@code{define_peephole} is a vector of expressions, each of which defines
5775the value for a single attribute. The most general way of assigning an
5776attribute's value is to use a @code{set} expression whose first operand is an
5777@code{attr} expression giving the name of the attribute being set. The
5778second operand of the @code{set} is an attribute expression
bd819a4a 5779(@pxref{Expressions}) giving the value of the attribute.
03dda8e3
RK
5780
5781When the attribute value depends on the @samp{alternative} attribute
5782(i.e., which is the applicable alternative in the constraint of the
5783insn), the @code{set_attr_alternative} expression can be used. It
5784allows the specification of a vector of attribute expressions, one for
5785each alternative.
5786
5787@findex set_attr
5788When the generality of arbitrary attribute expressions is not required,
5789the simpler @code{set_attr} expression can be used, which allows
5790specifying a string giving either a single attribute value or a list
5791of attribute values, one for each alternative.
5792
5793The form of each of the above specifications is shown below. In each case,
5794@var{name} is a string specifying the attribute to be set.
5795
5796@table @code
5797@item (set_attr @var{name} @var{value-string})
5798@var{value-string} is either a string giving the desired attribute value,
5799or a string containing a comma-separated list giving the values for
5800succeeding alternatives. The number of elements must match the number
5801of alternatives in the constraint of the insn pattern.
5802
5803Note that it may be useful to specify @samp{*} for some alternative, in
5804which case the attribute will assume its default value for insns matching
5805that alternative.
5806
5807@findex set_attr_alternative
5808@item (set_attr_alternative @var{name} [@var{value1} @var{value2} @dots{}])
5809Depending on the alternative of the insn, the value will be one of the
5810specified values. This is a shorthand for using a @code{cond} with
5811tests on the @samp{alternative} attribute.
5812
5813@findex attr
5814@item (set (attr @var{name}) @var{value})
5815The first operand of this @code{set} must be the special RTL expression
5816@code{attr}, whose sole operand is a string giving the name of the
5817attribute being set. @var{value} is the value of the attribute.
5818@end table
5819
5820The following shows three different ways of representing the same
5821attribute value specification:
5822
5823@smallexample
5824(set_attr "type" "load,store,arith")
5825
5826(set_attr_alternative "type"
5827 [(const_string "load") (const_string "store")
5828 (const_string "arith")])
5829
5830(set (attr "type")
5831 (cond [(eq_attr "alternative" "1") (const_string "load")
5832 (eq_attr "alternative" "2") (const_string "store")]
5833 (const_string "arith")))
5834@end smallexample
5835
5836@need 1000
5837@findex define_asm_attributes
5838The @code{define_asm_attributes} expression provides a mechanism to
5839specify the attributes assigned to insns produced from an @code{asm}
5840statement. It has the form:
5841
5842@smallexample
5843(define_asm_attributes [@var{attr-sets}])
5844@end smallexample
5845
5846@noindent
5847where @var{attr-sets} is specified the same as for both the
5848@code{define_insn} and the @code{define_peephole} expressions.
5849
5850These values will typically be the ``worst case'' attribute values. For
5851example, they might indicate that the condition code will be clobbered.
5852
5853A specification for a @code{length} attribute is handled specially. The
5854way to compute the length of an @code{asm} insn is to multiply the
5855length specified in the expression @code{define_asm_attributes} by the
5856number of machine instructions specified in the @code{asm} statement,
5857determined by counting the number of semicolons and newlines in the
5858string. Therefore, the value of the @code{length} attribute specified
5859in a @code{define_asm_attributes} should be the maximum possible length
5860of a single machine instruction.
5861
a5249a21
HPN
5862@end ifset
5863@ifset INTERNALS
03dda8e3
RK
5864@node Attr Example
5865@subsection Example of Attribute Specifications
5866@cindex attribute specifications example
5867@cindex attribute specifications
5868
5869The judicious use of defaulting is important in the efficient use of
5870insn attributes. Typically, insns are divided into @dfn{types} and an
5871attribute, customarily called @code{type}, is used to represent this
5872value. This attribute is normally used only to define the default value
5873for other attributes. An example will clarify this usage.
5874
5875Assume we have a RISC machine with a condition code and in which only
5876full-word operations are performed in registers. Let us assume that we
5877can divide all insns into loads, stores, (integer) arithmetic
5878operations, floating point operations, and branches.
5879
5880Here we will concern ourselves with determining the effect of an insn on
5881the condition code and will limit ourselves to the following possible
5882effects: The condition code can be set unpredictably (clobbered), not
5883be changed, be set to agree with the results of the operation, or only
5884changed if the item previously set into the condition code has been
5885modified.
5886
5887Here is part of a sample @file{md} file for such a machine:
5888
5889@smallexample
5890(define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
5891
5892(define_attr "cc" "clobber,unchanged,set,change0"
5893 (cond [(eq_attr "type" "load")
5894 (const_string "change0")
5895 (eq_attr "type" "store,branch")
5896 (const_string "unchanged")
5897 (eq_attr "type" "arith")
5898 (if_then_else (match_operand:SI 0 "" "")
5899 (const_string "set")
5900 (const_string "clobber"))]
5901 (const_string "clobber")))
5902
5903(define_insn ""
5904 [(set (match_operand:SI 0 "general_operand" "=r,r,m")
5905 (match_operand:SI 1 "general_operand" "r,m,r"))]
5906 ""
5907 "@@
5908 move %0,%1
5909 load %0,%1
5910 store %0,%1"
5911 [(set_attr "type" "arith,load,store")])
5912@end smallexample
5913
5914Note that we assume in the above example that arithmetic operations
5915performed on quantities smaller than a machine word clobber the condition
5916code since they will set the condition code to a value corresponding to the
5917full-word result.
5918
a5249a21
HPN
5919@end ifset
5920@ifset INTERNALS
03dda8e3
RK
5921@node Insn Lengths
5922@subsection Computing the Length of an Insn
5923@cindex insn lengths, computing
5924@cindex computing the length of an insn
5925
5926For many machines, multiple types of branch instructions are provided, each
5927for different length branch displacements. In most cases, the assembler
5928will choose the correct instruction to use. However, when the assembler
b49900cc 5929cannot do so, GCC can when a special attribute, the @code{length}
03dda8e3
RK
5930attribute, is defined. This attribute must be defined to have numeric
5931values by specifying a null string in its @code{define_attr}.
5932
b49900cc 5933In the case of the @code{length} attribute, two additional forms of
03dda8e3
RK
5934arithmetic terms are allowed in test expressions:
5935
5936@table @code
5937@cindex @code{match_dup} and attributes
5938@item (match_dup @var{n})
5939This refers to the address of operand @var{n} of the current insn, which
5940must be a @code{label_ref}.
5941
5942@cindex @code{pc} and attributes
5943@item (pc)
5944This refers to the address of the @emph{current} insn. It might have
5945been more consistent with other usage to make this the address of the
5946@emph{next} insn but this would be confusing because the length of the
5947current insn is to be computed.
5948@end table
5949
5950@cindex @code{addr_vec}, length of
5951@cindex @code{addr_diff_vec}, length of
5952For normal insns, the length will be determined by value of the
b49900cc 5953@code{length} attribute. In the case of @code{addr_vec} and
03dda8e3
RK
5954@code{addr_diff_vec} insn patterns, the length is computed as
5955the number of vectors multiplied by the size of each vector.
5956
5957Lengths are measured in addressable storage units (bytes).
5958
5959The following macros can be used to refine the length computation:
5960
5961@table @code
03dda8e3
RK
5962@findex ADJUST_INSN_LENGTH
5963@item ADJUST_INSN_LENGTH (@var{insn}, @var{length})
5964If defined, modifies the length assigned to instruction @var{insn} as a
5965function of the context in which it is used. @var{length} is an lvalue
5966that contains the initially computed length of the insn and should be
a8aa4e0b 5967updated with the correct length of the insn.
03dda8e3
RK
5968
5969This macro will normally not be required. A case in which it is
161d7b59 5970required is the ROMP@. On this machine, the size of an @code{addr_vec}
03dda8e3
RK
5971insn must be increased by two to compensate for the fact that alignment
5972may be required.
5973@end table
5974
5975@findex get_attr_length
5976The routine that returns @code{get_attr_length} (the value of the
5977@code{length} attribute) can be used by the output routine to
5978determine the form of the branch instruction to be written, as the
5979example below illustrates.
5980
5981As an example of the specification of variable-length branches, consider
5982the IBM 360. If we adopt the convention that a register will be set to
5983the starting address of a function, we can jump to labels within 4k of
5984the start using a four-byte instruction. Otherwise, we need a six-byte
5985sequence to load the address from memory and then branch to it.
5986
5987On such a machine, a pattern for a branch instruction might be specified
5988as follows:
5989
5990@smallexample
5991(define_insn "jump"
5992 [(set (pc)
5993 (label_ref (match_operand 0 "" "")))]
5994 ""
03dda8e3
RK
5995@{
5996 return (get_attr_length (insn) == 4
0f40f9f7
ZW
5997 ? "b %l0" : "l r15,=a(%l0); br r15");
5998@}
9c34dbbf
ZW
5999 [(set (attr "length")
6000 (if_then_else (lt (match_dup 0) (const_int 4096))
6001 (const_int 4)
6002 (const_int 6)))])
03dda8e3
RK
6003@end smallexample
6004
a5249a21
HPN
6005@end ifset
6006@ifset INTERNALS
03dda8e3
RK
6007@node Constant Attributes
6008@subsection Constant Attributes
6009@cindex constant attributes
6010
6011A special form of @code{define_attr}, where the expression for the
6012default value is a @code{const} expression, indicates an attribute that
6013is constant for a given run of the compiler. Constant attributes may be
6014used to specify which variety of processor is used. For example,
6015
6016@smallexample
6017(define_attr "cpu" "m88100,m88110,m88000"
6018 (const
6019 (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
6020 (symbol_ref "TARGET_88110") (const_string "m88110")]
6021 (const_string "m88000"))))
6022
6023(define_attr "memory" "fast,slow"
6024 (const
6025 (if_then_else (symbol_ref "TARGET_FAST_MEM")
6026 (const_string "fast")
6027 (const_string "slow"))))
6028@end smallexample
6029
6030The routine generated for constant attributes has no parameters as it
6031does not depend on any particular insn. RTL expressions used to define
6032the value of a constant attribute may use the @code{symbol_ref} form,
6033but may not use either the @code{match_operand} form or @code{eq_attr}
6034forms involving insn attributes.
6035
a5249a21
HPN
6036@end ifset
6037@ifset INTERNALS
03dda8e3
RK
6038@node Delay Slots
6039@subsection Delay Slot Scheduling
6040@cindex delay slots, defining
6041
6042The insn attribute mechanism can be used to specify the requirements for
6043delay slots, if any, on a target machine. An instruction is said to
6044require a @dfn{delay slot} if some instructions that are physically
6045after the instruction are executed as if they were located before it.
6046Classic examples are branch and call instructions, which often execute
6047the following instruction before the branch or call is performed.
6048
6049On some machines, conditional branch instructions can optionally
6050@dfn{annul} instructions in the delay slot. This means that the
6051instruction will not be executed for certain branch outcomes. Both
6052instructions that annul if the branch is true and instructions that
6053annul if the branch is false are supported.
6054
6055Delay slot scheduling differs from instruction scheduling in that
6056determining whether an instruction needs a delay slot is dependent only
6057on the type of instruction being generated, not on data flow between the
6058instructions. See the next section for a discussion of data-dependent
6059instruction scheduling.
6060
6061@findex define_delay
6062The requirement of an insn needing one or more delay slots is indicated
6063via the @code{define_delay} expression. It has the following form:
6064
6065@smallexample
6066(define_delay @var{test}
6067 [@var{delay-1} @var{annul-true-1} @var{annul-false-1}
6068 @var{delay-2} @var{annul-true-2} @var{annul-false-2}
6069 @dots{}])
6070@end smallexample
6071
6072@var{test} is an attribute test that indicates whether this
6073@code{define_delay} applies to a particular insn. If so, the number of
6074required delay slots is determined by the length of the vector specified
6075as the second argument. An insn placed in delay slot @var{n} must
6076satisfy attribute test @var{delay-n}. @var{annul-true-n} is an
6077attribute test that specifies which insns may be annulled if the branch
6078is true. Similarly, @var{annul-false-n} specifies which insns in the
6079delay slot may be annulled if the branch is false. If annulling is not
bd819a4a 6080supported for that delay slot, @code{(nil)} should be coded.
03dda8e3
RK
6081
6082For example, in the common case where branch and call insns require
6083a single delay slot, which may contain any insn other than a branch or
6084call, the following would be placed in the @file{md} file:
6085
6086@smallexample
6087(define_delay (eq_attr "type" "branch,call")
6088 [(eq_attr "type" "!branch,call") (nil) (nil)])
6089@end smallexample
6090
6091Multiple @code{define_delay} expressions may be specified. In this
6092case, each such expression specifies different delay slot requirements
6093and there must be no insn for which tests in two @code{define_delay}
6094expressions are both true.
6095
6096For example, if we have a machine that requires one delay slot for branches
6097but two for calls, no delay slot can contain a branch or call insn,
6098and any valid insn in the delay slot for the branch can be annulled if the
6099branch is true, we might represent this as follows:
6100
6101@smallexample
6102(define_delay (eq_attr "type" "branch")
6103 [(eq_attr "type" "!branch,call")
6104 (eq_attr "type" "!branch,call")
6105 (nil)])
6106
6107(define_delay (eq_attr "type" "call")
6108 [(eq_attr "type" "!branch,call") (nil) (nil)
6109 (eq_attr "type" "!branch,call") (nil) (nil)])
6110@end smallexample
6111@c the above is *still* too long. --mew 4feb93
6112
a5249a21
HPN
6113@end ifset
6114@ifset INTERNALS
fae15c93
VM
6115@node Processor pipeline description
6116@subsection Specifying processor pipeline description
6117@cindex processor pipeline description
6118@cindex processor functional units
6119@cindex instruction latency time
6120@cindex interlock delays
6121@cindex data dependence delays
6122@cindex reservation delays
6123@cindex pipeline hazard recognizer
6124@cindex automaton based pipeline description
6125@cindex regular expressions
6126@cindex deterministic finite state automaton
6127@cindex automaton based scheduler
6128@cindex RISC
6129@cindex VLIW
6130
ef261fee 6131To achieve better performance, most modern processors
fae15c93
VM
6132(super-pipelined, superscalar @acronym{RISC}, and @acronym{VLIW}
6133processors) have many @dfn{functional units} on which several
6134instructions can be executed simultaneously. An instruction starts
6135execution if its issue conditions are satisfied. If not, the
ef261fee 6136instruction is stalled until its conditions are satisfied. Such
fae15c93 6137@dfn{interlock (pipeline) delay} causes interruption of the fetching
431ae0bf 6138of successor instructions (or demands nop instructions, e.g.@: for some
fae15c93
VM
6139MIPS processors).
6140
6141There are two major kinds of interlock delays in modern processors.
6142The first one is a data dependence delay determining @dfn{instruction
6143latency time}. The instruction execution is not started until all
6144source data have been evaluated by prior instructions (there are more
6145complex cases when the instruction execution starts even when the data
c0478a66 6146are not available but will be ready in given time after the
fae15c93
VM
6147instruction execution start). Taking the data dependence delays into
6148account is simple. The data dependence (true, output, and
6149anti-dependence) delay between two instructions is given by a
6150constant. In most cases this approach is adequate. The second kind
6151of interlock delays is a reservation delay. The reservation delay
6152means that two instructions under execution will be in need of shared
431ae0bf 6153processors resources, i.e.@: buses, internal registers, and/or
fae15c93
VM
6154functional units, which are reserved for some time. Taking this kind
6155of delay into account is complex especially for modern @acronym{RISC}
6156processors.
6157
6158The task of exploiting more processor parallelism is solved by an
ef261fee 6159instruction scheduler. For a better solution to this problem, the
fae15c93 6160instruction scheduler has to have an adequate description of the
fa0aee89
PB
6161processor parallelism (or @dfn{pipeline description}). GCC
6162machine descriptions describe processor parallelism and functional
6163unit reservations for groups of instructions with the aid of
6164@dfn{regular expressions}.
ef261fee
R
6165
6166The GCC instruction scheduler uses a @dfn{pipeline hazard recognizer} to
fae15c93 6167figure out the possibility of the instruction issue by the processor
ef261fee
R
6168on a given simulated processor cycle. The pipeline hazard recognizer is
6169automatically generated from the processor pipeline description. The
fa0aee89
PB
6170pipeline hazard recognizer generated from the machine description
6171is based on a deterministic finite state automaton (@acronym{DFA}):
6172the instruction issue is possible if there is a transition from one
6173automaton state to another one. This algorithm is very fast, and
6174furthermore, its speed is not dependent on processor
6175complexity@footnote{However, the size of the automaton depends on
6176 processor complexity. To limit this effect, machine descriptions
6177 can split orthogonal parts of the machine description among several
6178 automata: but then, since each of these must be stepped independently,
6179 this does cause a small decrease in the algorithm's performance.}.
fae15c93 6180
fae15c93 6181@cindex automaton based pipeline description
fa0aee89
PB
6182The rest of this section describes the directives that constitute
6183an automaton-based processor pipeline description. The order of
6184these constructions within the machine description file is not
6185important.
fae15c93
VM
6186
6187@findex define_automaton
6188@cindex pipeline hazard recognizer
6189The following optional construction describes names of automata
6190generated and used for the pipeline hazards recognition. Sometimes
6191the generated finite state automaton used by the pipeline hazard
ef261fee 6192recognizer is large. If we use more than one automaton and bind functional
daf2f129 6193units to the automata, the total size of the automata is usually
fae15c93
VM
6194less than the size of the single automaton. If there is no one such
6195construction, only one finite state automaton is generated.
6196
6197@smallexample
6198(define_automaton @var{automata-names})
6199@end smallexample
6200
6201@var{automata-names} is a string giving names of the automata. The
6202names are separated by commas. All the automata should have unique names.
c62347f0 6203The automaton name is used in the constructions @code{define_cpu_unit} and
fae15c93
VM
6204@code{define_query_cpu_unit}.
6205
6206@findex define_cpu_unit
6207@cindex processor functional units
c62347f0 6208Each processor functional unit used in the description of instruction
fae15c93
VM
6209reservations should be described by the following construction.
6210
6211@smallexample
6212(define_cpu_unit @var{unit-names} [@var{automaton-name}])
6213@end smallexample
6214
6215@var{unit-names} is a string giving the names of the functional units
6216separated by commas. Don't use name @samp{nothing}, it is reserved
6217for other goals.
6218
ef261fee 6219@var{automaton-name} is a string giving the name of the automaton with
fae15c93
VM
6220which the unit is bound. The automaton should be described in
6221construction @code{define_automaton}. You should give
6222@dfn{automaton-name}, if there is a defined automaton.
6223
30028c85
VM
6224The assignment of units to automata are constrained by the uses of the
6225units in insn reservations. The most important constraint is: if a
6226unit reservation is present on a particular cycle of an alternative
6227for an insn reservation, then some unit from the same automaton must
6228be present on the same cycle for the other alternatives of the insn
6229reservation. The rest of the constraints are mentioned in the
6230description of the subsequent constructions.
6231
fae15c93
VM
6232@findex define_query_cpu_unit
6233@cindex querying function unit reservations
6234The following construction describes CPU functional units analogously
30028c85
VM
6235to @code{define_cpu_unit}. The reservation of such units can be
6236queried for an automaton state. The instruction scheduler never
6237queries reservation of functional units for given automaton state. So
6238as a rule, you don't need this construction. This construction could
431ae0bf 6239be used for future code generation goals (e.g.@: to generate
30028c85 6240@acronym{VLIW} insn templates).
fae15c93
VM
6241
6242@smallexample
6243(define_query_cpu_unit @var{unit-names} [@var{automaton-name}])
6244@end smallexample
6245
6246@var{unit-names} is a string giving names of the functional units
6247separated by commas.
6248
ef261fee 6249@var{automaton-name} is a string giving the name of the automaton with
fae15c93
VM
6250which the unit is bound.
6251
6252@findex define_insn_reservation
6253@cindex instruction latency time
6254@cindex regular expressions
6255@cindex data bypass
ef261fee 6256The following construction is the major one to describe pipeline
fae15c93
VM
6257characteristics of an instruction.
6258
6259@smallexample
6260(define_insn_reservation @var{insn-name} @var{default_latency}
6261 @var{condition} @var{regexp})
6262@end smallexample
6263
6264@var{default_latency} is a number giving latency time of the
6265instruction. There is an important difference between the old
6266description and the automaton based pipeline description. The latency
6267time is used for all dependencies when we use the old description. In
ef261fee
R
6268the automaton based pipeline description, the given latency time is only
6269used for true dependencies. The cost of anti-dependencies is always
fae15c93
VM
6270zero and the cost of output dependencies is the difference between
6271latency times of the producing and consuming insns (if the difference
ef261fee
R
6272is negative, the cost is considered to be zero). You can always
6273change the default costs for any description by using the target hook
fae15c93
VM
6274@code{TARGET_SCHED_ADJUST_COST} (@pxref{Scheduling}).
6275
cc6a602b 6276@var{insn-name} is a string giving the internal name of the insn. The
fae15c93
VM
6277internal names are used in constructions @code{define_bypass} and in
6278the automaton description file generated for debugging. The internal
ef261fee 6279name has nothing in common with the names in @code{define_insn}. It is a
fae15c93
VM
6280good practice to use insn classes described in the processor manual.
6281
6282@var{condition} defines what RTL insns are described by this
6283construction. You should remember that you will be in trouble if
6284@var{condition} for two or more different
6285@code{define_insn_reservation} constructions is TRUE for an insn. In
6286this case what reservation will be used for the insn is not defined.
6287Such cases are not checked during generation of the pipeline hazards
6288recognizer because in general recognizing that two conditions may have
6289the same value is quite difficult (especially if the conditions
6290contain @code{symbol_ref}). It is also not checked during the
6291pipeline hazard recognizer work because it would slow down the
6292recognizer considerably.
6293
ef261fee 6294@var{regexp} is a string describing the reservation of the cpu's functional
fae15c93
VM
6295units by the instruction. The reservations are described by a regular
6296expression according to the following syntax:
6297
6298@smallexample
6299 regexp = regexp "," oneof
6300 | oneof
6301
6302 oneof = oneof "|" allof
6303 | allof
6304
6305 allof = allof "+" repeat
6306 | repeat
daf2f129 6307
fae15c93
VM
6308 repeat = element "*" number
6309 | element
6310
6311 element = cpu_function_unit_name
6312 | reservation_name
6313 | result_name
6314 | "nothing"
6315 | "(" regexp ")"
6316@end smallexample
6317
6318@itemize @bullet
6319@item
6320@samp{,} is used for describing the start of the next cycle in
6321the reservation.
6322
6323@item
6324@samp{|} is used for describing a reservation described by the first
6325regular expression @strong{or} a reservation described by the second
6326regular expression @strong{or} etc.
6327
6328@item
6329@samp{+} is used for describing a reservation described by the first
6330regular expression @strong{and} a reservation described by the
6331second regular expression @strong{and} etc.
6332
6333@item
6334@samp{*} is used for convenience and simply means a sequence in which
6335the regular expression are repeated @var{number} times with cycle
6336advancing (see @samp{,}).
6337
6338@item
6339@samp{cpu_function_unit_name} denotes reservation of the named
6340functional unit.
6341
6342@item
6343@samp{reservation_name} --- see description of construction
6344@samp{define_reservation}.
6345
6346@item
6347@samp{nothing} denotes no unit reservations.
6348@end itemize
6349
6350@findex define_reservation
6351Sometimes unit reservations for different insns contain common parts.
6352In such case, you can simplify the pipeline description by describing
6353the common part by the following construction
6354
6355@smallexample
6356(define_reservation @var{reservation-name} @var{regexp})
6357@end smallexample
6358
6359@var{reservation-name} is a string giving name of @var{regexp}.
6360Functional unit names and reservation names are in the same name
6361space. So the reservation names should be different from the
cc6a602b 6362functional unit names and can not be the reserved name @samp{nothing}.
fae15c93
VM
6363
6364@findex define_bypass
6365@cindex instruction latency time
6366@cindex data bypass
6367The following construction is used to describe exceptions in the
6368latency time for given instruction pair. This is so called bypasses.
6369
6370@smallexample
6371(define_bypass @var{number} @var{out_insn_names} @var{in_insn_names}
6372 [@var{guard}])
6373@end smallexample
6374
6375@var{number} defines when the result generated by the instructions
6376given in string @var{out_insn_names} will be ready for the
6377instructions given in string @var{in_insn_names}. The instructions in
6378the string are separated by commas.
6379
ef261fee 6380@var{guard} is an optional string giving the name of a C function which
fae15c93
VM
6381defines an additional guard for the bypass. The function will get the
6382two insns as parameters. If the function returns zero the bypass will
6383be ignored for this case. The additional guard is necessary to
431ae0bf 6384recognize complicated bypasses, e.g.@: when the consumer is only an address
fae15c93
VM
6385of insn @samp{store} (not a stored value).
6386
6387@findex exclusion_set
6388@findex presence_set
30028c85 6389@findex final_presence_set
fae15c93 6390@findex absence_set
30028c85 6391@findex final_absence_set
fae15c93
VM
6392@cindex VLIW
6393@cindex RISC
cc6a602b
BE
6394The following five constructions are usually used to describe
6395@acronym{VLIW} processors, or more precisely, to describe a placement
6396of small instructions into @acronym{VLIW} instruction slots. They
6397can be used for @acronym{RISC} processors, too.
fae15c93
VM
6398
6399@smallexample
6400(exclusion_set @var{unit-names} @var{unit-names})
30028c85
VM
6401(presence_set @var{unit-names} @var{patterns})
6402(final_presence_set @var{unit-names} @var{patterns})
6403(absence_set @var{unit-names} @var{patterns})
6404(final_absence_set @var{unit-names} @var{patterns})
fae15c93
VM
6405@end smallexample
6406
6407@var{unit-names} is a string giving names of functional units
6408separated by commas.
6409
30028c85 6410@var{patterns} is a string giving patterns of functional units
0bdcd332 6411separated by comma. Currently pattern is one unit or units
30028c85
VM
6412separated by white-spaces.
6413
fae15c93
VM
6414The first construction (@samp{exclusion_set}) means that each
6415functional unit in the first string can not be reserved simultaneously
6416with a unit whose name is in the second string and vice versa. For
6417example, the construction is useful for describing processors
431ae0bf 6418(e.g.@: some SPARC processors) with a fully pipelined floating point
fae15c93
VM
6419functional unit which can execute simultaneously only single floating
6420point insns or only double floating point insns.
6421
6422The second construction (@samp{presence_set}) means that each
6423functional unit in the first string can not be reserved unless at
30028c85
VM
6424least one of pattern of units whose names are in the second string is
6425reserved. This is an asymmetric relation. For example, it is useful
6426for description that @acronym{VLIW} @samp{slot1} is reserved after
6427@samp{slot0} reservation. We could describe it by the following
6428construction
6429
6430@smallexample
6431(presence_set "slot1" "slot0")
6432@end smallexample
6433
6434Or @samp{slot1} is reserved only after @samp{slot0} and unit @samp{b0}
6435reservation. In this case we could write
6436
6437@smallexample
6438(presence_set "slot1" "slot0 b0")
6439@end smallexample
6440
6441The third construction (@samp{final_presence_set}) is analogous to
6442@samp{presence_set}. The difference between them is when checking is
6443done. When an instruction is issued in given automaton state
6444reflecting all current and planned unit reservations, the automaton
6445state is changed. The first state is a source state, the second one
6446is a result state. Checking for @samp{presence_set} is done on the
6447source state reservation, checking for @samp{final_presence_set} is
6448done on the result reservation. This construction is useful to
6449describe a reservation which is actually two subsequent reservations.
6450For example, if we use
6451
6452@smallexample
6453(presence_set "slot1" "slot0")
6454@end smallexample
6455
6456the following insn will be never issued (because @samp{slot1} requires
6457@samp{slot0} which is absent in the source state).
6458
6459@smallexample
6460(define_reservation "insn_and_nop" "slot0 + slot1")
6461@end smallexample
6462
6463but it can be issued if we use analogous @samp{final_presence_set}.
6464
6465The forth construction (@samp{absence_set}) means that each functional
6466unit in the first string can be reserved only if each pattern of units
6467whose names are in the second string is not reserved. This is an
6468asymmetric relation (actually @samp{exclusion_set} is analogous to
6469this one but it is symmetric). For example, it is useful for
6470description that @acronym{VLIW} @samp{slot0} can not be reserved after
6471@samp{slot1} or @samp{slot2} reservation. We could describe it by the
6472following construction
6473
6474@smallexample
6475(absence_set "slot2" "slot0, slot1")
6476@end smallexample
6477
6478Or @samp{slot2} can not be reserved if @samp{slot0} and unit @samp{b0}
6479are reserved or @samp{slot1} and unit @samp{b1} are reserved. In
6480this case we could write
6481
6482@smallexample
6483(absence_set "slot2" "slot0 b0, slot1 b1")
6484@end smallexample
fae15c93 6485
ef261fee 6486All functional units mentioned in a set should belong to the same
fae15c93
VM
6487automaton.
6488
30028c85
VM
6489The last construction (@samp{final_absence_set}) is analogous to
6490@samp{absence_set} but checking is done on the result (state)
6491reservation. See comments for @samp{final_presence_set}.
6492
fae15c93
VM
6493@findex automata_option
6494@cindex deterministic finite state automaton
6495@cindex nondeterministic finite state automaton
6496@cindex finite state automaton minimization
6497You can control the generator of the pipeline hazard recognizer with
6498the following construction.
6499
6500@smallexample
6501(automata_option @var{options})
6502@end smallexample
6503
6504@var{options} is a string giving options which affect the generated
6505code. Currently there are the following options:
6506
6507@itemize @bullet
6508@item
6509@dfn{no-minimization} makes no minimization of the automaton. This is
30028c85
VM
6510only worth to do when we are debugging the description and need to
6511look more accurately at reservations of states.
fae15c93
VM
6512
6513@item
e3c8eb86
VM
6514@dfn{time} means printing additional time statistics about
6515generation of automata.
6516
6517@item
6518@dfn{v} means a generation of the file describing the result automata.
6519The file has suffix @samp{.dfa} and can be used for the description
6520verification and debugging.
6521
6522@item
6523@dfn{w} means a generation of warning instead of error for
6524non-critical errors.
fae15c93
VM
6525
6526@item
6527@dfn{ndfa} makes nondeterministic finite state automata. This affects
6528the treatment of operator @samp{|} in the regular expressions. The
6529usual treatment of the operator is to try the first alternative and,
6530if the reservation is not possible, the second alternative. The
6531nondeterministic treatment means trying all alternatives, some of them
96ddf8ef 6532may be rejected by reservations in the subsequent insns.
dfa849f3
VM
6533
6534@item
6535@dfn{progress} means output of a progress bar showing how many states
6536were generated so far for automaton being processed. This is useful
6537during debugging a @acronym{DFA} description. If you see too many
6538generated states, you could interrupt the generator of the pipeline
6539hazard recognizer and try to figure out a reason for generation of the
6540huge automaton.
fae15c93
VM
6541@end itemize
6542
6543As an example, consider a superscalar @acronym{RISC} machine which can
6544issue three insns (two integer insns and one floating point insn) on
6545the cycle but can finish only two insns. To describe this, we define
6546the following functional units.
6547
6548@smallexample
6549(define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
ef261fee 6550(define_cpu_unit "port0, port1")
fae15c93
VM
6551@end smallexample
6552
6553All simple integer insns can be executed in any integer pipeline and
6554their result is ready in two cycles. The simple integer insns are
6555issued into the first pipeline unless it is reserved, otherwise they
6556are issued into the second pipeline. Integer division and
6557multiplication insns can be executed only in the second integer
6558pipeline and their results are ready correspondingly in 8 and 4
431ae0bf 6559cycles. The integer division is not pipelined, i.e.@: the subsequent
fae15c93
VM
6560integer division insn can not be issued until the current division
6561insn finished. Floating point insns are fully pipelined and their
ef261fee
R
6562results are ready in 3 cycles. Where the result of a floating point
6563insn is used by an integer insn, an additional delay of one cycle is
6564incurred. To describe all of this we could specify
fae15c93
VM
6565
6566@smallexample
6567(define_cpu_unit "div")
6568
68e4d4c5 6569(define_insn_reservation "simple" 2 (eq_attr "type" "int")
ef261fee 6570 "(i0_pipeline | i1_pipeline), (port0 | port1)")
fae15c93 6571
68e4d4c5 6572(define_insn_reservation "mult" 4 (eq_attr "type" "mult")
ef261fee 6573 "i1_pipeline, nothing*2, (port0 | port1)")
fae15c93 6574
68e4d4c5 6575(define_insn_reservation "div" 8 (eq_attr "type" "div")
ef261fee 6576 "i1_pipeline, div*7, div + (port0 | port1)")
fae15c93 6577
68e4d4c5 6578(define_insn_reservation "float" 3 (eq_attr "type" "float")
ef261fee 6579 "f_pipeline, nothing, (port0 | port1))
fae15c93 6580
ef261fee 6581(define_bypass 4 "float" "simple,mult,div")
fae15c93
VM
6582@end smallexample
6583
6584To simplify the description we could describe the following reservation
6585
6586@smallexample
6587(define_reservation "finish" "port0|port1")
6588@end smallexample
6589
6590and use it in all @code{define_insn_reservation} as in the following
6591construction
6592
6593@smallexample
68e4d4c5 6594(define_insn_reservation "simple" 2 (eq_attr "type" "int")
fae15c93
VM
6595 "(i0_pipeline | i1_pipeline), finish")
6596@end smallexample
6597
6598
a5249a21
HPN
6599@end ifset
6600@ifset INTERNALS
3262c1f5
RH
6601@node Conditional Execution
6602@section Conditional Execution
6603@cindex conditional execution
6604@cindex predication
6605
6606A number of architectures provide for some form of conditional
6607execution, or predication. The hallmark of this feature is the
6608ability to nullify most of the instructions in the instruction set.
6609When the instruction set is large and not entirely symmetric, it
6610can be quite tedious to describe these forms directly in the
6611@file{.md} file. An alternative is the @code{define_cond_exec} template.
6612
6613@findex define_cond_exec
6614@smallexample
6615(define_cond_exec
6616 [@var{predicate-pattern}]
6617 "@var{condition}"
630d3d5a 6618 "@var{output-template}")
3262c1f5
RH
6619@end smallexample
6620
6621@var{predicate-pattern} is the condition that must be true for the
6622insn to be executed at runtime and should match a relational operator.
6623One can use @code{match_operator} to match several relational operators
6624at once. Any @code{match_operand} operands must have no more than one
6625alternative.
6626
6627@var{condition} is a C expression that must be true for the generated
6628pattern to match.
6629
6630@findex current_insn_predicate
630d3d5a 6631@var{output-template} is a string similar to the @code{define_insn}
3262c1f5
RH
6632output template (@pxref{Output Template}), except that the @samp{*}
6633and @samp{@@} special cases do not apply. This is only useful if the
6634assembly text for the predicate is a simple prefix to the main insn.
6635In order to handle the general case, there is a global variable
6636@code{current_insn_predicate} that will contain the entire predicate
6637if the current insn is predicated, and will otherwise be @code{NULL}.
6638
ebb48a4d
JM
6639When @code{define_cond_exec} is used, an implicit reference to
6640the @code{predicable} instruction attribute is made.
e979f9e8 6641@xref{Insn Attributes}. This attribute must be boolean (i.e.@: have
3262c1f5
RH
6642exactly two elements in its @var{list-of-values}). Further, it must
6643not be used with complex expressions. That is, the default and all
ebb48a4d 6644uses in the insns must be a simple constant, not dependent on the
3262c1f5
RH
6645alternative or anything else.
6646
ebb48a4d 6647For each @code{define_insn} for which the @code{predicable}
3262c1f5
RH
6648attribute is true, a new @code{define_insn} pattern will be
6649generated that matches a predicated version of the instruction.
6650For example,
6651
6652@smallexample
6653(define_insn "addsi"
6654 [(set (match_operand:SI 0 "register_operand" "r")
6655 (plus:SI (match_operand:SI 1 "register_operand" "r")
6656 (match_operand:SI 2 "register_operand" "r")))]
6657 "@var{test1}"
6658 "add %2,%1,%0")
6659
6660(define_cond_exec
6661 [(ne (match_operand:CC 0 "register_operand" "c")
6662 (const_int 0))]
6663 "@var{test2}"
6664 "(%0)")
6665@end smallexample
6666
6667@noindent
6668generates a new pattern
6669
6670@smallexample
6671(define_insn ""
6672 [(cond_exec
6673 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
6674 (set (match_operand:SI 0 "register_operand" "r")
6675 (plus:SI (match_operand:SI 1 "register_operand" "r")
6676 (match_operand:SI 2 "register_operand" "r"))))]
6677 "(@var{test2}) && (@var{test1})"
6678 "(%3) add %2,%1,%0")
6679@end smallexample
c25c12b8 6680
a5249a21
HPN
6681@end ifset
6682@ifset INTERNALS
c25c12b8
R
6683@node Constant Definitions
6684@section Constant Definitions
6685@cindex constant definitions
6686@findex define_constants
6687
6688Using literal constants inside instruction patterns reduces legibility and
6689can be a maintenance problem.
6690
6691To overcome this problem, you may use the @code{define_constants}
6692expression. It contains a vector of name-value pairs. From that
6693point on, wherever any of the names appears in the MD file, it is as
6694if the corresponding value had been written instead. You may use
6695@code{define_constants} multiple times; each appearance adds more
6696constants to the table. It is an error to redefine a constant with
6697a different value.
6698
6699To come back to the a29k load multiple example, instead of
6700
6701@smallexample
6702(define_insn ""
6703 [(match_parallel 0 "load_multiple_operation"
6704 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
6705 (match_operand:SI 2 "memory_operand" "m"))
6706 (use (reg:SI 179))
6707 (clobber (reg:SI 179))])]
6708 ""
6709 "loadm 0,0,%1,%2")
6710@end smallexample
6711
6712You could write:
6713
6714@smallexample
6715(define_constants [
6716 (R_BP 177)
6717 (R_FC 178)
6718 (R_CR 179)
6719 (R_Q 180)
6720])
6721
6722(define_insn ""
6723 [(match_parallel 0 "load_multiple_operation"
6724 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
6725 (match_operand:SI 2 "memory_operand" "m"))
6726 (use (reg:SI R_CR))
6727 (clobber (reg:SI R_CR))])]
6728 ""
6729 "loadm 0,0,%1,%2")
6730@end smallexample
6731
6732The constants that are defined with a define_constant are also output
6733in the insn-codes.h header file as #defines.
b11cc610 6734@end ifset
032e8348
RS
6735@ifset INTERNALS
6736@node Macros
6737@section Macros
6738@cindex macros in @file{.md} files
6739
6740Ports often need to define similar patterns for more than one machine
6741mode or for more than one rtx code. GCC provides some simple macro
6742facilities to make this process easier.
6743
6744@menu
6745* Mode Macros:: Generating variations of patterns for different modes.
6746* Code Macros:: Doing the same for codes.
6747@end menu
6748
6749@node Mode Macros
6750@subsection Mode Macros
6751@cindex mode macros in @file{.md} files
6752
6753Ports often need to define similar patterns for two or more different modes.
6754For example:
6755
6756@itemize @bullet
6757@item
6758If a processor has hardware support for both single and double
6759floating-point arithmetic, the @code{SFmode} patterns tend to be
6760very similar to the @code{DFmode} ones.
6761
6762@item
6763If a port uses @code{SImode} pointers in one configuration and
6764@code{DImode} pointers in another, it will usually have very similar
6765@code{SImode} and @code{DImode} patterns for manipulating pointers.
6766@end itemize
6767
6768Mode macros allow several patterns to be instantiated from one
6769@file{.md} file template. They can be used with any type of
6770rtx-based construct, such as a @code{define_insn},
6771@code{define_split}, or @code{define_peephole2}.
6772
6773@menu
6774* Defining Mode Macros:: Defining a new mode macro.
f30990b2 6775* Substitutions:: Combining mode macros with substitutions
032e8348
RS
6776* Examples:: Examples
6777@end menu
6778
6779@node Defining Mode Macros
6780@subsubsection Defining Mode Macros
6781@findex define_mode_macro
6782
6783The syntax for defining a mode macro is:
6784
6785@smallexample
6786(define_mode_macro @var{name} [(@var{mode1} "@var{cond1}") ... (@var{moden} "@var{condn}")])
6787@end smallexample
6788
6789This allows subsequent @file{.md} file constructs to use the mode suffix
6790@code{:@var{name}}. Every construct that does so will be expanded
6791@var{n} times, once with every use of @code{:@var{name}} replaced by
6792@code{:@var{mode1}}, once with every use replaced by @code{:@var{mode2}},
6793and so on. In the expansion for a particular @var{modei}, every
6794C condition will also require that @var{condi} be true.
6795
6796For example:
6797
6798@smallexample
6799(define_mode_macro P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
6800@end smallexample
6801
6802defines a new mode suffix @code{:P}. Every construct that uses
6803@code{:P} will be expanded twice, once with every @code{:P} replaced
6804by @code{:SI} and once with every @code{:P} replaced by @code{:DI}.
6805The @code{:SI} version will only apply if @code{Pmode == SImode} and
6806the @code{:DI} version will only apply if @code{Pmode == DImode}.
6807
6808As with other @file{.md} conditions, an empty string is treated
6809as ``always true''. @code{(@var{mode} "")} can also be abbreviated
6810to @code{@var{mode}}. For example:
6811
6812@smallexample
6813(define_mode_macro GPR [SI (DI "TARGET_64BIT")])
6814@end smallexample
6815
6816means that the @code{:DI} expansion only applies if @code{TARGET_64BIT}
6817but that the @code{:SI} expansion has no such constraint.
6818
6819Macros are applied in the order they are defined. This can be
6820significant if two macros are used in a construct that requires
f30990b2 6821substitutions. @xref{Substitutions}.
032e8348 6822
f30990b2
ILT
6823@node Substitutions
6824@subsubsection Substitution in Mode Macros
032e8348
RS
6825@findex define_mode_attr
6826
6827If an @file{.md} file construct uses mode macros, each version of the
f30990b2
ILT
6828construct will often need slightly different strings or modes. For
6829example:
032e8348
RS
6830
6831@itemize @bullet
6832@item
6833When a @code{define_expand} defines several @code{add@var{m}3} patterns
6834(@pxref{Standard Names}), each expander will need to use the
6835appropriate mode name for @var{m}.
6836
6837@item
6838When a @code{define_insn} defines several instruction patterns,
6839each instruction will often use a different assembler mnemonic.
f30990b2
ILT
6840
6841@item
6842When a @code{define_insn} requires operands with different modes,
6843using a macro for one of the operand modes usually requires a specific
6844mode for the other operand(s).
032e8348
RS
6845@end itemize
6846
6847GCC supports such variations through a system of ``mode attributes''.
6848There are two standard attributes: @code{mode}, which is the name of
6849the mode in lower case, and @code{MODE}, which is the same thing in
6850upper case. You can define other attributes using:
6851
6852@smallexample
6853(define_mode_attr @var{name} [(@var{mode1} "@var{value1}") ... (@var{moden} "@var{valuen}")])
6854@end smallexample
6855
6856where @var{name} is the name of the attribute and @var{valuei}
6857is the value associated with @var{modei}.
6858
f30990b2
ILT
6859When GCC replaces some @var{:macro} with @var{:mode}, it will scan
6860each string and mode in the pattern for sequences of the form
6861@code{<@var{macro}:@var{attr}>}, where @var{attr} is the name of a
6862mode attribute. If the attribute is defined for @var{mode}, the whole
6863@code{<...>} sequence will be replaced by the appropriate attribute
6864value.
032e8348
RS
6865
6866For example, suppose an @file{.md} file has:
6867
6868@smallexample
6869(define_mode_macro P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
6870(define_mode_attr load [(SI "lw") (DI "ld")])
6871@end smallexample
6872
6873If one of the patterns that uses @code{:P} contains the string
6874@code{"<P:load>\t%0,%1"}, the @code{SI} version of that pattern
6875will use @code{"lw\t%0,%1"} and the @code{DI} version will use
6876@code{"ld\t%0,%1"}.
6877
f30990b2
ILT
6878Here is an example of using an attribute for a mode:
6879
6880@smallexample
6881(define_mode_macro LONG [SI DI])
6882(define_mode_attr SHORT [(SI "HI") (DI "SI")])
6883(define_insn ...
6884 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
6885@end smallexample
6886
032e8348
RS
6887The @code{@var{macro}:} prefix may be omitted, in which case the
6888substitution will be attempted for every macro expansion.
6889
6890@node Examples
6891@subsubsection Mode Macro Examples
6892
6893Here is an example from the MIPS port. It defines the following
6894modes and attributes (among others):
6895
6896@smallexample
6897(define_mode_macro GPR [SI (DI "TARGET_64BIT")])
6898(define_mode_attr d [(SI "") (DI "d")])
6899@end smallexample
6900
6901and uses the following template to define both @code{subsi3}
6902and @code{subdi3}:
6903
6904@smallexample
6905(define_insn "sub<mode>3"
6906 [(set (match_operand:GPR 0 "register_operand" "=d")
6907 (minus:GPR (match_operand:GPR 1 "register_operand" "d")
6908 (match_operand:GPR 2 "register_operand" "d")))]
6909 ""
6910 "<d>subu\t%0,%1,%2"
6911 [(set_attr "type" "arith")
6912 (set_attr "mode" "<MODE>")])
6913@end smallexample
6914
6915This is exactly equivalent to:
6916
6917@smallexample
6918(define_insn "subsi3"
6919 [(set (match_operand:SI 0 "register_operand" "=d")
6920 (minus:SI (match_operand:SI 1 "register_operand" "d")
6921 (match_operand:SI 2 "register_operand" "d")))]
6922 ""
6923 "subu\t%0,%1,%2"
6924 [(set_attr "type" "arith")
6925 (set_attr "mode" "SI")])
6926
6927(define_insn "subdi3"
6928 [(set (match_operand:DI 0 "register_operand" "=d")
6929 (minus:DI (match_operand:DI 1 "register_operand" "d")
6930 (match_operand:DI 2 "register_operand" "d")))]
6931 ""
6932 "dsubu\t%0,%1,%2"
6933 [(set_attr "type" "arith")
6934 (set_attr "mode" "DI")])
6935@end smallexample
6936
6937@node Code Macros
6938@subsection Code Macros
6939@cindex code macros in @file{.md} files
6940@findex define_code_macro
6941@findex define_code_attr
6942
6943Code macros operate in a similar way to mode macros. @xref{Mode Macros}.
6944
6945The construct:
6946
6947@smallexample
6948(define_code_macro @var{name} [(@var{code1} "@var{cond1}") ... (@var{coden} "@var{condn}")])
6949@end smallexample
6950
6951defines a pseudo rtx code @var{name} that can be instantiated as
6952@var{codei} if condition @var{condi} is true. Each @var{codei}
6953must have the same rtx format. @xref{RTL Classes}.
6954
6955As with mode macros, each pattern that uses @var{name} will be
6956expanded @var{n} times, once with all uses of @var{name} replaced by
6957@var{code1}, once with all uses replaced by @var{code2}, and so on.
6958@xref{Defining Mode Macros}.
6959
6960It is possible to define attributes for codes as well as for modes.
6961There are two standard code attributes: @code{code}, the name of the
6962code in lower case, and @code{CODE}, the name of the code in upper case.
6963Other attributes are defined using:
6964
6965@smallexample
6966(define_code_attr @var{name} [(@var{code1} "@var{value1}") ... (@var{coden} "@var{valuen}")])
6967@end smallexample
6968
6969Here's an example of code macros in action, taken from the MIPS port:
6970
6971@smallexample
6972(define_code_macro any_cond [unordered ordered unlt unge uneq ltgt unle ungt
6973 eq ne gt ge lt le gtu geu ltu leu])
6974
6975(define_expand "b<code>"
6976 [(set (pc)
6977 (if_then_else (any_cond:CC (cc0)
6978 (const_int 0))
6979 (label_ref (match_operand 0 ""))
6980 (pc)))]
6981 ""
6982@{
6983 gen_conditional_branch (operands, <CODE>);
6984 DONE;
6985@})
6986@end smallexample
6987
6988This is equivalent to:
6989
6990@smallexample
6991(define_expand "bunordered"
6992 [(set (pc)
6993 (if_then_else (unordered:CC (cc0)
6994 (const_int 0))
6995 (label_ref (match_operand 0 ""))
6996 (pc)))]
6997 ""
6998@{
6999 gen_conditional_branch (operands, UNORDERED);
7000 DONE;
7001@})
7002
7003(define_expand "bordered"
7004 [(set (pc)
7005 (if_then_else (ordered:CC (cc0)
7006 (const_int 0))
7007 (label_ref (match_operand 0 ""))
7008 (pc)))]
7009 ""
7010@{
7011 gen_conditional_branch (operands, ORDERED);
7012 DONE;
7013@})
7014
7015...
7016@end smallexample
7017
7018@end ifset
This page took 2.895219 seconds and 5 git commands to generate.