Annotation of gcc/md.texi, revision 1.1.1.7

1.1.1.7 ! root        1: @c Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
1.1       root        2: @c This is part of the GCC manual.
                      3: @c For copying conditions, see the file gcc.texi.
                      4: 
                      5: @ifset INTERNALS
1.1.1.3   root        6: @node Machine Desc
1.1       root        7: @chapter Machine Descriptions
                      8: @cindex machine descriptions
                      9: 
                     10: A machine description has two parts: a file of instruction patterns
                     11: (@file{.md} file) and a C header file of macro definitions.
                     12: 
                     13: The @file{.md} file for a target machine contains a pattern for each
                     14: instruction that the target machine supports (or at least each instruction
                     15: that is worth telling the compiler about).  It may also contain comments.
                     16: A semicolon causes the rest of the line to be a comment, unless the semicolon
                     17: is inside a quoted string.
                     18: 
                     19: See the next chapter for information on the C header file.
                     20: 
                     21: @menu
                     22: * Patterns::            How to write instruction patterns.
                     23: * Example::             An explained example of a @code{define_insn} pattern.
                     24: * RTL Template::        The RTL template defines what insns match a pattern.
                     25: * Output Template::     The output template says how to make assembler code
                     26:                           from such an insn.
                     27: * Output Statement::    For more generality, write C code to output
                     28:                           the assembler code.
                     29: * Constraints::         When not all operands are general operands.
                     30: * Standard Names::      Names mark patterns to use for code generation.
                     31: * Pattern Ordering::    When the order of patterns makes a difference.
                     32: * Dependent Patterns::  Having one pattern may make you need another.
                     33: * Jump Patterns::       Special considerations for patterns for jump insns.
                     34: * Insn Canonicalizations::Canonicalization of Instructions
                     35: * Peephole Definitions::Defining machine-specific peephole optimizations.
                     36: * Expander Definitions::Generating a sequence of several RTL insns
                     37:                          for a standard operation.
                     38: * Insn Splitting::    Splitting Instructions into Multiple Instructions
                     39: * Insn Attributes::     Specifying the value of attributes for generated insns.
                     40: @end menu
                     41: 
1.1.1.5   root       42: @node Patterns
1.1       root       43: @section Everything about Instruction Patterns
                     44: @cindex patterns
                     45: @cindex instruction patterns
                     46: 
                     47: @findex define_insn
                     48: Each instruction pattern contains an incomplete RTL expression, with pieces
                     49: to be filled in later, operand constraints that restrict how the pieces can
                     50: be filled in, and an output pattern or C code to generate the assembler
                     51: output, all wrapped up in a @code{define_insn} expression.
                     52: 
                     53: A @code{define_insn} is an RTL expression containing four or five operands:
                     54: 
                     55: @enumerate
                     56: @item
                     57: An optional name.  The presence of a name indicate that this instruction
                     58: pattern can perform a certain standard job for the RTL-generation
                     59: pass of the compiler.  This pass knows certain names and will use
                     60: the instruction patterns with those names, if the names are defined
                     61: in the machine description.
                     62: 
                     63: The absence of a name is indicated by writing an empty string
                     64: where the name should go.  Nameless instruction patterns are never
                     65: used for generating RTL code, but they may permit several simpler insns
                     66: to be combined later on.
                     67: 
                     68: Names that are not thus known and used in RTL-generation have no
                     69: effect; they are equivalent to no name at all.
                     70: 
                     71: @item
                     72: The @dfn{RTL template} (@pxref{RTL Template}) is a vector of incomplete
                     73: RTL expressions which show what the instruction should look like.  It is
                     74: incomplete because it may contain @code{match_operand},
                     75: @code{match_operator}, and @code{match_dup} expressions that stand for
                     76: operands of the instruction.
                     77: 
                     78: If the vector has only one element, that element is the template for the
                     79: instruction pattern.  If the vector has multiple elements, then the
                     80: instruction pattern is a @code{parallel} expression containing the
                     81: elements described.
                     82: 
                     83: @item
                     84: @cindex pattern conditions
                     85: @cindex conditions, in patterns
                     86: A condition.  This is a string which contains a C expression that is
                     87: the final test to decide whether an insn body matches this pattern.
                     88: 
                     89: @cindex named patterns and conditions
                     90: For a named pattern, the condition (if present) may not depend on
                     91: the data in the insn being matched, but only the target-machine-type
                     92: flags.  The compiler needs to test these conditions during
                     93: initialization in order to learn exactly which named instructions are
                     94: available in a particular run.
                     95: 
                     96: @findex operands
                     97: For nameless patterns, the condition is applied only when matching an
                     98: individual insn, and only after the insn has matched the pattern's
                     99: recognition template.  The insn's operands may be found in the vector
                    100: @code{operands}.
                    101: 
                    102: @item
                    103: The @dfn{output template}: a string that says how to output matching
                    104: insns as assembler code.  @samp{%} in this string specifies where
                    105: to substitute the value of an operand.  @xref{Output Template}.
                    106: 
                    107: When simple substitution isn't general enough, you can specify a piece
                    108: of C code to compute the output.  @xref{Output Statement}.
                    109: 
                    110: @item
                    111: Optionally, a vector containing the values of attributes for insns matching
                    112: this pattern.  @xref{Insn Attributes}.
                    113: @end enumerate
                    114: 
1.1.1.5   root      115: @node Example
1.1       root      116: @section Example of @code{define_insn}
                    117: @cindex @code{define_insn} example
                    118: 
                    119: Here is an actual example of an instruction pattern, for the 68000/68020.
                    120: 
                    121: @example
                    122: (define_insn "tstsi"
                    123:   [(set (cc0)
                    124:         (match_operand:SI 0 "general_operand" "rm"))]
                    125:   ""
                    126:   "*
                    127: @{ if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
                    128:     return \"tstl %0\";
                    129:   return \"cmpl #0,%0\"; @}")
                    130: @end example
                    131: 
                    132: This is an instruction that sets the condition codes based on the value of
                    133: a general operand.  It has no condition, so any insn whose RTL description
                    134: has the form shown may be handled according to this pattern.  The name
                    135: @samp{tstsi} means ``test a @code{SImode} value'' and tells the RTL generation
                    136: pass that, when it is necessary to test such a value, an insn to do so
                    137: can be constructed using this pattern.
                    138: 
                    139: The output control string is a piece of C code which chooses which
                    140: output template to return based on the kind of operand and the specific
                    141: type of CPU for which code is being generated.
                    142: 
                    143: @samp{"rm"} is an operand constraint.  Its meaning is explained below.
                    144: 
1.1.1.5   root      145: @node RTL Template
                    146: @section RTL Template
1.1       root      147: @cindex RTL insn template
                    148: @cindex generating insns
                    149: @cindex insns, generating
                    150: @cindex recognizing insns
                    151: @cindex insns, recognizing
                    152: 
                    153: The RTL template is used to define which insns match the particular pattern
                    154: and how to find their operands.  For named patterns, the RTL template also
                    155: says how to construct an insn from specified operands.
                    156: 
                    157: Construction involves substituting specified operands into a copy of the
                    158: template.  Matching involves determining the values that serve as the
                    159: operands in the insn being matched.  Both of these activities are
                    160: controlled by special expression types that direct matching and
                    161: substitution of the operands.
                    162: 
                    163: @table @code
                    164: @findex match_operand
                    165: @item (match_operand:@var{m} @var{n} @var{predicate} @var{constraint})
                    166: This expression is a placeholder for operand number @var{n} of
                    167: the insn.  When constructing an insn, operand number @var{n}
                    168: will be substituted at this point.  When matching an insn, whatever
                    169: appears at this position in the insn will be taken as operand
                    170: number @var{n}; but it must satisfy @var{predicate} or this instruction
                    171: pattern will not match at all.
                    172: 
                    173: Operand numbers must be chosen consecutively counting from zero in
                    174: each instruction pattern.  There may be only one @code{match_operand}
                    175: expression in the pattern for each operand number.  Usually operands
                    176: are numbered in the order of appearance in @code{match_operand}
                    177: expressions.
                    178: 
                    179: @var{predicate} is a string that is the name of a C function that accepts two
                    180: arguments, an expression and a machine mode.  During matching, the
                    181: function will be called with the putative operand as the expression and
                    182: @var{m} as the mode argument (if @var{m} is not specified,
                    183: @code{VOIDmode} will be used, which normally causes @var{predicate} to accept
                    184: any mode).  If it returns zero, this instruction pattern fails to match.
                    185: @var{predicate} may be an empty string; then it means no test is to be done
                    186: on the operand, so anything which occurs in this position is valid.
                    187: 
                    188: Most of the time, @var{predicate} will reject modes other than @var{m}---but
                    189: not always.  For example, the predicate @code{address_operand} uses
                    190: @var{m} as the mode of memory ref that the address should be valid for.
                    191: Many predicates accept @code{const_int} nodes even though their mode is
                    192: @code{VOIDmode}.
                    193: 
                    194: @var{constraint} controls reloading and the choice of the best register
                    195: class to use for a value, as explained later (@pxref{Constraints}).
                    196: 
                    197: People are often unclear on the difference between the constraint and the
                    198: predicate.  The predicate helps decide whether a given insn matches the
                    199: pattern.  The constraint plays no role in this decision; instead, it
                    200: controls various decisions in the case of an insn which does match.
                    201: 
                    202: @findex general_operand
1.1.1.5   root      203: On CISC machines, the most common @var{predicate} is
                    204: @code{"general_operand"}.  This function checks that the putative
                    205: operand is either a constant, a register or a memory reference, and that
                    206: it is valid for mode @var{m}.
1.1       root      207: 
                    208: @findex register_operand
                    209: For an operand that must be a register, @var{predicate} should be
1.1.1.5   root      210: @code{"register_operand"}.  Using @code{"general_operand"} would be
                    211: valid, since the reload pass would copy any non-register operands
                    212: through registers, but this would make GNU CC do extra work, it would
                    213: prevent invariant operands (such as constant) from being removed from
                    214: loops, and it would prevent the register allocator from doing the best
                    215: possible job.  On RISC machines, it is usually most efficient to allow
                    216: @var{predicate} to accept only objects that the constraints allow.
1.1       root      217: 
                    218: @findex immediate_operand
1.1.1.5   root      219: For an operand that must be a constant, you must be sure to either use
1.1       root      220: @code{"immediate_operand"} for @var{predicate}, or make the instruction
                    221: pattern's extra condition require a constant, or both.  You cannot
                    222: expect the constraints to do this work!  If the constraints allow only
                    223: constants, but the predicate allows something else, the compiler will
                    224: crash when that case arises.
                    225: 
                    226: @findex match_scratch
                    227: @item (match_scratch:@var{m} @var{n} @var{constraint})
                    228: This expression is also a placeholder for operand number @var{n}
                    229: and indicates that operand must be a @code{scratch} or @code{reg}
                    230: expression.
                    231: 
1.1.1.7 ! root      232: When matching patterns, this is equivalent to
1.1       root      233: 
1.1.1.5   root      234: @smallexample
1.1       root      235: (match_operand:@var{m} @var{n} "scratch_operand" @var{pred})
1.1.1.5   root      236: @end smallexample
1.1       root      237: 
                    238: but, when generating RTL, it produces a (@code{scratch}:@var{m})
                    239: expression.
                    240: 
                    241: If the last few expressions in a @code{parallel} are @code{clobber}
                    242: expressions whose operands are either a hard register or
1.1.1.7 ! root      243: @code{match_scratch}, the combiner can add or delete them when
        !           244: necessary.  @xref{Side Effects}.
1.1       root      245: 
                    246: @findex match_dup
                    247: @item (match_dup @var{n})
                    248: This expression is also a placeholder for operand number @var{n}.
                    249: It is used when the operand needs to appear more than once in the
                    250: insn.
                    251: 
1.1.1.5   root      252: In construction, @code{match_dup} acts just like @code{match_operand}:
                    253: the operand is substituted into the insn being constructed.  But in
                    254: matching, @code{match_dup} behaves differently.  It assumes that operand
                    255: number @var{n} has already been determined by a @code{match_operand}
                    256: appearing earlier in the recognition template, and it matches only an
                    257: identical-looking expression.
1.1       root      258: 
                    259: @findex match_operator
                    260: @item (match_operator:@var{m} @var{n} @var{predicate} [@var{operands}@dots{}])
                    261: This pattern is a kind of placeholder for a variable RTL expression
                    262: code.
                    263: 
                    264: When constructing an insn, it stands for an RTL expression whose
                    265: expression code is taken from that of operand @var{n}, and whose
                    266: operands are constructed from the patterns @var{operands}.
                    267: 
                    268: When matching an expression, it matches an expression if the function
                    269: @var{predicate} returns nonzero on that expression @emph{and} the
                    270: patterns @var{operands} match the operands of the expression.
                    271: 
                    272: Suppose that the function @code{commutative_operator} is defined as
                    273: follows, to match any expression whose operator is one of the
                    274: commutative arithmetic operators of RTL and whose mode is @var{mode}:
                    275: 
1.1.1.5   root      276: @smallexample
1.1       root      277: int
                    278: commutative_operator (x, mode)
                    279:      rtx x;
                    280:      enum machine_mode mode;
                    281: @{
                    282:   enum rtx_code code = GET_CODE (x);
                    283:   if (GET_MODE (x) != mode)
                    284:     return 0;
1.1.1.5   root      285:   return (GET_RTX_CLASS (code) == 'c'
                    286:           || code == EQ || code == NE);
1.1       root      287: @}
1.1.1.5   root      288: @end smallexample
1.1       root      289: 
                    290: Then the following pattern will match any RTL expression consisting
                    291: of a commutative operator applied to two general operands:
                    292: 
1.1.1.5   root      293: @smallexample
1.1       root      294: (match_operator:SI 3 "commutative_operator"
                    295:   [(match_operand:SI 1 "general_operand" "g")
                    296:    (match_operand:SI 2 "general_operand" "g")])
1.1.1.5   root      297: @end smallexample
1.1       root      298: 
                    299: Here the vector @code{[@var{operands}@dots{}]} contains two patterns
                    300: because the expressions to be matched all contain two operands.
                    301: 
                    302: When this pattern does match, the two operands of the commutative
                    303: operator are recorded as operands 1 and 2 of the insn.  (This is done
                    304: by the two instances of @code{match_operand}.)  Operand 3 of the insn
                    305: will be the entire commutative expression: use @code{GET_CODE
                    306: (operands[3])} to see which commutative operator was used.
                    307: 
                    308: The machine mode @var{m} of @code{match_operator} works like that of
                    309: @code{match_operand}: it is passed as the second argument to the
                    310: predicate function, and that function is solely responsible for
                    311: deciding whether the expression to be matched ``has'' that mode.
                    312: 
                    313: When constructing an insn, argument 3 of the gen-function will specify
                    314: the operation (i.e. the expression code) for the expression to be
                    315: made.  It should be an RTL expression, whose expression code is copied
                    316: into a new expression whose operands are arguments 1 and 2 of the
                    317: gen-function.  The subexpressions of argument 3 are not used;
                    318: only its expression code matters.
                    319: 
                    320: When @code{match_operator} is used in a pattern for matching an insn,
                    321: it usually best if the operand number of the @code{match_operator}
                    322: is higher than that of the actual operands of the insn.  This improves
                    323: register allocation because the register allocator often looks at
                    324: operands 1 and 2 of insns to see if it can do register tying.
                    325: 
                    326: There is no way to specify constraints in @code{match_operator}.  The
                    327: operand of the insn which corresponds to the @code{match_operator}
                    328: never has any constraints because it is never reloaded as a whole.
                    329: However, if parts of its @var{operands} are matched by
                    330: @code{match_operand} patterns, those parts may have constraints of
                    331: their own.
                    332: 
1.1.1.4   root      333: @findex match_op_dup
                    334: @item (match_op_dup:@var{m} @var{n}[@var{operands}@dots{}])
                    335: Like @code{match_dup}, except that it applies to operators instead of
                    336: operands.  When constructing an insn, operand number @var{n} will be
                    337: substituted at this point.  But in matching, @code{match_op_dup} behaves
                    338: differently.  It assumes that operand number @var{n} has already been
                    339: determined by a @code{match_operator} appearing earlier in the
                    340: recognition template, and it matches only an identical-looking
                    341: expression.
                    342: 
1.1.1.3   root      343: @findex match_parallel
                    344: @item (match_parallel @var{n} @var{predicate} [@var{subpat}@dots{}])
                    345: This pattern is a placeholder for an insn that consists of a
                    346: @code{parallel} expression with a variable number of elements.  This
                    347: expression should only appear at the top level of an insn pattern.
                    348: 
                    349: When constructing an insn, operand number @var{n} will be substituted at
                    350: this point.  When matching an insn, it matches if the body of the insn
                    351: is a @code{parallel} expression with at least as many elements as the
                    352: vector of @var{subpat} expressions in the @code{match_parallel}, if each
                    353: @var{subpat} matches the corresponding element of the @code{parallel},
                    354: @emph{and} the function @var{predicate} returns nonzero on the
                    355: @code{parallel} that is the body of the insn.  It is the responsibility
                    356: of the predicate to validate elements of the @code{parallel} beyond
                    357: those listed in the @code{match_parallel}.@refill
                    358: 
                    359: A typical use of @code{match_parallel} is to match load and store
1.1.1.7 ! root      360: multiple expressions, which can contain a variable number of elements
1.1.1.3   root      361: in a @code{parallel}.  For example,
1.1.1.5   root      362: @c the following is *still* going over.  need to change the code.
                    363: @c also need to work on grouping of this example.  --mew 1feb93
1.1.1.3   root      364: 
1.1.1.5   root      365: @smallexample
1.1.1.3   root      366: (define_insn ""
                    367:   [(match_parallel 0 "load_multiple_operation"
1.1.1.5   root      368:      [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
                    369:            (match_operand:SI 2 "memory_operand" "m"))
                    370:       (use (reg:SI 179))
                    371:       (clobber (reg:SI 179))])]
1.1.1.3   root      372:   ""
                    373:   "loadm 0,0,%1,%2")
1.1.1.5   root      374: @end smallexample
1.1.1.3   root      375: 
                    376: This example comes from @file{a29k.md}.  The function
                    377: @code{load_multiple_operations} is defined in @file{a29k.c} and checks
                    378: that subsequent elements in the @code{parallel} are the same as the
                    379: @code{set} in the pattern, except that they are referencing subsequent
                    380: registers and memory locations.
                    381: 
                    382: An insn that matches this pattern might look like:
                    383: 
1.1.1.5   root      384: @smallexample
                    385: (parallel
                    386:  [(set (reg:SI 20) (mem:SI (reg:SI 100)))
                    387:   (use (reg:SI 179))
                    388:   (clobber (reg:SI 179))
                    389:   (set (reg:SI 21)
                    390:        (mem:SI (plus:SI (reg:SI 100)
                    391:                         (const_int 4))))
                    392:   (set (reg:SI 22)
                    393:        (mem:SI (plus:SI (reg:SI 100)
                    394:                         (const_int 8))))])
                    395: @end smallexample
1.1.1.3   root      396: 
1.1.1.4   root      397: @findex match_par_dup
                    398: @item (match_par_dup @var{n} [@var{subpat}@dots{}])
                    399: Like @code{match_op_dup}, but for @code{match_parallel} instead of
                    400: @code{match_operator}.
                    401: 
1.1       root      402: @findex address
                    403: @item (address (match_operand:@var{m} @var{n} "address_operand" ""))
                    404: This complex of expressions is a placeholder for an operand number
                    405: @var{n} in a ``load address'' instruction: an operand which specifies
                    406: a memory location in the usual way, but for which the actual operand
                    407: value used is the address of the location, not the contents of the
                    408: location.
                    409: 
                    410: @code{address} expressions never appear in RTL code, only in machine
                    411: descriptions.  And they are used only in machine descriptions that do
                    412: not use the operand constraint feature.  When operand constraints are
                    413: in use, the letter @samp{p} in the constraint serves this purpose.
                    414: 
                    415: @var{m} is the machine mode of the @emph{memory location being
                    416: addressed}, not the machine mode of the address itself.  That mode is
                    417: always the same on a given target machine (it is @code{Pmode}, which
                    418: normally is @code{SImode}), so there is no point in mentioning it;
                    419: thus, no machine mode is written in the @code{address} expression.  If
                    420: some day support is added for machines in which addresses of different
                    421: kinds of objects appear differently or are used differently (such as
                    422: the PDP-10), different formats would perhaps need different machine
                    423: modes and these modes might be written in the @code{address}
                    424: expression.
                    425: @end table
                    426: 
1.1.1.5   root      427: @node Output Template
1.1       root      428: @section Output Templates and Operand Substitution
                    429: @cindex output templates
                    430: @cindex operand substitution
                    431: 
                    432: @cindex @samp{%} in template
                    433: @cindex percent sign
                    434: The @dfn{output template} is a string which specifies how to output the
                    435: assembler code for an instruction pattern.  Most of the template is a
                    436: fixed string which is output literally.  The character @samp{%} is used
                    437: to specify where to substitute an operand; it can also be used to
                    438: identify places where different variants of the assembler require
                    439: different syntax.
                    440: 
                    441: In the simplest case, a @samp{%} followed by a digit @var{n} says to output
                    442: operand @var{n} at that point in the string.
                    443: 
                    444: @samp{%} followed by a letter and a digit says to output an operand in an
                    445: alternate fashion.  Four letters have standard, built-in meanings described
                    446: below.  The machine description macro @code{PRINT_OPERAND} can define
                    447: additional letters with nonstandard meanings.
                    448: 
                    449: @samp{%c@var{digit}} can be used to substitute an operand that is a
                    450: constant value without the syntax that normally indicates an immediate
                    451: operand.
                    452: 
                    453: @samp{%n@var{digit}} is like @samp{%c@var{digit}} except that the value of
                    454: the constant is negated before printing.
                    455: 
                    456: @samp{%a@var{digit}} can be used to substitute an operand as if it were a
                    457: memory reference, with the actual operand treated as the address.  This may
                    458: be useful when outputting a ``load address'' instruction, because often the
                    459: assembler syntax for such an instruction requires you to write the operand
                    460: as if it were a memory reference.
                    461: 
                    462: @samp{%l@var{digit}} is used to substitute a @code{label_ref} into a jump
                    463: instruction.
                    464: 
1.1.1.4   root      465: @samp{%=} outputs a number which is unique to each instruction in the
                    466: entire compilation.  This is useful for making local labels to be
                    467: referred to more than once in a single template that generates multiple
                    468: assembler instructions.
                    469: 
1.1       root      470: @samp{%} followed by a punctuation character specifies a substitution that
                    471: does not use an operand.  Only one case is standard: @samp{%%} outputs a
                    472: @samp{%} into the assembler code.  Other nonstandard cases can be
                    473: defined in the @code{PRINT_OPERAND} macro.  You must also define
                    474: which punctuation characters are valid with the
                    475: @code{PRINT_OPERAND_PUNCT_VALID_P} macro.
                    476: 
                    477: @cindex \
                    478: @cindex backslash
                    479: The template may generate multiple assembler instructions.  Write the text
                    480: for the instructions, with @samp{\;} between them.
                    481: 
                    482: @cindex matching operands
                    483: When the RTL contains two operands which are required by constraint to match
                    484: each other, the output template must refer only to the lower-numbered operand.
                    485: Matching operands are not always identical, and the rest of the compiler
                    486: arranges to put the proper RTL expression for printing into the lower-numbered
                    487: operand.
                    488: 
                    489: One use of nonstandard letters or punctuation following @samp{%} is to
                    490: distinguish between different assembler languages for the same machine; for
                    491: example, Motorola syntax versus MIT syntax for the 68000.  Motorola syntax
                    492: requires periods in most opcode names, while MIT syntax does not.  For
                    493: example, the opcode @samp{movel} in MIT syntax is @samp{move.l} in Motorola
                    494: syntax.  The same file of patterns is used for both kinds of output syntax,
                    495: but the character sequence @samp{%.} is used in each place where Motorola
                    496: syntax wants a period.  The @code{PRINT_OPERAND} macro for Motorola syntax
                    497: defines the sequence to output a period; the macro for MIT syntax defines
                    498: it to do nothing.
                    499: 
1.1.1.5   root      500: @cindex @code{#} in template
                    501: As a special case, a template consisting of the single character @code{#}
                    502: instructs the compiler to first split the insn, and then output the
                    503: resulting instructions separately.  This helps eliminate redundancy in the
                    504: output templates.   If you have a @code{define_insn} that needs to emit
                    505: multiple assembler instructions, and there is an matching @code{define_split}
                    506: already defined, then you can simply use @code{#} as the output template
                    507: instead of writing an output template that emits the multiple assembler
                    508: instructions.
                    509: 
1.1.1.6   root      510: If @code{ASSEMBLER_DIALECT} is defined, you can use
                    511: @samp{@{option0|option1|option2@}} constructs in the templates.  These
                    512: describe multiple variants of assembler language syntax.
                    513: @xref{Instruction Output}.
                    514: 
1.1.1.5   root      515: @node Output Statement
                    516: @section C Statements for Assembler Output
1.1       root      517: @cindex output statements
                    518: @cindex C statements for assembler output
                    519: @cindex generating assembler output
                    520: 
                    521: Often a single fixed template string cannot produce correct and efficient
                    522: assembler code for all the cases that are recognized by a single
                    523: instruction pattern.  For example, the opcodes may depend on the kinds of
                    524: operands; or some unfortunate combinations of operands may require extra
                    525: machine instructions.
                    526: 
                    527: If the output control string starts with a @samp{@@}, then it is actually
                    528: a series of templates, each on a separate line.  (Blank lines and
                    529: leading spaces and tabs are ignored.)  The templates correspond to the
                    530: pattern's constraint alternatives (@pxref{Multi-Alternative}).  For example,
                    531: if a target machine has a two-address add instruction @samp{addr} to add
                    532: into a register and another @samp{addm} to add a register to memory, you
                    533: might write this pattern:
                    534: 
1.1.1.5   root      535: @smallexample
1.1       root      536: (define_insn "addsi3"
1.1.1.3   root      537:   [(set (match_operand:SI 0 "general_operand" "=r,m")
1.1       root      538:         (plus:SI (match_operand:SI 1 "general_operand" "0,0")
                    539:                  (match_operand:SI 2 "general_operand" "g,r")))]
                    540:   ""
                    541:   "@@
1.1.1.4   root      542:    addr %2,%0
                    543:    addm %2,%0")
1.1.1.5   root      544: @end smallexample
1.1       root      545: 
                    546: @cindex @code{*} in template
                    547: @cindex asterisk in template
                    548: If the output control string starts with a @samp{*}, then it is not an
                    549: output template but rather a piece of C program that should compute a
                    550: template.  It should execute a @code{return} statement to return the
                    551: template-string you want.  Most such templates use C string literals, which
                    552: require doublequote characters to delimit them.  To include these
                    553: doublequote characters in the string, prefix each one with @samp{\}.
                    554: 
                    555: The operands may be found in the array @code{operands}, whose C data type
                    556: is @code{rtx []}.
                    557: 
                    558: It is very common to select different ways of generating assembler code
                    559: based on whether an immediate operand is within a certain range.  Be
                    560: careful when doing this, because the result of @code{INTVAL} is an
                    561: integer on the host machine.  If the host machine has more bits in an
                    562: @code{int} than the target machine has in the mode in which the constant
                    563: will be used, then some of the bits you get from @code{INTVAL} will be
                    564: superfluous.  For proper results, you must carefully disregard the
                    565: values of those bits.
                    566: 
                    567: @findex output_asm_insn
                    568: It is possible to output an assembler instruction and then go on to output
                    569: or compute more of them, using the subroutine @code{output_asm_insn}.  This
                    570: receives two arguments: a template-string and a vector of operands.  The
                    571: vector may be @code{operands}, or it may be another array of @code{rtx}
                    572: that you declare locally and initialize yourself.
                    573: 
                    574: @findex which_alternative
                    575: When an insn pattern has multiple alternatives in its constraints, often
                    576: the appearance of the assembler code is determined mostly by which alternative
                    577: was matched.  When this is so, the C code can test the variable
                    578: @code{which_alternative}, which is the ordinal number of the alternative
                    579: that was actually satisfied (0 for the first, 1 for the second alternative,
                    580: etc.).
                    581: 
                    582: For example, suppose there are two opcodes for storing zero, @samp{clrreg}
                    583: for registers and @samp{clrmem} for memory locations.  Here is how
                    584: a pattern could use @code{which_alternative} to choose between them:
                    585: 
1.1.1.5   root      586: @smallexample
1.1       root      587: (define_insn ""
1.1.1.3   root      588:   [(set (match_operand:SI 0 "general_operand" "=r,m")
1.1       root      589:         (const_int 0))]
                    590:   ""
                    591:   "*
                    592:   return (which_alternative == 0
                    593:           ? \"clrreg %0\" : \"clrmem %0\");
                    594:   ")
1.1.1.5   root      595: @end smallexample
1.1       root      596: 
                    597: The example above, where the assembler code to generate was
                    598: @emph{solely} determined by the alternative, could also have been specified
                    599: as follows, having the output control string start with a @samp{@@}:
                    600: 
1.1.1.5   root      601: @smallexample
                    602: @group
1.1       root      603: (define_insn ""
1.1.1.3   root      604:   [(set (match_operand:SI 0 "general_operand" "=r,m")
1.1       root      605:         (const_int 0))]
                    606:   ""
                    607:   "@@
                    608:    clrreg %0
                    609:    clrmem %0")
1.1.1.5   root      610: @end group
                    611: @end smallexample
                    612: @end ifset
1.1       root      613: 
1.1.1.5   root      614: @c Most of this node appears by itself (in a different place) even
                    615: @c when the INTERNALS flag is clear.  Passages that require the full
                    616: @c manual's context are conditionalized to appear only in the full manual.
                    617: @ifset INTERNALS
                    618: @node Constraints
1.1       root      619: @section Operand Constraints
                    620: @cindex operand constraints
                    621: @cindex constraints
                    622: 
                    623: Each @code{match_operand} in an instruction pattern can specify a
1.1.1.5   root      624: constraint for the type of operands allowed.  
                    625: @end ifset
                    626: @ifclear INTERNALS
                    627: @node Constraints
                    628: @section Constraints for @code{asm} Operands
                    629: @cindex operand constraints, @code{asm}
                    630: @cindex constraints, @code{asm}
                    631: @cindex @code{asm} constraints
1.1.1.7 ! root      632: 
1.1.1.5   root      633: Here are specific details on what constraint letters you can use with
                    634: @code{asm} operands.
                    635: @end ifclear
                    636: Constraints can say whether
1.1       root      637: an operand may be in a register, and which kinds of register; whether the
                    638: operand can be a memory reference, and which kinds of address; whether the
                    639: operand may be an immediate constant, and which possible values it may
                    640: have.  Constraints can also require two operands to match.
                    641: 
1.1.1.5   root      642: @ifset INTERNALS
1.1       root      643: @menu
                    644: * Simple Constraints::  Basic use of constraints.
                    645: * Multi-Alternative::   When an insn has two alternative constraint-patterns.
                    646: * Class Preferences::   Constraints guide which hard register to put things in.
                    647: * Modifiers::           More precise control over effects of constraints.
1.1.1.5   root      648: * Machine Constraints:: Existing constraints for some particular machines.
1.1       root      649: * No Constraints::      Describing a clean machine without constraints.
                    650: @end menu
1.1.1.5   root      651: @end ifset
1.1       root      652: 
1.1.1.5   root      653: @ifclear INTERNALS
                    654: @menu
                    655: * Simple Constraints::  Basic use of constraints.
                    656: * Multi-Alternative::   When an insn has two alternative constraint-patterns.
                    657: * Modifiers::           More precise control over effects of constraints.
                    658: * Machine Constraints:: Special constraints for some particular machines.
                    659: @end menu
                    660: @end ifclear
                    661: 
                    662: @node Simple Constraints
1.1       root      663: @subsection Simple Constraints
                    664: @cindex simple constraints
                    665: 
                    666: The simplest kind of constraint is a string full of letters, each of
                    667: which describes one kind of operand that is permitted.  Here are
                    668: the letters that are allowed:
                    669: 
                    670: @table @asis
                    671: @cindex @samp{m} in constraint
                    672: @cindex memory references in constraints
                    673: @item @samp{m}
                    674: A memory operand is allowed, with any kind of address that the machine
                    675: supports in general.
                    676: 
                    677: @cindex offsettable address
                    678: @cindex @samp{o} in constraint
                    679: @item @samp{o}
                    680: A memory operand is allowed, but only if the address is
                    681: @dfn{offsettable}.  This means that adding a small integer (actually,
                    682: the width in bytes of the operand, as determined by its machine mode)
                    683: may be added to the address and the result is also a valid memory
                    684: address.
                    685: 
                    686: @cindex autoincrement/decrement addressing
                    687: For example, an address which is constant is offsettable; so is an
                    688: address that is the sum of a register and a constant (as long as a
                    689: slightly larger constant is also within the range of address-offsets
                    690: supported by the machine); but an autoincrement or autodecrement
                    691: address is not offsettable.  More complicated indirect/indexed
                    692: addresses may or may not be offsettable depending on the other
                    693: addressing modes that the machine supports.
                    694: 
                    695: Note that in an output operand which can be matched by another
                    696: operand, the constraint letter @samp{o} is valid only when accompanied
                    697: by both @samp{<} (if the target machine has predecrement addressing)
                    698: and @samp{>} (if the target machine has preincrement addressing).
                    699: 
                    700: @cindex @samp{V} in constraint
                    701: @item @samp{V}
                    702: A memory operand that is not offsettable.  In other words, anything that
                    703: would fit the @samp{m} constraint but not the @samp{o} constraint.
                    704: 
                    705: @cindex @samp{<} in constraint
                    706: @item @samp{<}
                    707: A memory operand with autodecrement addressing (either predecrement or
                    708: postdecrement) is allowed.
                    709: 
                    710: @cindex @samp{>} in constraint
                    711: @item @samp{>}
                    712: A memory operand with autoincrement addressing (either preincrement or
                    713: postincrement) is allowed.
                    714: 
                    715: @cindex @samp{r} in constraint
                    716: @cindex registers in constraints
                    717: @item @samp{r}
                    718: A register operand is allowed provided that it is in a general
                    719: register.
                    720: 
                    721: @cindex @samp{d} in constraint
                    722: @item @samp{d}, @samp{a}, @samp{f}, @dots{}
                    723: Other letters can be defined in machine-dependent fashion to stand for
                    724: particular classes of registers.  @samp{d}, @samp{a} and @samp{f} are
                    725: defined on the 68000/68020 to stand for data, address and floating
                    726: point registers.
                    727: 
                    728: @cindex constants in constraints
                    729: @cindex @samp{i} in constraint
                    730: @item @samp{i}
                    731: An immediate integer operand (one with constant value) is allowed.
                    732: This includes symbolic constants whose values will be known only at
                    733: assembly time.
                    734: 
                    735: @cindex @samp{n} in constraint
                    736: @item @samp{n}
                    737: An immediate integer operand with a known numeric value is allowed.
                    738: Many systems cannot support assembly-time constants for operands less
                    739: than a word wide.  Constraints for these operands should use @samp{n}
                    740: rather than @samp{i}.
                    741: 
                    742: @cindex @samp{I} in constraint
                    743: @item @samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}
                    744: Other letters in the range @samp{I} through @samp{P} may be defined in
                    745: a machine-dependent fashion to permit immediate integer operands with
                    746: explicit integer values in specified ranges.  For example, on the
                    747: 68000, @samp{I} is defined to stand for the range of values 1 to 8.
                    748: This is the range permitted as a shift count in the shift
                    749: instructions.
                    750: 
                    751: @cindex @samp{E} in constraint
                    752: @item @samp{E}
                    753: An immediate floating operand (expression code @code{const_double}) is
                    754: allowed, but only if the target floating point format is the same as
                    755: that of the host machine (on which the compiler is running).
                    756: 
                    757: @cindex @samp{F} in constraint
                    758: @item @samp{F}
                    759: An immediate floating operand (expression code @code{const_double}) is
                    760: allowed.
                    761: 
                    762: @cindex @samp{G} in constraint
                    763: @cindex @samp{H} in constraint
                    764: @item @samp{G}, @samp{H}
                    765: @samp{G} and @samp{H} may be defined in a machine-dependent fashion to
                    766: permit immediate floating operands in particular ranges of values.
                    767: 
                    768: @cindex @samp{s} in constraint
                    769: @item @samp{s}
                    770: An immediate integer operand whose value is not an explicit integer is
                    771: allowed.
                    772: 
                    773: This might appear strange; if an insn allows a constant operand with a
                    774: value not known at compile time, it certainly must allow any known
                    775: value.  So why use @samp{s} instead of @samp{i}?  Sometimes it allows
                    776: better code to be generated.
                    777: 
                    778: For example, on the 68000 in a fullword instruction it is possible to
                    779: use an immediate operand; but if the immediate value is between -128
                    780: and 127, better code results from loading the value into a register and
                    781: using the register.  This is because the load into the register can be
                    782: done with a @samp{moveq} instruction.  We arrange for this to happen
                    783: by defining the letter @samp{K} to mean ``any integer outside the
                    784: range -128 to 127'', and then specifying @samp{Ks} in the operand
                    785: constraints.
                    786: 
                    787: @cindex @samp{g} in constraint
                    788: @item @samp{g}
                    789: Any register, memory or immediate integer operand is allowed, except for
                    790: registers that are not general registers.
                    791: 
                    792: @cindex @samp{X} in constraint
                    793: @item @samp{X}
1.1.1.5   root      794: @ifset INTERNALS
1.1       root      795: Any operand whatsoever is allowed, even if it does not satisfy
                    796: @code{general_operand}.  This is normally used in the constraint of
                    797: a @code{match_scratch} when certain alternatives will not actually 
                    798: require a scratch register.
1.1.1.5   root      799: @end ifset
                    800: @ifclear INTERNALS
                    801: Any operand whatsoever is allowed.
                    802: @end ifclear
1.1       root      803: 
                    804: @cindex @samp{0} in constraint
                    805: @cindex digits in constraint
                    806: @item @samp{0}, @samp{1}, @samp{2}, @dots{} @samp{9}
                    807: An operand that matches the specified operand number is allowed.  If a
                    808: digit is used together with letters within the same alternative, the
                    809: digit should come last.
                    810: 
                    811: @cindex matching constraint
                    812: @cindex constraint, matching
                    813: This is called a @dfn{matching constraint} and what it really means is
                    814: that the assembler has only a single operand that fills two roles
1.1.1.5   root      815: @ifset INTERNALS
1.1       root      816: considered separate in the RTL insn.  For example, an add insn has two
1.1.1.3   root      817: input operands and one output operand in the RTL, but on most CISC
1.1.1.5   root      818: @end ifset
                    819: @ifclear INTERNALS
                    820: which @code{asm} distinguishes.  For example, an add instruction uses
                    821: two input operands and an output operand, but on most CISC 
                    822: @end ifclear
1.1.1.3   root      823: machines an add instruction really has only two operands, one of them an
                    824: input-output operand:
                    825: 
1.1.1.5   root      826: @smallexample
1.1.1.3   root      827: addl #35,r12
1.1.1.5   root      828: @end smallexample
1.1       root      829: 
1.1.1.3   root      830: Matching constraints are used in these circumstances.
1.1       root      831: More precisely, the two operands that match must include one input-only
                    832: operand and one output-only operand.  Moreover, the digit must be a
                    833: smaller number than the number of the operand that uses it in the
                    834: constraint.
                    835: 
1.1.1.5   root      836: @ifset INTERNALS
1.1       root      837: For operands to match in a particular case usually means that they
                    838: are identical-looking RTL expressions.  But in a few special cases
                    839: specific kinds of dissimilarity are allowed.  For example, @code{*x}
                    840: as an input operand will match @code{*x++} as an output operand.
                    841: For proper results in such cases, the output template should always
                    842: use the output-operand's number when printing the operand.
1.1.1.5   root      843: @end ifset
1.1       root      844: 
                    845: @cindex load address instruction
                    846: @cindex push address instruction
                    847: @cindex address constraints
                    848: @cindex @samp{p} in constraint
                    849: @item @samp{p}
                    850: An operand that is a valid memory address is allowed.  This is
                    851: for ``load address'' and ``push address'' instructions.
                    852: 
                    853: @findex address_operand
                    854: @samp{p} in the constraint must be accompanied by @code{address_operand}
                    855: as the predicate in the @code{match_operand}.  This predicate interprets
                    856: the mode specified in the @code{match_operand} as the mode of the memory
                    857: reference for which the address would be valid.
                    858: 
                    859: @cindex extensible constraints
                    860: @cindex @samp{Q}, in constraint
                    861: @item @samp{Q}, @samp{R}, @samp{S}, @dots{} @samp{U}
                    862: Letters in the range @samp{Q} through @samp{U} may be defined in a
                    863: machine-dependent fashion to stand for arbitrary operand types.
1.1.1.5   root      864: @ifset INTERNALS
1.1       root      865: The machine description macro @code{EXTRA_CONSTRAINT} is passed the
                    866: operand as its first argument and the constraint letter as its
                    867: second operand.
                    868: 
                    869: A typical use for this would be to distinguish certain types of
                    870: memory references that affect other insn operands.
                    871: 
                    872: Do not define these constraint letters to accept register references
                    873: (@code{reg}); the reload pass does not expect this and would not handle
                    874: it properly.
1.1.1.5   root      875: @end ifset
1.1       root      876: @end table
                    877: 
1.1.1.5   root      878: @ifset INTERNALS
1.1       root      879: In order to have valid assembler code, each operand must satisfy
                    880: its constraint.  But a failure to do so does not prevent the pattern
                    881: from applying to an insn.  Instead, it directs the compiler to modify
                    882: the code so that the constraint will be satisfied.  Usually this is
                    883: done by copying an operand into a register.
                    884: 
                    885: Contrast, therefore, the two instruction patterns that follow:
                    886: 
1.1.1.5   root      887: @smallexample
1.1       root      888: (define_insn ""
1.1.1.3   root      889:   [(set (match_operand:SI 0 "general_operand" "=r")
1.1       root      890:         (plus:SI (match_dup 0)
                    891:                  (match_operand:SI 1 "general_operand" "r")))]
                    892:   ""
                    893:   "@dots{}")
1.1.1.5   root      894: @end smallexample
1.1       root      895: 
                    896: @noindent
                    897: which has two operands, one of which must appear in two places, and
                    898: 
1.1.1.5   root      899: @smallexample
1.1       root      900: (define_insn ""
1.1.1.3   root      901:   [(set (match_operand:SI 0 "general_operand" "=r")
1.1       root      902:         (plus:SI (match_operand:SI 1 "general_operand" "0")
                    903:                  (match_operand:SI 2 "general_operand" "r")))]
                    904:   ""
                    905:   "@dots{}")
1.1.1.5   root      906: @end smallexample
1.1       root      907: 
                    908: @noindent
                    909: which has three operands, two of which are required by a constraint to be
                    910: identical.  If we are considering an insn of the form
                    911: 
1.1.1.5   root      912: @smallexample
1.1       root      913: (insn @var{n} @var{prev} @var{next}
                    914:   (set (reg:SI 3)
                    915:        (plus:SI (reg:SI 6) (reg:SI 109)))
                    916:   @dots{})
1.1.1.5   root      917: @end smallexample
1.1       root      918: 
                    919: @noindent
                    920: the first pattern would not apply at all, because this insn does not
                    921: contain two identical subexpressions in the right place.  The pattern would
                    922: say, ``That does not look like an add instruction; try other patterns.''
                    923: The second pattern would say, ``Yes, that's an add instruction, but there
                    924: is something wrong with it.''  It would direct the reload pass of the
                    925: compiler to generate additional insns to make the constraint true.  The
                    926: results might look like this:
                    927: 
1.1.1.5   root      928: @smallexample
1.1       root      929: (insn @var{n2} @var{prev} @var{n}
                    930:   (set (reg:SI 3) (reg:SI 6))
                    931:   @dots{})
                    932: 
                    933: (insn @var{n} @var{n2} @var{next}
                    934:   (set (reg:SI 3)
                    935:        (plus:SI (reg:SI 3) (reg:SI 109)))
                    936:   @dots{})
1.1.1.5   root      937: @end smallexample
1.1       root      938: 
                    939: It is up to you to make sure that each operand, in each pattern, has
                    940: constraints that can handle any RTL expression that could be present for
                    941: that operand.  (When multiple alternatives are in use, each pattern must,
                    942: for each possible combination of operand expressions, have at least one
                    943: alternative which can handle that combination of operands.)  The
                    944: constraints don't need to @emph{allow} any possible operand---when this is
                    945: the case, they do not constrain---but they must at least point the way to
                    946: reloading any possible operand so that it will fit.
                    947: 
                    948: @itemize @bullet
                    949: @item
                    950: If the constraint accepts whatever operands the predicate permits,
                    951: there is no problem: reloading is never necessary for this operand.
                    952: 
                    953: For example, an operand whose constraints permit everything except
                    954: registers is safe provided its predicate rejects registers.
                    955: 
                    956: An operand whose predicate accepts only constant values is safe
                    957: provided its constraints include the letter @samp{i}.  If any possible
                    958: constant value is accepted, then nothing less than @samp{i} will do;
                    959: if the predicate is more selective, then the constraints may also be
                    960: more selective.
                    961: 
                    962: @item
                    963: Any operand expression can be reloaded by copying it into a register.
                    964: So if an operand's constraints allow some kind of register, it is
                    965: certain to be safe.  It need not permit all classes of registers; the
                    966: compiler knows how to copy a register into another register of the
                    967: proper class in order to make an instruction valid.
                    968: 
                    969: @cindex nonoffsettable memory reference
                    970: @cindex memory reference, nonoffsettable
                    971: @item
                    972: A nonoffsettable memory reference can be reloaded by copying the
                    973: address into a register.  So if the constraint uses the letter
                    974: @samp{o}, all memory references are taken care of.
                    975: 
                    976: @item
                    977: A constant operand can be reloaded by allocating space in memory to
                    978: hold it as preinitialized data.  Then the memory reference can be used
                    979: in place of the constant.  So if the constraint uses the letters
                    980: @samp{o} or @samp{m}, constant operands are not a problem.
                    981: 
                    982: @item
                    983: If the constraint permits a constant and a pseudo register used in an insn
                    984: was not allocated to a hard register and is equivalent to a constant,
                    985: the register will be replaced with the constant.  If the predicate does
                    986: not permit a constant and the insn is re-recognized for some reason, the
                    987: compiler will crash.  Thus the predicate must always recognize any
                    988: objects allowed by the constraint.
                    989: @end itemize
                    990: 
                    991: If the operand's predicate can recognize registers, but the constraint does
                    992: not permit them, it can make the compiler crash.  When this operand happens
                    993: to be a register, the reload pass will be stymied, because it does not know
                    994: how to copy a register temporarily into memory.
1.1.1.5   root      995: @end ifset
1.1       root      996: 
1.1.1.5   root      997: @node Multi-Alternative
1.1       root      998: @subsection Multiple Alternative Constraints
                    999: @cindex multiple alternative constraints
                   1000: 
                   1001: Sometimes a single instruction has multiple alternative sets of possible
                   1002: operands.  For example, on the 68000, a logical-or instruction can combine
                   1003: register or an immediate value into memory, or it can combine any kind of
                   1004: operand into a register; but it cannot combine one memory location into
                   1005: another.
                   1006: 
                   1007: These constraints are represented as multiple alternatives.  An alternative
                   1008: can be described by a series of letters for each operand.  The overall
                   1009: constraint for an operand is made from the letters for this operand
                   1010: from the first alternative, a comma, the letters for this operand from
                   1011: the second alternative, a comma, and so on until the last alternative.
1.1.1.5   root     1012: @ifset INTERNALS
1.1       root     1013: Here is how it is done for fullword logical-or on the 68000:
                   1014: 
1.1.1.5   root     1015: @smallexample
1.1       root     1016: (define_insn "iorsi3"
                   1017:   [(set (match_operand:SI 0 "general_operand" "=m,d")
                   1018:         (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
                   1019:                 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
                   1020:   @dots{})
1.1.1.5   root     1021: @end smallexample
1.1       root     1022: 
                   1023: The first alternative has @samp{m} (memory) for operand 0, @samp{0} for
                   1024: operand 1 (meaning it must match operand 0), and @samp{dKs} for operand
                   1025: 2.  The second alternative has @samp{d} (data register) for operand 0,
                   1026: @samp{0} for operand 1, and @samp{dmKs} for operand 2.  The @samp{=} and
                   1027: @samp{%} in the constraints apply to all the alternatives; their
                   1028: meaning is explained in the next section (@pxref{Class Preferences}).
1.1.1.5   root     1029: @end ifset
1.1       root     1030: 
1.1.1.5   root     1031: @c FIXME Is this ? and ! stuff of use in asm()?  If not, hide unless INTERNAL
1.1       root     1032: If all the operands fit any one alternative, the instruction is valid.
                   1033: Otherwise, for each alternative, the compiler counts how many instructions
                   1034: must be added to copy the operands so that that alternative applies.
                   1035: The alternative requiring the least copying is chosen.  If two alternatives
                   1036: need the same amount of copying, the one that comes first is chosen.
                   1037: These choices can be altered with the @samp{?} and @samp{!} characters:
                   1038: 
                   1039: @table @code
                   1040: @cindex @samp{?} in constraint
                   1041: @cindex question mark
                   1042: @item ?
                   1043: Disparage slightly the alternative that the @samp{?} appears in,
                   1044: as a choice when no alternative applies exactly.  The compiler regards
                   1045: this alternative as one unit more costly for each @samp{?} that appears
                   1046: in it.
                   1047: 
                   1048: @cindex @samp{!} in constraint
                   1049: @cindex exclamation point
                   1050: @item !
                   1051: Disparage severely the alternative that the @samp{!} appears in.
                   1052: This alternative can still be used if it fits without reloading,
                   1053: but if reloading is needed, some other alternative will be used.
                   1054: @end table
                   1055: 
1.1.1.5   root     1056: @ifset INTERNALS
1.1       root     1057: When an insn pattern has multiple alternatives in its constraints, often
                   1058: the appearance of the assembler code is determined mostly by which
                   1059: alternative was matched.  When this is so, the C code for writing the
                   1060: assembler code can use the variable @code{which_alternative}, which is
                   1061: the ordinal number of the alternative that was actually satisfied (0 for
                   1062: the first, 1 for the second alternative, etc.).  @xref{Output Statement}.
1.1.1.5   root     1063: @end ifset
1.1       root     1064: 
1.1.1.5   root     1065: @ifset INTERNALS
                   1066: @node Class Preferences
1.1       root     1067: @subsection Register Class Preferences
                   1068: @cindex class preference constraints
                   1069: @cindex register class preference constraints
                   1070: 
                   1071: @cindex voting between constraint alternatives
                   1072: The operand constraints have another function: they enable the compiler
                   1073: to decide which kind of hardware register a pseudo register is best
                   1074: allocated to.  The compiler examines the constraints that apply to the
                   1075: insns that use the pseudo register, looking for the machine-dependent
                   1076: letters such as @samp{d} and @samp{a} that specify classes of registers.
                   1077: The pseudo register is put in whichever class gets the most ``votes''.
                   1078: The constraint letters @samp{g} and @samp{r} also vote: they vote in
                   1079: favor of a general register.  The machine description says which registers
                   1080: are considered general.
                   1081: 
                   1082: Of course, on some machines all registers are equivalent, and no register
                   1083: classes are defined.  Then none of this complexity is relevant.
1.1.1.5   root     1084: @end ifset
1.1       root     1085: 
1.1.1.5   root     1086: @node Modifiers
1.1       root     1087: @subsection Constraint Modifier Characters
                   1088: @cindex modifiers in constraints
                   1089: @cindex constraint modifier characters
                   1090: 
1.1.1.7 ! root     1091: @c prevent bad page break with this line
        !          1092: Here are constraint modifier characters.
        !          1093: 
1.1       root     1094: @table @samp
                   1095: @cindex @samp{=} in constraint
                   1096: @item =
                   1097: Means that this operand is write-only for this instruction: the previous
                   1098: value is discarded and replaced by output data.
                   1099: 
                   1100: @cindex @samp{+} in constraint
                   1101: @item +
                   1102: Means that this operand is both read and written by the instruction.
                   1103: 
                   1104: When the compiler fixes up the operands to satisfy the constraints,
                   1105: it needs to know which operands are inputs to the instruction and
                   1106: which are outputs from it.  @samp{=} identifies an output; @samp{+}
                   1107: identifies an operand that is both input and output; all other operands
                   1108: are assumed to be input only.
                   1109: 
                   1110: @cindex @samp{&} in constraint
                   1111: @item &
                   1112: Means (in a particular alternative) that this operand is written
                   1113: before the instruction is finished using the input operands.
                   1114: Therefore, this operand may not lie in a register that is used as an
                   1115: input operand or as part of any memory address.
                   1116: 
                   1117: @samp{&} applies only to the alternative in which it is written.  In
                   1118: constraints with multiple alternatives, sometimes one alternative
                   1119: requires @samp{&} while others do not.  See, for example, the
                   1120: @samp{movdf} insn of the 68000.
                   1121: 
                   1122: @samp{&} does not obviate the need to write @samp{=}.
                   1123: 
                   1124: @cindex @samp{%} in constraint
                   1125: @item %
                   1126: Declares the instruction to be commutative for this operand and the
                   1127: following operand.  This means that the compiler may interchange the
                   1128: two operands if that is the cheapest way to make all operands fit the
1.1.1.5   root     1129: constraints.
                   1130: @ifset INTERNALS
                   1131: This is often used in patterns for addition instructions
1.1       root     1132: that really have only two operands: the result must go in one of the
                   1133: arguments.  Here for example, is how the 68000 halfword-add
                   1134: instruction is defined:
                   1135: 
1.1.1.5   root     1136: @smallexample
1.1       root     1137: (define_insn "addhi3"
                   1138:   [(set (match_operand:HI 0 "general_operand" "=m,r")
                   1139:      (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
                   1140:               (match_operand:HI 2 "general_operand" "di,g")))]
                   1141:   @dots{})
1.1.1.5   root     1142: @end smallexample
                   1143: @end ifset
1.1       root     1144: 
                   1145: @cindex @samp{#} in constraint
                   1146: @item #
                   1147: Says that all following characters, up to the next comma, are to be
                   1148: ignored as a constraint.  They are significant only for choosing
                   1149: register preferences.
                   1150: 
1.1.1.5   root     1151: @ifset INTERNALS
1.1       root     1152: @cindex @samp{*} in constraint
                   1153: @item *
                   1154: Says that the following character should be ignored when choosing
                   1155: register preferences.  @samp{*} has no effect on the meaning of the
                   1156: constraint as a constraint, and no effect on reloading.
                   1157: 
                   1158: Here is an example: the 68000 has an instruction to sign-extend a
                   1159: halfword in a data register, and can also sign-extend a value by
                   1160: copying it into an address register.  While either kind of register is
                   1161: acceptable, the constraints on an address-register destination are
                   1162: less strict, so it is best if register allocation makes an address
                   1163: register its goal.  Therefore, @samp{*} is used so that the @samp{d}
                   1164: constraint letter (for data register) is ignored when computing
                   1165: register preferences.
                   1166: 
1.1.1.5   root     1167: @smallexample
1.1       root     1168: (define_insn "extendhisi2"
                   1169:   [(set (match_operand:SI 0 "general_operand" "=*d,a")
                   1170:         (sign_extend:SI
                   1171:          (match_operand:HI 1 "general_operand" "0,g")))]
                   1172:   @dots{})
1.1.1.5   root     1173: @end smallexample
                   1174: @end ifset
                   1175: @end table
                   1176: 
                   1177: @node Machine Constraints
                   1178: @subsection Constraints for Particular Machines
                   1179: @cindex machine specific constraints
                   1180: @cindex constraints, machine specific
                   1181: 
                   1182: Whenever possible, you should use the general-purpose constraint letters
                   1183: in @code{asm} arguments, since they will convey meaning more readily to
                   1184: people reading your code.  Failing that, use the constraint letters
                   1185: that usually have very similar meanings across architectures.  The most
                   1186: commonly used constraints are @samp{m} and @samp{r} (for memory and
                   1187: general-purpose registers respectively; @pxref{Simple Constraints}), and
                   1188: @samp{I}, usually the letter indicating the most common
                   1189: immediate-constant format.
                   1190: 
                   1191: For each machine architecture, the @file{config/@var{machine}.h} file
                   1192: defines additional constraints.  These constraints are used by the
                   1193: compiler itself for instruction generation, as well as for @code{asm}
                   1194: statements; therefore, some of the constraints are not particularly
                   1195: interesting for @code{asm}.  The constraints are defined through these
                   1196: macros:
                   1197: 
                   1198: @table @code
                   1199: @item REG_CLASS_FROM_LETTER
                   1200: Register class constraints (usually lower case).
                   1201: 
                   1202: @item CONST_OK_FOR_LETTER_P
                   1203: Immediate constant constraints, for non-floating point constants of
                   1204: word size or smaller precision (usually upper case).
                   1205: 
                   1206: @item CONST_DOUBLE_OK_FOR_LETTER_P
                   1207: Immediate constant constraints, for all floating point constants and for
                   1208: constants of greater than word size precision (usually upper case).
                   1209: 
                   1210: @item EXTRA_CONSTRAINT
                   1211: Special cases of registers or memory.  This macro is not required, and
                   1212: is only defined for some machines.
                   1213: @end table
                   1214: 
                   1215: Inspecting these macro definitions in the compiler source for your
                   1216: machine is the best way to be certain you have the right constraints.
                   1217: However, here is a summary of the machine-dependent constraints
                   1218: available on some particular machines.
                   1219: 
                   1220: @table @emph
1.1.1.7 ! root     1221: @item ARM family---@file{arm.h}
        !          1222: @table @code
        !          1223: @item f
        !          1224: Floating-point register
        !          1225: 
        !          1226: @item F
        !          1227: One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0
        !          1228: or 10.0
        !          1229: 
        !          1230: @item G
        !          1231: Floating-point constant that would satisfy the constraint @samp{F} if it
        !          1232: were negated
        !          1233: 
        !          1234: @item I
        !          1235: Integer that is valid as an immediate operand in a data processing
        !          1236: instruction.  That is, an integer in the range 0 to 255 rotated by a
        !          1237: multiple of 2
        !          1238: 
        !          1239: @item J
        !          1240: Integer in the range -4095 to 4095
        !          1241: 
        !          1242: @item K
        !          1243: Integer that satisfies constraint @samp{I} when inverted (ones complement)
        !          1244: 
        !          1245: @item L
        !          1246: Integer that satisfies constraint @samp{I} when negated (twos complement)
        !          1247: 
        !          1248: @item M
        !          1249: Integer in the range 0 to 32
        !          1250: 
        !          1251: @item Q
        !          1252: A memory reference where the exact address is in a single register 
        !          1253: (`@samp{m}' is preferable for @code{asm} statements)
        !          1254: 
        !          1255: @item R
        !          1256: An item in the constant pool
        !          1257: 
        !          1258: @item S
        !          1259: A symbol in the text segment of the current file
        !          1260: @end table
        !          1261: 
1.1.1.5   root     1262: @item AMD 29000 family---@file{a29k.h}
                   1263: @table @code
                   1264: @item l
                   1265: Local register 0
                   1266: 
                   1267: @item b
                   1268: Byte Pointer (@samp{BP}) register
                   1269: 
                   1270: @item q
                   1271: @samp{Q} register
                   1272: 
                   1273: @item h
                   1274: Special purpose register
                   1275: 
                   1276: @item A
                   1277: First accumulator register
                   1278: 
                   1279: @item a
                   1280: Other accumulator register
                   1281: 
                   1282: @item f
                   1283: Floating point register
                   1284: 
                   1285: @item I
                   1286: Constant greater than 0, less than 0x100
                   1287: 
                   1288: @item J
                   1289: Constant greater than 0, less than 0x10000
                   1290: 
                   1291: @item K
                   1292: Constant whose high 24 bits are on (1)
                   1293: 
                   1294: @item L
                   1295: 16 bit constant whose high 8 bits are on (1)
                   1296: 
                   1297: @item M
                   1298: 32 bit constant whose high 16 bits are on (1)
                   1299: 
                   1300: @item N
                   1301: 32 bit negative constant that fits in 8 bits
                   1302: 
                   1303: @item O
                   1304: The constant 0x80000000 or, on the 29050, any 32 bit constant
                   1305: whose low 16 bits are 0.
                   1306: 
                   1307: @item P
                   1308: 16 bit negative constant that fits in 8 bits
                   1309: 
                   1310: @item G
                   1311: @itemx H
                   1312: A floating point constant (in @code{asm} statements, use the machine
                   1313: independent @samp{E} or @samp{F} instead)
                   1314: @end table
                   1315: 
                   1316: @item IBM RS6000---@file{rs6000.h}
                   1317: @table @code
                   1318: @item b
                   1319: Address base register
                   1320: 
                   1321: @item f
                   1322: Floating point register
                   1323: 
                   1324: @item h
                   1325: @samp{MQ}, @samp{CTR}, or @samp{LINK} register
                   1326: 
                   1327: @item q
                   1328: @samp{MQ} register
                   1329: 
                   1330: @item c
                   1331: @samp{CTR} register
                   1332: 
                   1333: @item l
                   1334: @samp{LINK} register
                   1335: 
                   1336: @item x
                   1337: @samp{CR} register (condition register) number 0
                   1338: 
                   1339: @item y
                   1340: @samp{CR} register (condition register)
                   1341: 
                   1342: @item I
                   1343: Signed 16 bit constant
                   1344: 
                   1345: @item J
                   1346: Constant whose low 16 bits are 0
                   1347: 
                   1348: @item K
                   1349: Constant whose high 16 bits are 0
                   1350: 
                   1351: @item L
                   1352: Constant suitable as a mask operand
                   1353: 
                   1354: @item M
                   1355: Constant larger than 31
                   1356: 
                   1357: @item N
                   1358: Exact power of 2
                   1359: 
                   1360: @item O
                   1361: Zero
                   1362: 
                   1363: @item P
                   1364: Constant whose negation is a signed 16 bit constant
                   1365: 
                   1366: @item G
                   1367: Floating point constant that can be loaded into a register with one
                   1368: instruction per word
                   1369: 
                   1370: @item Q
                   1371: Memory operand that is an offset from a register (@samp{m} is preferable
                   1372: for @code{asm} statements)
                   1373: @end table
                   1374: 
                   1375: @item Intel 386---@file{i386.h}
                   1376: @table @code
                   1377: @item q
                   1378: @samp{a}, @code{b}, @code{c}, or @code{d} register
                   1379: 
1.1.1.7 ! root     1380: @item A
        !          1381: @samp{a}, or @code{d} register (for 64-bit ints)
        !          1382: 
1.1.1.5   root     1383: @item f
                   1384: Floating point register
                   1385: 
                   1386: @item t
                   1387: First (top of stack) floating point register
                   1388: 
                   1389: @item u
                   1390: Second floating point register
                   1391: 
                   1392: @item a
                   1393: @samp{a} register
                   1394: 
                   1395: @item b
                   1396: @samp{b} register
                   1397: 
                   1398: @item c
                   1399: @samp{c} register
                   1400: 
                   1401: @item d
                   1402: @samp{d} register
                   1403: 
                   1404: @item D
                   1405: @samp{di} register
                   1406: 
                   1407: @item S
                   1408: @samp{si} register
                   1409: 
                   1410: @item I
                   1411: Constant in range 0 to 31 (for 32 bit shifts)
                   1412: 
                   1413: @item J
                   1414: Constant in range 0 to 63 (for 64 bit shifts)
                   1415: 
                   1416: @item K
                   1417: @samp{0xff}
                   1418: 
                   1419: @item L
                   1420: @samp{0xffff}
                   1421: 
                   1422: @item M
                   1423: 0, 1, 2, or 3 (shifts for @code{lea} instruction)
                   1424: 
                   1425: @item G
                   1426: Standard 80387 floating point constant
                   1427: @end table
                   1428: 
                   1429: @item Intel 960---@file{i960.h}
                   1430: @table @code
                   1431: @item f
                   1432: Floating point register (@code{fp0} to @code{fp3})
                   1433: 
                   1434: @item l
                   1435: Local register (@code{r0} to @code{r15})
                   1436: 
                   1437: @item b
                   1438: Global register (@code{g0} to @code{g15})
                   1439: 
                   1440: @item d
                   1441: Any local or global register
                   1442: 
                   1443: @item I
                   1444: Integers from 0 to 31
                   1445: 
                   1446: @item J
                   1447: 0
                   1448: 
                   1449: @item K
                   1450: Integers from -31 to 0
                   1451: 
                   1452: @item G
                   1453: Floating point 0
                   1454: 
                   1455: @item H
                   1456: Floating point 1
                   1457: @end table
                   1458: 
                   1459: @item MIPS---@file{mips.h}
                   1460: @table @code
                   1461: @item d
                   1462: General-purpose integer register
                   1463: 
                   1464: @item f
                   1465: Floating-point register (if available)
                   1466: 
                   1467: @item h
                   1468: @samp{Hi} register
                   1469: 
                   1470: @item l
                   1471: @samp{Lo} register
                   1472: 
                   1473: @item x
                   1474: @samp{Hi} or @samp{Lo} register
                   1475: 
                   1476: @item y
                   1477: General-purpose integer register
                   1478: 
                   1479: @item z
                   1480: Floating-point status register
                   1481: 
                   1482: @item I
                   1483: Signed 16 bit constant (for arithmetic instructions)
                   1484: 
                   1485: @item J
                   1486: Zero
                   1487: 
                   1488: @item K
                   1489: Zero-extended 16-bit constant (for logic instructions)
                   1490: 
                   1491: @item L
                   1492: Constant with low 16 bits zero (can be loaded with @code{lui})
                   1493: 
                   1494: @item M
                   1495: 32 bit constant which requires two instructions to load (a constant
                   1496: which is not @samp{I}, @samp{K}, or @samp{L})
                   1497: 
                   1498: @item N
                   1499: Negative 16 bit constant
                   1500: 
                   1501: @item O
                   1502: Exact power of two
                   1503: 
                   1504: @item P
                   1505: Positive 16 bit constant
                   1506: 
                   1507: @item G
                   1508: Floating point zero
                   1509: 
                   1510: @item Q
                   1511: Memory reference that can be loaded with more than one instruction
                   1512: (@samp{m} is preferable for @code{asm} statements)
                   1513: 
                   1514: @item R
                   1515: Memory reference that can be loaded with one instruction
                   1516: (@samp{m} is preferable for @code{asm} statements)
                   1517: 
                   1518: @item S
                   1519: Memory reference in external OSF/rose PIC format
                   1520: (@samp{m} is preferable for @code{asm} statements)
1.1       root     1521: @end table
                   1522: 
1.1.1.5   root     1523: @item Motorola 680x0---@file{m68k.h}
                   1524: @table @code
                   1525: @item a
                   1526: Address register
                   1527: 
                   1528: @item d
                   1529: Data register
                   1530: 
                   1531: @item f
                   1532: 68881 floating-point register, if available
                   1533: 
                   1534: @item x
                   1535: Sun FPA (floating-point) register, if available
                   1536: 
                   1537: @item y
                   1538: First 16 Sun FPA registers, if available
                   1539: 
                   1540: @item I
                   1541: Integer in the range 1 to 8
                   1542: 
                   1543: @item J
                   1544: 16 bit signed number
                   1545: 
                   1546: @item K
                   1547: Signed number whose magnitude is greater than 0x80
                   1548: 
                   1549: @item L
                   1550: Integer in the range -8 to -1
                   1551: 
                   1552: @item G
                   1553: Floating point constant that is not a 68881 constant
                   1554: 
                   1555: @item H
                   1556: Floating point constant that can be used by Sun FPA
                   1557: @end table
                   1558: 
                   1559: @need 1000
                   1560: @item SPARC---@file{sparc.h}
                   1561: @table @code
                   1562: @item f
                   1563: Floating-point register
                   1564: 
                   1565: @item I
                   1566: Signed 13 bit constant
                   1567: 
                   1568: @item J
                   1569: Zero
                   1570: 
                   1571: @item K
                   1572: 32 bit constant with the low 12 bits clear (a constant that can be
                   1573: loaded with the @code{sethi} instruction)
                   1574: 
                   1575: @item G
                   1576: Floating-point zero
                   1577: 
                   1578: @item H
                   1579: Signed 13 bit constant, sign-extended to 32 or 64 bits
                   1580: 
                   1581: @item Q
                   1582: Memory reference that can be loaded with one instruction  (@samp{m} is
                   1583: more appropriate for @code{asm} statements)
                   1584: 
                   1585: @item S
                   1586: Constant, or memory address
                   1587: 
                   1588: @item T
                   1589: Memory address aligned to an 8-byte boundary
                   1590: 
                   1591: @item U 
                   1592: Even register
                   1593: @end table
                   1594: @end table
                   1595: 
                   1596: @ifset INTERNALS
                   1597: @node No Constraints
1.1       root     1598: @subsection Not Using Constraints
                   1599: @cindex no constraints
                   1600: @cindex not using constraints
                   1601: 
                   1602: Some machines are so clean that operand constraints are not required.  For
                   1603: example, on the Vax, an operand valid in one context is valid in any other
                   1604: context.  On such a machine, every operand constraint would be @samp{g},
                   1605: excepting only operands of ``load address'' instructions which are
                   1606: written as if they referred to a memory location's contents but actual
                   1607: refer to its address.  They would have constraint @samp{p}.
                   1608: 
                   1609: @cindex empty constraints
                   1610: For such machines, instead of writing @samp{g} and @samp{p} for all
                   1611: the constraints, you can choose to write a description with empty constraints.
                   1612: Then you write @samp{""} for the constraint in every @code{match_operand}.
                   1613: Address operands are identified by writing an @code{address} expression
                   1614: around the @code{match_operand}, not by their constraints.
                   1615: 
                   1616: When the machine description has just empty constraints, certain parts
                   1617: of compilation are skipped, making the compiler faster.  However,
                   1618: few machines actually do not need constraints; all machine descriptions
                   1619: now in existence use constraints.
1.1.1.5   root     1620: @end ifset
1.1       root     1621: 
1.1.1.5   root     1622: @ifset INTERNALS
                   1623: @node Standard Names
                   1624: @section Standard Pattern Names For Generation
1.1       root     1625: @cindex standard pattern names
                   1626: @cindex pattern names
                   1627: @cindex names, pattern
                   1628: 
                   1629: Here is a table of the instruction names that are meaningful in the RTL
                   1630: generation pass of the compiler.  Giving one of these names to an
                   1631: instruction pattern tells the RTL generation pass that it can use the
                   1632: pattern in to accomplish a certain task.
                   1633: 
                   1634: @table @asis
                   1635: @cindex @code{mov@var{m}} instruction pattern
                   1636: @item @samp{mov@var{m}}
                   1637: Here @var{m} stands for a two-letter machine mode name, in lower case.
                   1638: This instruction pattern moves data with that machine mode from operand
                   1639: 1 to operand 0.  For example, @samp{movsi} moves full-word data.
                   1640: 
                   1641: If operand 0 is a @code{subreg} with mode @var{m} of a register whose
                   1642: own mode is wider than @var{m}, the effect of this instruction is
                   1643: to store the specified value in the part of the register that corresponds
                   1644: to mode @var{m}.  The effect on the rest of the register is undefined.
                   1645: 
                   1646: This class of patterns is special in several ways.  First of all, each
                   1647: of these names @emph{must} be defined, because there is no other way
                   1648: to copy a datum from one place to another.
                   1649: 
                   1650: Second, these patterns are not used solely in the RTL generation pass.
                   1651: Even the reload pass can generate move insns to copy values from stack
                   1652: slots into temporary registers.  When it does so, one of the operands is
                   1653: a hard register and the other is an operand that can need to be reloaded
                   1654: into a register.
                   1655: 
                   1656: @findex force_reg
                   1657: Therefore, when given such a pair of operands, the pattern must generate
                   1658: RTL which needs no reloading and needs no temporary registers---no
                   1659: registers other than the operands.  For example, if you support the
                   1660: pattern with a @code{define_expand}, then in such a case the
                   1661: @code{define_expand} mustn't call @code{force_reg} or any other such
                   1662: function which might generate new pseudo registers.
                   1663: 
                   1664: This requirement exists even for subword modes on a RISC machine where
                   1665: fetching those modes from memory normally requires several insns and
                   1666: some temporary registers.  Look in @file{spur.md} to see how the
                   1667: requirement can be satisfied.
                   1668: 
                   1669: @findex change_address
                   1670: During reload a memory reference with an invalid address may be passed
                   1671: as an operand.  Such an address will be replaced with a valid address
                   1672: later in the reload pass.  In this case, nothing may be done with the
                   1673: address except to use it as it stands.  If it is copied, it will not be
                   1674: replaced with a valid address.  No attempt should be made to make such
                   1675: an address into a valid address and no routine (such as
                   1676: @code{change_address}) that will do so may be called.  Note that
                   1677: @code{general_operand} will fail when applied to such an address.
                   1678: 
                   1679: @findex reload_in_progress
                   1680: The global variable @code{reload_in_progress} (which must be explicitly
                   1681: declared if required) can be used to determine whether such special
                   1682: handling is required.
                   1683: 
                   1684: The variety of operands that have reloads depends on the rest of the
                   1685: machine description, but typically on a RISC machine these can only be
                   1686: pseudo registers that did not get hard registers, while on other
                   1687: machines explicit memory references will get optional reloads.
                   1688: 
                   1689: If a scratch register is required to move an object to or from memory,
                   1690: it can be allocated using @code{gen_reg_rtx} prior to reload.  But this
                   1691: is impossible during and after reload.  If there are cases needing
                   1692: scratch registers after reload, you must define
1.1.1.5   root     1693: @code{SECONDARY_INPUT_RELOAD_CLASS} and perhaps also
1.1       root     1694: @code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide
                   1695: patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle
                   1696: them.  @xref{Register Classes}.
                   1697: 
                   1698: The constraints on a @samp{move@var{m}} must permit moving any hard
                   1699: register to any other hard register provided that
                   1700: @code{HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and
                   1701: @code{REGISTER_MOVE_COST} applied to their classes returns a value of 2.
                   1702: 
                   1703: It is obligatory to support floating point @samp{move@var{m}}
                   1704: instructions into and out of any registers that can hold fixed point
                   1705: values, because unions and structures (which have modes @code{SImode} or
                   1706: @code{DImode}) can be in those registers and they may have floating
                   1707: point members.
                   1708: 
                   1709: There may also be a need to support fixed point @samp{move@var{m}}
                   1710: instructions in and out of floating point registers.  Unfortunately, I
                   1711: have forgotten why this was so, and I don't know whether it is still
                   1712: true.  If @code{HARD_REGNO_MODE_OK} rejects fixed point values in
                   1713: floating point registers, then the constraints of the fixed point
                   1714: @samp{move@var{m}} instructions must be designed to avoid ever trying to
                   1715: reload into a floating point register.
                   1716: 
1.1.1.3   root     1717: @cindex @code{reload_in} instruction pattern
                   1718: @cindex @code{reload_out} instruction pattern
1.1       root     1719: @item @samp{reload_in@var{m}}
                   1720: @itemx @samp{reload_out@var{m}}
                   1721: Like @samp{mov@var{m}}, but used when a scratch register is required to
                   1722: move between operand 0 and operand 1.  Operand 2 describes the scratch
                   1723: register.  See the discussion of the @code{SECONDARY_RELOAD_CLASS}
                   1724: macro in @pxref{Register Classes}.
                   1725: 
                   1726: @cindex @code{movstrict@var{m}} instruction pattern
                   1727: @item @samp{movstrict@var{m}}
                   1728: Like @samp{mov@var{m}} except that if operand 0 is a @code{subreg}
                   1729: with mode @var{m} of a register whose natural mode is wider,
                   1730: the @samp{movstrict@var{m}} instruction is guaranteed not to alter
                   1731: any of the register except the part which belongs to mode @var{m}.
                   1732: 
1.1.1.3   root     1733: @cindex @code{load_multiple} instruction pattern
1.1.1.7 ! root     1734: @item @samp{load_multiple}
1.1.1.3   root     1735: Load several consecutive memory locations into consecutive registers.
                   1736: Operand 0 is the first of the consecutive registers, operand 1
                   1737: is the first memory location, and operand 2 is a constant: the
                   1738: number of consecutive registers.
                   1739: 
                   1740: Define this only if the target machine really has such an instruction;
                   1741: do not define this if the most efficient way of loading consecutive
                   1742: registers from memory is to do them one at a time.
                   1743: 
                   1744: On some machines, there are restrictions as to which consecutive
                   1745: registers can be stored into memory, such as particular starting or
                   1746: ending register numbers or only a range of valid counts.  For those
                   1747: machines, use a @code{define_expand} (@pxref{Expander Definitions})
                   1748: and make the pattern fail if the restrictions are not met.
                   1749: 
                   1750: Write the generated insn as a @code{parallel} with elements being a
                   1751: @code{set} of one register from the appropriate memory location (you may
                   1752: also need @code{use} or @code{clobber} elements).  Use a
                   1753: @code{match_parallel} (@pxref{RTL Template}) to recognize the insn.  See
                   1754: @file{a29k.md} and @file{rs6000.md} for examples of the use of this insn
                   1755: pattern.
                   1756: 
                   1757: @cindex @samp{store_multiple} instruction pattern
1.1.1.7 ! root     1758: @item @samp{store_multiple}
1.1.1.3   root     1759: Similar to @samp{load_multiple}, but store several consecutive registers
                   1760: into consecutive memory locations.  Operand 0 is the first of the
                   1761: consecutive memory locations, operand 1 is the first register, and
                   1762: operand 2 is a constant: the number of consecutive registers.
                   1763: 
1.1       root     1764: @cindex @code{add@var{m}3} instruction pattern
                   1765: @item @samp{add@var{m}3}
                   1766: Add operand 2 and operand 1, storing the result in operand 0.  All operands
                   1767: must have mode @var{m}.  This can be used even on two-address machines, by
                   1768: means of constraints requiring operands 1 and 0 to be the same location.
                   1769: 
                   1770: @cindex @code{sub@var{m}3} instruction pattern
                   1771: @cindex @code{mul@var{m}3} instruction pattern
                   1772: @cindex @code{div@var{m}3} instruction pattern
                   1773: @cindex @code{udiv@var{m}3} instruction pattern
                   1774: @cindex @code{mod@var{m}3} instruction pattern
                   1775: @cindex @code{umod@var{m}3} instruction pattern
                   1776: @cindex @code{min@var{m}3} instruction pattern
                   1777: @cindex @code{max@var{m}3} instruction pattern
                   1778: @cindex @code{umin@var{m}3} instruction pattern
                   1779: @cindex @code{umax@var{m}3} instruction pattern
                   1780: @cindex @code{and@var{m}3} instruction pattern
                   1781: @cindex @code{ior@var{m}3} instruction pattern
                   1782: @cindex @code{xor@var{m}3} instruction pattern
                   1783: @item @samp{sub@var{m}3}, @samp{mul@var{m}3}
                   1784: @itemx @samp{div@var{m}3}, @samp{udiv@var{m}3}, @samp{mod@var{m}3}, @samp{umod@var{m}3}
                   1785: @itemx @samp{smin@var{m}3}, @samp{smax@var{m}3}, @samp{umin@var{m}3}, @samp{umax@var{m}3}
                   1786: @itemx @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3}
                   1787: Similar, for other arithmetic operations.
                   1788: 
                   1789: @cindex @code{mulhisi3} instruction pattern
                   1790: @item @samp{mulhisi3}
                   1791: Multiply operands 1 and 2, which have mode @code{HImode}, and store
                   1792: a @code{SImode} product in operand 0.
                   1793: 
                   1794: @cindex @code{mulqihi3} instruction pattern
                   1795: @cindex @code{mulsidi3} instruction pattern
                   1796: @item @samp{mulqihi3}, @samp{mulsidi3}
                   1797: Similar widening-multiplication instructions of other widths.
                   1798: 
                   1799: @cindex @code{umulqihi3} instruction pattern
                   1800: @cindex @code{umulhisi3} instruction pattern
                   1801: @cindex @code{umulsidi3} instruction pattern
                   1802: @item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3}
                   1803: Similar widening-multiplication instructions that do unsigned
                   1804: multiplication.
                   1805: 
                   1806: @cindex @code{divmod@var{m}4} instruction pattern
                   1807: @item @samp{divmod@var{m}4}
                   1808: Signed division that produces both a quotient and a remainder.
                   1809: Operand 1 is divided by operand 2 to produce a quotient stored
                   1810: in operand 0 and a remainder stored in operand 3.
                   1811: 
                   1812: For machines with an instruction that produces both a quotient and a
                   1813: remainder, provide a pattern for @samp{divmod@var{m}4} but do not
                   1814: provide patterns for @samp{div@var{m}3} and @samp{mod@var{m}3}.  This
                   1815: allows optimization in the relatively common case when both the quotient
                   1816: and remainder are computed.
                   1817: 
                   1818: If an instruction that just produces a quotient or just a remainder
                   1819: exists and is more efficient than the instruction that produces both,
                   1820: write the output routine of @samp{divmod@var{m}4} to call
                   1821: @code{find_reg_note} and look for a @code{REG_UNUSED} note on the
                   1822: quotient or remainder and generate the appropriate instruction.
                   1823: 
                   1824: @cindex @code{udivmod@var{m}4} instruction pattern
                   1825: @item @samp{udivmod@var{m}4}
                   1826: Similar, but does unsigned division.
                   1827: 
                   1828: @cindex @code{ashl@var{m}3} instruction pattern
                   1829: @item @samp{ashl@var{m}3}
1.1.1.3   root     1830: Arithmetic-shift operand 1 left by a number of bits specified by operand
                   1831: 2, and store the result in operand 0.  Here @var{m} is the mode of
                   1832: operand 0 and operand 1; operand 2's mode is specified by the
                   1833: instruction pattern, and the compiler will convert the operand to that
                   1834: mode before generating the instruction.
1.1       root     1835: 
                   1836: @cindex @code{ashr@var{m}3} instruction pattern
                   1837: @cindex @code{lshr@var{m}3} instruction pattern
                   1838: @cindex @code{rotl@var{m}3} instruction pattern
                   1839: @cindex @code{rotr@var{m}3} instruction pattern
1.1.1.7 ! root     1840: @item @samp{ashr@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3}
1.1.1.3   root     1841: Other shift and rotate instructions, analogous to the
                   1842: @code{ashl@var{m}3} instructions.
1.1       root     1843: 
                   1844: @cindex @code{neg@var{m}2} instruction pattern
                   1845: @item @samp{neg@var{m}2}
                   1846: Negate operand 1 and store the result in operand 0.
                   1847: 
                   1848: @cindex @code{abs@var{m}2} instruction pattern
                   1849: @item @samp{abs@var{m}2}
                   1850: Store the absolute value of operand 1 into operand 0.
                   1851: 
                   1852: @cindex @code{sqrt@var{m}2} instruction pattern
                   1853: @item @samp{sqrt@var{m}2}
                   1854: Store the square root of operand 1 into operand 0.
                   1855: 
1.1.1.3   root     1856: The @code{sqrt} built-in function of C always uses the mode which
                   1857: corresponds to the C data type @code{double}.
                   1858: 
1.1       root     1859: @cindex @code{ffs@var{m}2} instruction pattern
                   1860: @item @samp{ffs@var{m}2}
                   1861: Store into operand 0 one plus the index of the least significant 1-bit
                   1862: of operand 1.  If operand 1 is zero, store zero.  @var{m} is the mode
                   1863: of operand 0; operand 1's mode is specified by the instruction
                   1864: pattern, and the compiler will convert the operand to that mode before
                   1865: generating the instruction.
                   1866: 
1.1.1.3   root     1867: The @code{ffs} built-in function of C always uses the mode which
                   1868: corresponds to the C data type @code{int}.
                   1869: 
1.1       root     1870: @cindex @code{one_cmpl@var{m}2} instruction pattern
                   1871: @item @samp{one_cmpl@var{m}2}
                   1872: Store the bitwise-complement of operand 1 into operand 0.
                   1873: 
                   1874: @cindex @code{cmp@var{m}} instruction pattern
                   1875: @item @samp{cmp@var{m}}
                   1876: Compare operand 0 and operand 1, and set the condition codes.
                   1877: The RTL pattern should look like this:
                   1878: 
1.1.1.5   root     1879: @smallexample
1.1       root     1880: (set (cc0) (compare (match_operand:@var{m} 0 @dots{})
                   1881:                     (match_operand:@var{m} 1 @dots{})))
1.1.1.5   root     1882: @end smallexample
1.1       root     1883: 
                   1884: @cindex @code{tst@var{m}} instruction pattern
                   1885: @item @samp{tst@var{m}}
                   1886: Compare operand 0 against zero, and set the condition codes.
                   1887: The RTL pattern should look like this:
                   1888: 
1.1.1.5   root     1889: @smallexample
1.1       root     1890: (set (cc0) (match_operand:@var{m} 0 @dots{}))
1.1.1.5   root     1891: @end smallexample
1.1       root     1892: 
                   1893: @samp{tst@var{m}} patterns should not be defined for machines that do
                   1894: not use @code{(cc0)}.  Doing so would confuse the optimizer since it
                   1895: would no longer be clear which @code{set} operations were comparisons.
                   1896: The @samp{cmp@var{m}} patterns should be used instead.
                   1897: 
                   1898: @cindex @code{movstr@var{m}} instruction pattern
                   1899: @item @samp{movstr@var{m}}
                   1900: Block move instruction.  The addresses of the destination and source
                   1901: strings are the first two operands, and both are in mode @code{Pmode}.
                   1902: The number of bytes to move is the third operand, in mode @var{m}.
                   1903: 
                   1904: The fourth operand is the known shared alignment of the source and
                   1905: destination, in the form of a @code{const_int} rtx.  Thus, if the
                   1906: compiler knows that both source and destination are word-aligned,
                   1907: it may provide the value 4 for this operand.
                   1908: 
                   1909: These patterns need not give special consideration to the possibility
                   1910: that the source and destination strings might overlap.
                   1911: 
                   1912: @cindex @code{cmpstr@var{m}} instruction pattern
                   1913: @item @samp{cmpstr@var{m}}
                   1914: Block compare instruction, with five operands.  Operand 0 is the output;
                   1915: it has mode @var{m}.  The remaining four operands are like the operands
                   1916: of @samp{movstr@var{m}}.  The two memory blocks specified are compared
                   1917: byte by byte in lexicographic order.  The effect of the instruction is
                   1918: to store a value in operand 0 whose sign indicates the result of the
                   1919: comparison.
                   1920: 
1.1.1.5   root     1921: @cindex @code{strlen@var{m}} instruction pattern
                   1922: Compute the length of a string, with three operands.
                   1923: Operand 0 is the result (of mode @var{m}), operand 1 is
                   1924: a @code{mem} referring to the first character of the string,
                   1925: operand 2 is the character to search for (normally zero),
                   1926: and operand 3 is a constant describing the known alignment
                   1927: of the beginning of the string.
                   1928: 
1.1       root     1929: @cindex @code{float@var{mn}2} instruction pattern
                   1930: @item @samp{float@var{m}@var{n}2}
                   1931: Convert signed integer operand 1 (valid for fixed point mode @var{m}) to
                   1932: floating point mode @var{n} and store in operand 0 (which has mode
                   1933: @var{n}).
                   1934: 
                   1935: @cindex @code{floatuns@var{mn}2} instruction pattern
                   1936: @item @samp{floatuns@var{m}@var{n}2}
                   1937: Convert unsigned integer operand 1 (valid for fixed point mode @var{m})
                   1938: to floating point mode @var{n} and store in operand 0 (which has mode
                   1939: @var{n}).
                   1940: 
                   1941: @cindex @code{fix@var{mn}2} instruction pattern
                   1942: @item @samp{fix@var{m}@var{n}2}
                   1943: Convert operand 1 (valid for floating point mode @var{m}) to fixed
                   1944: point mode @var{n} as a signed number and store in operand 0 (which
                   1945: has mode @var{n}).  This instruction's result is defined only when
                   1946: the value of operand 1 is an integer.
                   1947: 
                   1948: @cindex @code{fixuns@var{mn}2} instruction pattern
                   1949: @item @samp{fixuns@var{m}@var{n}2}
                   1950: Convert operand 1 (valid for floating point mode @var{m}) to fixed
                   1951: point mode @var{n} as an unsigned number and store in operand 0 (which
                   1952: has mode @var{n}).  This instruction's result is defined only when the
                   1953: value of operand 1 is an integer.
                   1954: 
                   1955: @cindex @code{ftrunc@var{m}2} instruction pattern
                   1956: @item @samp{ftrunc@var{m}2}
                   1957: Convert operand 1 (valid for floating point mode @var{m}) to an
                   1958: integer value, still represented in floating point mode @var{m}, and
                   1959: store it in operand 0 (valid for floating point mode @var{m}).
                   1960: 
                   1961: @cindex @code{fix_trunc@var{mn}2} instruction pattern
                   1962: @item @samp{fix_trunc@var{m}@var{n}2}
                   1963: Like @samp{fix@var{m}@var{n}2} but works for any floating point value
                   1964: of mode @var{m} by converting the value to an integer.
                   1965: 
                   1966: @cindex @code{fixuns_trunc@var{mn}2} instruction pattern
                   1967: @item @samp{fixuns_trunc@var{m}@var{n}2}
                   1968: Like @samp{fixuns@var{m}@var{n}2} but works for any floating point
                   1969: value of mode @var{m} by converting the value to an integer.
                   1970: 
                   1971: @cindex @code{trunc@var{mn}} instruction pattern
                   1972: @item @samp{trunc@var{m}@var{n}}
                   1973: Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and
                   1974: store in operand 0 (which has mode @var{n}).  Both modes must be fixed
                   1975: point or both floating point.
                   1976: 
                   1977: @cindex @code{extend@var{mn}} instruction pattern
                   1978: @item @samp{extend@var{m}@var{n}}
                   1979: Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
                   1980: store in operand 0 (which has mode @var{n}).  Both modes must be fixed
                   1981: point or both floating point.
                   1982: 
                   1983: @cindex @code{zero_extend@var{mn}} instruction pattern
                   1984: @item @samp{zero_extend@var{m}@var{n}}
                   1985: Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
                   1986: store in operand 0 (which has mode @var{n}).  Both modes must be fixed
                   1987: point.
                   1988: 
                   1989: @cindex @code{extv} instruction pattern
                   1990: @item @samp{extv}
                   1991: Extract a bit field from operand 1 (a register or memory operand), where
                   1992: operand 2 specifies the width in bits and operand 3 the starting bit,
                   1993: and store it in operand 0.  Operand 0 must have mode @code{word_mode}.
                   1994: Operand 1 may have mode @code{byte_mode} or @code{word_mode}; often
                   1995: @code{word_mode} is allowed only for registers.  Operands 2 and 3 must
                   1996: be valid for @code{word_mode}.
                   1997: 
                   1998: The RTL generation pass generates this instruction only with constants
                   1999: for operands 2 and 3.
                   2000: 
                   2001: The bit-field value is sign-extended to a full word integer
                   2002: before it is stored in operand 0.
                   2003: 
                   2004: @cindex @code{extzv} instruction pattern
                   2005: @item @samp{extzv}
                   2006: Like @samp{extv} except that the bit-field value is zero-extended.
                   2007: 
                   2008: @cindex @code{insv} instruction pattern
                   2009: @item @samp{insv}
                   2010: Store operand 3 (which must be valid for @code{word_mode}) into a bit
                   2011: field in operand 0, where operand 1 specifies the width in bits and
                   2012: operand 2 the starting bit.  Operand 0 may have mode @code{byte_mode} or
                   2013: @code{word_mode}; often @code{word_mode} is allowed only for registers.
                   2014: Operands 1 and 2 must be valid for @code{word_mode}.
                   2015: 
                   2016: The RTL generation pass generates this instruction only with constants
                   2017: for operands 1 and 2.
                   2018: 
                   2019: @cindex @code{s@var{cond}} instruction pattern
                   2020: @item @samp{s@var{cond}}
                   2021: Store zero or nonzero in the operand according to the condition codes.
                   2022: Value stored is nonzero iff the condition @var{cond} is true.
                   2023: @var{cond} is the name of a comparison operation expression code, such
                   2024: as @code{eq}, @code{lt} or @code{leu}.
                   2025: 
                   2026: You specify the mode that the operand must have when you write the
                   2027: @code{match_operand} expression.  The compiler automatically sees
                   2028: which mode you have used and supplies an operand of that mode.
                   2029: 
                   2030: The value stored for a true condition must have 1 as its low bit, or
                   2031: else must be negative.  Otherwise the instruction is not suitable and
                   2032: you should omit it from the machine description.  You describe to the
                   2033: compiler exactly which value is stored by defining the macro
                   2034: @code{STORE_FLAG_VALUE} (@pxref{Misc}).  If a description cannot be
                   2035: found that can be used for all the @samp{s@var{cond}} patterns, you
                   2036: should omit those operations from the machine description.
                   2037: 
                   2038: These operations may fail, but should do so only in relatively
                   2039: uncommon cases; if they would fail for common cases involving
                   2040: integer comparisons, it is best to omit these patterns.
                   2041: 
                   2042: If these operations are omitted, the compiler will usually generate code
                   2043: that copies the constant one to the target and branches around an
                   2044: assignment of zero to the target.  If this code is more efficient than
                   2045: the potential instructions used for the @samp{s@var{cond}} pattern
                   2046: followed by those required to convert the result into a 1 or a zero in
                   2047: @code{SImode}, you should omit the @samp{s@var{cond}} operations from
                   2048: the machine description.
                   2049: 
                   2050: @cindex @code{b@var{cond}} instruction pattern
                   2051: @item @samp{b@var{cond}}
                   2052: Conditional branch instruction.  Operand 0 is a @code{label_ref} that
                   2053: refers to the label to jump to.  Jump if the condition codes meet
                   2054: condition @var{cond}.
                   2055: 
                   2056: Some machines do not follow the model assumed here where a comparison
                   2057: instruction is followed by a conditional branch instruction.  In that
                   2058: case, the @samp{cmp@var{m}} (and @samp{tst@var{m}}) patterns should
                   2059: simply store the operands away and generate all the required insns in a
                   2060: @code{define_expand} (@pxref{Expander Definitions}) for the conditional
1.1.1.4   root     2061: branch operations.  All calls to expand @samp{b@var{cond}} patterns are
1.1       root     2062: immediately preceded by calls to expand either a @samp{cmp@var{m}}
                   2063: pattern or a @samp{tst@var{m}} pattern.
                   2064: 
                   2065: Machines that use a pseudo register for the condition code value, or
                   2066: where the mode used for the comparison depends on the condition being
                   2067: tested, should also use the above mechanism.  @xref{Jump Patterns}
                   2068: 
                   2069: The above discussion also applies to @samp{s@var{cond}} patterns.
                   2070: 
                   2071: @cindex @code{call} instruction pattern
                   2072: @item @samp{call}
                   2073: Subroutine call instruction returning no value.  Operand 0 is the
                   2074: function to call; operand 1 is the number of bytes of arguments pushed
                   2075: (in mode @code{SImode}, except it is normally a @code{const_int});
                   2076: operand 2 is the number of registers used as operands.
                   2077: 
                   2078: On most machines, operand 2 is not actually stored into the RTL
                   2079: pattern.  It is supplied for the sake of some RISC machines which need
                   2080: to put this information into the assembler code; they can put it in
                   2081: the RTL instead of operand 1.
                   2082: 
                   2083: Operand 0 should be a @code{mem} RTX whose address is the address of the
                   2084: function.  Note, however, that this address can be a @code{symbol_ref}
                   2085: expression even if it would not be a legitimate memory address on the
                   2086: target machine.  If it is also not a valid argument for a call
                   2087: instruction, the pattern for this operation should be a
                   2088: @code{define_expand} (@pxref{Expander Definitions}) that places the
                   2089: address into a register and uses that register in the call instruction.
                   2090: 
                   2091: @cindex @code{call_value} instruction pattern
                   2092: @item @samp{call_value}
                   2093: Subroutine call instruction returning a value.  Operand 0 is the hard
                   2094: register in which the value is returned.  There are three more
                   2095: operands, the same as the three operands of the @samp{call}
                   2096: instruction (but with numbers increased by one).
                   2097: 
                   2098: Subroutines that return @code{BLKmode} objects use the @samp{call}
                   2099: insn.
                   2100: 
                   2101: @cindex @code{call_pop} instruction pattern
                   2102: @cindex @code{call_value_pop} instruction pattern
                   2103: @item @samp{call_pop}, @samp{call_value_pop}
                   2104: Similar to @samp{call} and @samp{call_value}, except used if defined and
                   2105: if @code{RETURN_POPS_ARGS} is non-zero.  They should emit a @code{parallel}
                   2106: that contains both the function call and a @code{set} to indicate the
                   2107: adjustment made to the frame pointer.
                   2108: 
                   2109: For machines where @code{RETURN_POPS_ARGS} can be non-zero, the use of these
                   2110: patterns increases the number of functions for which the frame pointer
                   2111: can be eliminated, if desired.
                   2112: 
1.1.1.5   root     2113: @cindex @code{untyped_call} instruction pattern
                   2114: @item @samp{untyped_call}
                   2115: Subroutine call instruction returning a value of any type.  Operand 0 is
                   2116: the function to call; operand 1 is a memory location where the result of
                   2117: calling the function is to be stored; operand 2 is a @code{parallel}
                   2118: expression where each element is a @code{set} expression that indicates
                   2119: the saving of a function return value into the result block.
                   2120: 
                   2121: This instruction pattern should be defined to support
                   2122: @code{__builtin_apply} on machines where special instructions are needed
                   2123: to call a subroutine with arbitrary arguments or to save the value
                   2124: returned.  This instruction pattern is required on machines that have
                   2125: multiple registers that can hold a return value (i.e.
                   2126: @code{FUNCTION_VALUE_REGNO_P} is true for more than one register).
                   2127: 
1.1       root     2128: @cindex @code{return} instruction pattern
                   2129: @item @samp{return}
                   2130: Subroutine return instruction.  This instruction pattern name should be
                   2131: defined only if a single instruction can do all the work of returning
                   2132: from a function.
                   2133: 
                   2134: Like the @samp{mov@var{m}} patterns, this pattern is also used after the
                   2135: RTL generation phase.  In this case it is to support machines where
                   2136: multiple instructions are usually needed to return from a function, but
                   2137: some class of functions only requires one instruction to implement a
                   2138: return.  Normally, the applicable functions are those which do not need
                   2139: to save any registers or allocate stack space.
                   2140: 
                   2141: @findex reload_completed
                   2142: @findex leaf_function_p
                   2143: For such machines, the condition specified in this pattern should only
                   2144: be true when @code{reload_completed} is non-zero and the function's
                   2145: epilogue would only be a single instruction.  For machines with register
                   2146: windows, the routine @code{leaf_function_p} may be used to determine if
                   2147: a register window push is required.
                   2148: 
                   2149: Machines that have conditional return instructions should define patterns
                   2150: such as
                   2151: 
1.1.1.5   root     2152: @smallexample
1.1       root     2153: (define_insn ""
                   2154:   [(set (pc)
1.1.1.5   root     2155:         (if_then_else (match_operator
                   2156:                          0 "comparison_operator"
                   2157:                          [(cc0) (const_int 0)])
1.1.1.4   root     2158:                       (return)
                   2159:                       (pc)))]
1.1       root     2160:   "@var{condition}"
                   2161:   "@dots{}")
1.1.1.5   root     2162: @end smallexample
1.1       root     2163: 
                   2164: where @var{condition} would normally be the same condition specified on the
                   2165: named @samp{return} pattern.
                   2166: 
1.1.1.5   root     2167: @cindex @code{untyped_return} instruction pattern
                   2168: @item @samp{untyped_return}
                   2169: Untyped subroutine return instruction.  This instruction pattern should
                   2170: be defined to support @code{__builtin_return} on machines where special
                   2171: instructions are needed to return a value of any type.
                   2172: 
                   2173: Operand 0 is a memory location where the result of calling a function
                   2174: with @code{__builtin_apply} is stored; operand 1 is a @code{parallel}
                   2175: expression where each element is a @code{set} expression that indicates
                   2176: the restoring of a function return value from the result block.
                   2177: 
1.1       root     2178: @cindex @code{nop} instruction pattern
                   2179: @item @samp{nop}
                   2180: No-op instruction.  This instruction pattern name should always be defined
                   2181: to output a no-op in assembler code.  @code{(const_int 0)} will do as an
                   2182: RTL pattern.
                   2183: 
                   2184: @cindex @code{indirect_jump} instruction pattern
                   2185: @item @samp{indirect_jump}
                   2186: An instruction to jump to an address which is operand zero.
                   2187: This pattern name is mandatory on all machines.
                   2188: 
                   2189: @cindex @code{casesi} instruction pattern
                   2190: @item @samp{casesi}
                   2191: Instruction to jump through a dispatch table, including bounds checking.
                   2192: This instruction takes five operands:
                   2193: 
                   2194: @enumerate
                   2195: @item
                   2196: The index to dispatch on, which has mode @code{SImode}.
                   2197: 
                   2198: @item
                   2199: The lower bound for indices in the table, an integer constant.
                   2200: 
                   2201: @item
                   2202: The total range of indices in the table---the largest index
                   2203: minus the smallest one (both inclusive).
                   2204: 
                   2205: @item
                   2206: A label that precedes the table itself.
                   2207: 
                   2208: @item
                   2209: A label to jump to if the index has a value outside the bounds.
                   2210: (If the machine-description macro @code{CASE_DROPS_THROUGH} is defined,
                   2211: then an out-of-bounds index drops through to the code following
                   2212: the jump table instead of jumping to this label.  In that case,
                   2213: this label is not actually used by the @samp{casesi} instruction,
                   2214: but it is always provided as an operand.)
                   2215: @end enumerate
                   2216: 
                   2217: The table is a @code{addr_vec} or @code{addr_diff_vec} inside of a
                   2218: @code{jump_insn}.  The number of elements in the table is one plus the
                   2219: difference between the upper bound and the lower bound.
                   2220: 
                   2221: @cindex @code{tablejump} instruction pattern
                   2222: @item @samp{tablejump}
                   2223: Instruction to jump to a variable address.  This is a low-level
                   2224: capability which can be used to implement a dispatch table when there
                   2225: is no @samp{casesi} pattern.
                   2226: 
                   2227: This pattern requires two operands: the address or offset, and a label
                   2228: which should immediately precede the jump table.  If the macro
                   2229: @code{CASE_VECTOR_PC_RELATIVE} is defined then the first operand is an
                   2230: offset which counts from the address of the table; otherwise, it is an
1.1.1.3   root     2231: absolute address to jump to.  In either case, the first operand has
                   2232: mode @code{Pmode}.
1.1       root     2233: 
                   2234: The @samp{tablejump} insn is always the last insn before the jump
                   2235: table it uses.  Its assembler code normally has no need to use the
                   2236: second operand, but you should incorporate it in the RTL pattern so
                   2237: that the jump optimizer will not delete the table as unreachable code.
1.1.1.3   root     2238: 
                   2239: @cindex @code{save_stack_block} instruction pattern
                   2240: @cindex @code{save_stack_function} instruction pattern
                   2241: @cindex @code{save_stack_nonlocal} instruction pattern
                   2242: @cindex @code{restore_stack_block} instruction pattern
                   2243: @cindex @code{restore_stack_function} instruction pattern
                   2244: @cindex @code{restore_stack_nonlocal} instruction pattern
                   2245: @item @samp{save_stack_block}
                   2246: @itemx @samp{save_stack_function}
                   2247: @itemx @samp{save_stack_nonlocal}
                   2248: @itemx @samp{restore_stack_block}
                   2249: @itemx @samp{restore_stack_function}
                   2250: @itemx @samp{restore_stack_nonlocal}
                   2251: Most machines save and restore the stack pointer by copying it to or
                   2252: from an object of mode @code{Pmode}.  Do not define these patterns on
                   2253: such machines.
                   2254: 
                   2255: Some machines require special handling for stack pointer saves and
                   2256: restores.  On those machines, define the patterns corresponding to the
                   2257: non-standard cases by using a @code{define_expand} (@pxref{Expander
                   2258: Definitions}) that produces the required insns.  The three types of
                   2259: saves and restores are:
                   2260: 
                   2261: @enumerate
                   2262: @item
                   2263: @samp{save_stack_block} saves the stack pointer at the start of a block
1.1.1.5   root     2264: that allocates a variable-sized object, and @samp{restore_stack_block}
1.1.1.3   root     2265: restores the stack pointer when the block is exited.
                   2266: 
                   2267: @item
1.1.1.5   root     2268: @samp{save_stack_function} and @samp{restore_stack_function} do a
                   2269: similar job for the outermost block of a function and are used when the
1.1.1.3   root     2270: function allocates variable-sized objects or calls @code{alloca}.  Only
                   2271: the epilogue uses the restored stack pointer, allowing a simpler save or
                   2272: restore sequence on some machines.
                   2273: 
                   2274: @item
                   2275: @samp{save_stack_nonlocal} is used in functions that contain labels
                   2276: branched to by nested functions.  It saves the stack pointer in such a
                   2277: way that the inner function can use @samp{restore_stack_nonlocal} to
                   2278: restore the stack pointer.  The compiler generates code to restore the
                   2279: frame and argument pointer registers, but some machines require saving
                   2280: and restoring additional data such as register window information or
                   2281: stack backchains.  Place insns in these patterns to save and restore any
                   2282: such required data.
                   2283: @end enumerate
                   2284: 
                   2285: When saving the stack pointer, operand 0 is the save area and operand 1
                   2286: is the stack pointer.  The mode used to allocate the save area is the
                   2287: mode of operand 0.  You must specify an integral mode, or
                   2288: @code{VOIDmode} if no save area is needed for a particular type of save
                   2289: (either because no save is needed or because a machine-specific save
                   2290: area can be used).  Operand 0 is the stack pointer and operand 1 is the
                   2291: save area for restore operations.  If @samp{save_stack_block} is
                   2292: defined, operand 0 must not be @code{VOIDmode} since these saves can be
                   2293: arbitrarily nested.
                   2294: 
                   2295: A save area is a @code{mem} that is at a constant offset from
                   2296: @code{virtual_stack_vars_rtx} when the stack pointer is saved for use by
                   2297: nonlocal gotos and a @code{reg} in the other two cases.
                   2298: 
                   2299: @cindex @code{allocate_stack} instruction pattern
                   2300: @item @samp{allocate_stack}
1.1.1.6   root     2301: Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 0 from
                   2302: the stack pointer to create space for dynamically allocated data.
1.1.1.3   root     2303: 
                   2304: Do not define this pattern if all that must be done is the subtraction.
1.1.1.6   root     2305: Some machines require other operations such as stack probes or
1.1.1.3   root     2306: maintaining the back chain.  Define this pattern to emit those
                   2307: operations in addition to updating the stack pointer.
1.1       root     2308: @end table
                   2309: 
1.1.1.5   root     2310: @node Pattern Ordering
1.1       root     2311: @section When the Order of Patterns Matters
                   2312: @cindex Pattern Ordering
                   2313: @cindex Ordering of Patterns
                   2314: 
                   2315: Sometimes an insn can match more than one instruction pattern.  Then the
                   2316: pattern that appears first in the machine description is the one used.
                   2317: Therefore, more specific patterns (patterns that will match fewer things)
                   2318: and faster instructions (those that will produce better code when they
                   2319: do match) should usually go first in the description.
                   2320: 
                   2321: In some cases the effect of ordering the patterns can be used to hide
                   2322: a pattern when it is not valid.  For example, the 68000 has an
                   2323: instruction for converting a fullword to floating point and another
                   2324: for converting a byte to floating point.  An instruction converting
                   2325: an integer to floating point could match either one.  We put the
                   2326: pattern to convert the fullword first to make sure that one will
                   2327: be used rather than the other.  (Otherwise a large integer might
                   2328: be generated as a single-byte immediate quantity, which would not work.)
                   2329: Instead of using this pattern ordering it would be possible to make the
                   2330: pattern for convert-a-byte smart enough to deal properly with any
                   2331: constant value.
                   2332: 
1.1.1.5   root     2333: @node Dependent Patterns
1.1       root     2334: @section Interdependence of Patterns
                   2335: @cindex Dependent Patterns
                   2336: @cindex Interdependence of Patterns
                   2337: 
                   2338: Every machine description must have a named pattern for each of the
                   2339: conditional branch names @samp{b@var{cond}}.  The recognition template
                   2340: must always have the form
                   2341: 
                   2342: @example
                   2343: (set (pc)
                   2344:      (if_then_else (@var{cond} (cc0) (const_int 0))
                   2345:                    (label_ref (match_operand 0 "" ""))
                   2346:                    (pc)))
                   2347: @end example
                   2348: 
                   2349: @noindent
                   2350: In addition, every machine description must have an anonymous pattern
                   2351: for each of the possible reverse-conditional branches.  Their templates
                   2352: look like
                   2353: 
                   2354: @example
                   2355: (set (pc)
                   2356:      (if_then_else (@var{cond} (cc0) (const_int 0))
                   2357:                    (pc)
                   2358:                    (label_ref (match_operand 0 "" ""))))
                   2359: @end example
                   2360: 
                   2361: @noindent
                   2362: They are necessary because jump optimization can turn direct-conditional
                   2363: branches into reverse-conditional branches.
                   2364: 
                   2365: It is often convenient to use the @code{match_operator} construct to
                   2366: reduce the number of patterns that must be specified for branches.  For
                   2367: example,
                   2368: 
                   2369: @example
                   2370: (define_insn ""
                   2371:   [(set (pc)
                   2372:         (if_then_else (match_operator 0 "comparison_operator"
1.1.1.4   root     2373:                                       [(cc0) (const_int 0)])
                   2374:                       (pc)
                   2375:                       (label_ref (match_operand 1 "" ""))))]
1.1       root     2376:   "@var{condition}"
                   2377:   "@dots{}")
                   2378: @end example
                   2379: 
                   2380: In some cases machines support instructions identical except for the
                   2381: machine mode of one or more operands.  For example, there may be
                   2382: ``sign-extend halfword'' and ``sign-extend byte'' instructions whose
                   2383: patterns are
                   2384: 
                   2385: @example
                   2386: (set (match_operand:SI 0 @dots{})
                   2387:      (extend:SI (match_operand:HI 1 @dots{})))
                   2388: 
                   2389: (set (match_operand:SI 0 @dots{})
                   2390:      (extend:SI (match_operand:QI 1 @dots{})))
                   2391: @end example
                   2392: 
                   2393: @noindent
                   2394: Constant integers do not specify a machine mode, so an instruction to
                   2395: extend a constant value could match either pattern.  The pattern it
                   2396: actually will match is the one that appears first in the file.  For correct
                   2397: results, this must be the one for the widest possible mode (@code{HImode},
                   2398: here).  If the pattern matches the @code{QImode} instruction, the results
                   2399: will be incorrect if the constant value does not actually fit that mode.
                   2400: 
                   2401: Such instructions to extend constants are rarely generated because they are
                   2402: optimized away, but they do occasionally happen in nonoptimized
                   2403: compilations.
                   2404: 
                   2405: If a constraint in a pattern allows a constant, the reload pass may
                   2406: replace a register with a constant permitted by the constraint in some
                   2407: cases.  Similarly for memory references.  You must ensure that the
                   2408: predicate permits all objects allowed by the constraints to prevent the
                   2409: compiler from crashing.
                   2410: 
                   2411: Because of this substitution, you should not provide separate patterns
                   2412: for increment and decrement instructions.  Instead, they should be 
                   2413: generated from the same pattern that supports register-register add
                   2414: insns by examining the operands and generating the appropriate machine
                   2415: instruction.
                   2416: 
1.1.1.5   root     2417: @node Jump Patterns
1.1       root     2418: @section Defining Jump Instruction Patterns
                   2419: @cindex jump instruction patterns
                   2420: @cindex defining jump instruction patterns
                   2421: 
                   2422: For most machines, GNU CC assumes that the machine has a condition code.
                   2423: A comparison insn sets the condition code, recording the results of both
                   2424: signed and unsigned comparison of the given operands.  A separate branch
                   2425: insn tests the condition code and branches or not according its value.
                   2426: The branch insns come in distinct signed and unsigned flavors.  Many
                   2427: common machines, such as the Vax, the 68000 and the 32000, work this
                   2428: way.
                   2429: 
                   2430: Some machines have distinct signed and unsigned compare instructions, and
                   2431: only one set of conditional branch instructions.  The easiest way to handle
                   2432: these machines is to treat them just like the others until the final stage
                   2433: where assembly code is written.  At this time, when outputting code for the
                   2434: compare instruction, peek ahead at the following branch using
                   2435: @code{next_cc0_user (insn)}.  (The variable @code{insn} refers to the insn
                   2436: being output, in the output-writing code in an instruction pattern.)  If
                   2437: the RTL says that is an unsigned branch, output an unsigned compare;
                   2438: otherwise output a signed compare.  When the branch itself is output, you
                   2439: can treat signed and unsigned branches identically.
                   2440: 
                   2441: The reason you can do this is that GNU CC always generates a pair of
                   2442: consecutive RTL insns, possibly separated by @code{note} insns, one to
                   2443: set the condition code and one to test it, and keeps the pair inviolate
                   2444: until the end.
                   2445: 
                   2446: To go with this technique, you must define the machine-description macro
                   2447: @code{NOTICE_UPDATE_CC} to do @code{CC_STATUS_INIT}; in other words, no
                   2448: compare instruction is superfluous.
                   2449: 
                   2450: Some machines have compare-and-branch instructions and no condition code.
                   2451: A similar technique works for them.  When it is time to ``output'' a
                   2452: compare instruction, record its operands in two static variables.  When
                   2453: outputting the branch-on-condition-code instruction that follows, actually
                   2454: output a compare-and-branch instruction that uses the remembered operands.
                   2455: 
                   2456: It also works to define patterns for compare-and-branch instructions.
                   2457: In optimizing compilation, the pair of compare and branch instructions
                   2458: will be combined according to these patterns.  But this does not happen
                   2459: if optimization is not requested.  So you must use one of the solutions
                   2460: above in addition to any special patterns you define.
                   2461: 
                   2462: In many RISC machines, most instructions do not affect the condition
                   2463: code and there may not even be a separate condition code register.  On
                   2464: these machines, the restriction that the definition and use of the
                   2465: condition code be adjacent insns is not necessary and can prevent
                   2466: important optimizations.  For example, on the IBM RS/6000, there is a
                   2467: delay for taken branches unless the condition code register is set three
                   2468: instructions earlier than the conditional branch.  The instruction
                   2469: scheduler cannot perform this optimization if it is not permitted to
                   2470: separate the definition and use of the condition code register.
                   2471: 
                   2472: On these machines, do not use @code{(cc0)}, but instead use a register
                   2473: to represent the condition code.  If there is a specific condition code
                   2474: register in the machine, use a hard register.  If the condition code or
                   2475: comparison result can be placed in any general register, or if there are
                   2476: multiple condition registers, use a pseudo register.
                   2477: 
                   2478: @findex prev_cc0_setter
                   2479: @findex next_cc0_user
                   2480: On some machines, the type of branch instruction generated may depend on
                   2481: the way the condition code was produced; for example, on the 68k and
                   2482: Sparc, setting the condition code directly from an add or subtract
                   2483: instruction does not clear the overflow bit the way that a test
                   2484: instruction does, so a different branch instruction must be used for
                   2485: some conditional branches.  For machines that use @code{(cc0)}, the set
                   2486: and use of the condition code must be adjacent (separated only by
                   2487: @code{note} insns) allowing flags in @code{cc_status} to be used.
                   2488: (@xref{Condition Code}.)  Also, the comparison and branch insns can be
                   2489: located from each other by using the functions @code{prev_cc0_setter}
                   2490: and @code{next_cc0_user}.
                   2491: 
                   2492: However, this is not true on machines that do not use @code{(cc0)}.  On
                   2493: those machines, no assumptions can be made about the adjacency of the
                   2494: compare and branch insns and the above methods cannot be used.  Instead,
                   2495: we use the machine mode of the condition code register to record
                   2496: different formats of the condition code register.
                   2497: 
                   2498: Registers used to store the condition code value should have a mode that
                   2499: is in class @code{MODE_CC}.  Normally, it will be @code{CCmode}.  If
                   2500: additional modes are required (as for the add example mentioned above in
                   2501: the Sparc), define the macro @code{EXTRA_CC_MODES} to list the
                   2502: additional modes required (@pxref{Condition Code}).  Also define
                   2503: @code{EXTRA_CC_NAMES} to list the names of those modes and
                   2504: @code{SELECT_CC_MODE} to choose a mode given an operand of a compare.
                   2505: 
                   2506: If it is known during RTL generation that a different mode will be
                   2507: required (for example, if the machine has separate compare instructions
                   2508: for signed and unsigned quantities, like most IBM processors), they can
                   2509: be specified at that time.
                   2510: 
                   2511: If the cases that require different modes would be made by instruction
                   2512: combination, the macro @code{SELECT_CC_MODE} determines which machine
                   2513: mode should be used for the comparison result.  The patterns should be
                   2514: written using that mode.  To support the case of the add on the Sparc
                   2515: discussed above, we have the pattern
                   2516: 
1.1.1.5   root     2517: @smallexample
1.1       root     2518: (define_insn ""
                   2519:   [(set (reg:CC_NOOV 0)
1.1.1.5   root     2520:         (compare:CC_NOOV
                   2521:           (plus:SI (match_operand:SI 0 "register_operand" "%r")
                   2522:                    (match_operand:SI 1 "arith_operand" "rI"))
                   2523:           (const_int 0)))]
1.1       root     2524:   ""
                   2525:   "@dots{}")
1.1.1.5   root     2526: @end smallexample
1.1       root     2527: 
                   2528: The @code{SELECT_CC_MODE} macro on the Sparc returns @code{CC_NOOVmode}
                   2529: for comparisons whose argument is a @code{plus}.
                   2530: 
1.1.1.5   root     2531: @node Insn Canonicalizations
1.1       root     2532: @section Canonicalization of Instructions
                   2533: @cindex canonicalization of instructions
                   2534: @cindex insn canonicalization
                   2535: 
                   2536: There are often cases where multiple RTL expressions could represent an
1.1.1.2   root     2537: operation performed by a single machine instruction.  This situation is
1.1       root     2538: most commonly encountered with logical, branch, and multiply-accumulate
                   2539: instructions.  In such cases, the compiler attempts to convert these
                   2540: multiple RTL expressions into a single canonical form to reduce the
                   2541: number of insn patterns required.
                   2542: 
                   2543: In addition to algebraic simplifications, following canonicalizations
                   2544: are performed:
                   2545: 
                   2546: @itemize @bullet
                   2547: @item
                   2548: For commutative and comparison operators, a constant is always made the
                   2549: second operand.  If a machine only supports a constant as the second
                   2550: operand, only patterns that match a constant in the second operand need
                   2551: be supplied.
                   2552: 
                   2553: @cindex @code{neg}, canonicalization of
                   2554: @cindex @code{not}, canonicalization of
                   2555: @cindex @code{mult}, canonicalization of
                   2556: @cindex @code{plus}, canonicalization of
                   2557: @cindex @code{minus}, canonicalization of
                   2558: For these operators, if only one operand is a @code{neg}, @code{not},
                   2559: @code{mult}, @code{plus}, or @code{minus} expression, it will be the
                   2560: first operand.
                   2561: 
                   2562: @cindex @code{compare}, canonicalization of
                   2563: @item
                   2564: For the @code{compare} operator, a constant is always the second operand
                   2565: on machines where @code{cc0} is used (@pxref{Jump Patterns}).  On other
                   2566: machines, there are rare cases where the compiler might want to construct
                   2567: a @code{compare} with a constant as the first operand.  However, these
                   2568: cases are not common enough for it to be worthwhile to provide a pattern
                   2569: matching a constant as the first operand unless the machine actually has
                   2570: such an instruction.
                   2571: 
                   2572: An operand of @code{neg}, @code{not}, @code{mult}, @code{plus}, or
                   2573: @code{minus} is made the first operand under the same conditions as
                   2574: above.
                   2575: 
                   2576: @item
                   2577: @code{(minus @var{x} (const_int @var{n}))} is converted to
                   2578: @code{(plus @var{x} (const_int @var{-n}))}.
                   2579: 
                   2580: @item
                   2581: Within address computations (i.e., inside @code{mem}), a left shift is
                   2582: converted into the appropriate multiplication by a power of two.
                   2583: 
                   2584: @cindex @code{ior}, canonicalization of
                   2585: @cindex @code{and}, canonicalization of
                   2586: @cindex De Morgan's law
                   2587: De`Morgan's Law is used to move bitwise negation inside a bitwise
                   2588: logical-and or logical-or operation.  If this results in only one
                   2589: operand being a @code{not} expression, it will be the first one.
                   2590: 
                   2591: A machine that has an instruction that performs a bitwise logical-and of one
                   2592: operand with the bitwise negation of the other should specify the pattern
                   2593: for that instruction as
                   2594: 
                   2595: @example
                   2596: (define_insn ""
                   2597:   [(set (match_operand:@var{m} 0 @dots{})
1.1.1.4   root     2598:         (and:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
                   2599:                      (match_operand:@var{m} 2 @dots{})))]
1.1       root     2600:   "@dots{}"
                   2601:   "@dots{}")
                   2602: @end example
                   2603: 
                   2604: @noindent
                   2605: Similarly, a pattern for a ``NAND'' instruction should be written
                   2606: 
                   2607: @example
                   2608: (define_insn ""
                   2609:   [(set (match_operand:@var{m} 0 @dots{})
1.1.1.4   root     2610:         (ior:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
                   2611:                      (not:@var{m} (match_operand:@var{m} 2 @dots{}))))]
1.1       root     2612:   "@dots{}"
                   2613:   "@dots{}")
                   2614: @end example
                   2615: 
                   2616: In both cases, it is not necessary to include patterns for the many
                   2617: logically equivalent RTL expressions.
                   2618: 
                   2619: @cindex @code{xor}, canonicalization of
                   2620: @item
                   2621: The only possible RTL expressions involving both bitwise exclusive-or
1.1.1.6   root     2622: and bitwise negation are @code{(xor:@var{m} @var{x} @var{y})}
1.1       root     2623: and @code{(not:@var{m} (xor:@var{m} @var{x} @var{y}))}.@refill
                   2624: 
                   2625: @item
                   2626: The sum of three items, one of which is a constant, will only appear in
                   2627: the form
                   2628: 
                   2629: @example
                   2630: (plus:@var{m} (plus:@var{m} @var{x} @var{y}) @var{constant})
                   2631: @end example
                   2632: 
                   2633: @item
                   2634: On machines that do not use @code{cc0},
                   2635: @code{(compare @var{x} (const_int 0))} will be converted to
                   2636: @var{x}.@refill
                   2637: 
                   2638: @cindex @code{zero_extract}, canonicalization of
                   2639: @cindex @code{sign_extract}, canonicalization of
                   2640: @item
                   2641: Equality comparisons of a group of bits (usually a single bit) with zero
                   2642: will be written using @code{zero_extract} rather than the equivalent
                   2643: @code{and} or @code{sign_extract} operations.
                   2644: 
                   2645: @end itemize
                   2646: 
1.1.1.5   root     2647: @node Peephole Definitions
                   2648: @section Machine-Specific Peephole Optimizers
1.1       root     2649: @cindex peephole optimizer definitions
                   2650: @cindex defining peephole optimizers
                   2651: 
                   2652: In addition to instruction patterns the @file{md} file may contain
                   2653: definitions of machine-specific peephole optimizations.
                   2654: 
                   2655: The combiner does not notice certain peephole optimizations when the data
                   2656: flow in the program does not suggest that it should try them.  For example,
                   2657: sometimes two consecutive insns related in purpose can be combined even
                   2658: though the second one does not appear to use a register computed in the
                   2659: first one.  A machine-specific peephole optimizer can detect such
                   2660: opportunities.
                   2661: 
1.1.1.5   root     2662: @need 1000
1.1       root     2663: A definition looks like this:
                   2664: 
1.1.1.5   root     2665: @smallexample
1.1       root     2666: (define_peephole
                   2667:   [@var{insn-pattern-1}
                   2668:    @var{insn-pattern-2}
                   2669:    @dots{}]
                   2670:   "@var{condition}"
                   2671:   "@var{template}"
                   2672:   "@var{optional insn-attributes}")
1.1.1.5   root     2673: @end smallexample
1.1       root     2674: 
                   2675: @noindent
                   2676: The last string operand may be omitted if you are not using any
                   2677: machine-specific information in this machine description.  If present,
                   2678: it must obey the same rules as in a @code{define_insn}.
                   2679: 
                   2680: In this skeleton, @var{insn-pattern-1} and so on are patterns to match
                   2681: consecutive insns.  The optimization applies to a sequence of insns when
                   2682: @var{insn-pattern-1} matches the first one, @var{insn-pattern-2} matches
                   2683: the next, and so on.@refill
                   2684: 
                   2685: Each of the insns matched by a peephole must also match a
                   2686: @code{define_insn}.  Peepholes are checked only at the last stage just
                   2687: before code generation, and only optionally.  Therefore, any insn which
                   2688: would match a peephole but no @code{define_insn} will cause a crash in code
                   2689: generation in an unoptimized compilation, or at various optimization
                   2690: stages.
                   2691: 
                   2692: The operands of the insns are matched with @code{match_operands},
                   2693: @code{match_operator}, and @code{match_dup}, as usual.  What is not
                   2694: usual is that the operand numbers apply to all the insn patterns in the
                   2695: definition.  So, you can check for identical operands in two insns by
                   2696: using @code{match_operand} in one insn and @code{match_dup} in the
                   2697: other.
                   2698: 
                   2699: The operand constraints used in @code{match_operand} patterns do not have
                   2700: any direct effect on the applicability of the peephole, but they will
                   2701: be validated afterward, so make sure your constraints are general enough
                   2702: to apply whenever the peephole matches.  If the peephole matches
                   2703: but the constraints are not satisfied, the compiler will crash.
                   2704: 
                   2705: It is safe to omit constraints in all the operands of the peephole; or
                   2706: you can write constraints which serve as a double-check on the criteria
                   2707: previously tested.
                   2708: 
                   2709: Once a sequence of insns matches the patterns, the @var{condition} is
                   2710: checked.  This is a C expression which makes the final decision whether to
                   2711: perform the optimization (we do so if the expression is nonzero).  If
                   2712: @var{condition} is omitted (in other words, the string is empty) then the
                   2713: optimization is applied to every sequence of insns that matches the
                   2714: patterns.
                   2715: 
                   2716: The defined peephole optimizations are applied after register allocation
                   2717: is complete.  Therefore, the peephole definition can check which
                   2718: operands have ended up in which kinds of registers, just by looking at
                   2719: the operands.
                   2720: 
                   2721: @findex prev_nonnote_insn
                   2722: The way to refer to the operands in @var{condition} is to write
                   2723: @code{operands[@var{i}]} for operand number @var{i} (as matched by
                   2724: @code{(match_operand @var{i} @dots{})}).  Use the variable @code{insn}
                   2725: to refer to the last of the insns being matched; use
                   2726: @code{prev_nonnote_insn} to find the preceding insns.
                   2727: 
                   2728: @findex dead_or_set_p
                   2729: When optimizing computations with intermediate results, you can use
                   2730: @var{condition} to match only when the intermediate results are not used
                   2731: elsewhere.  Use the C expression @code{dead_or_set_p (@var{insn},
                   2732: @var{op})}, where @var{insn} is the insn in which you expect the value
                   2733: to be used for the last time (from the value of @code{insn}, together
                   2734: with use of @code{prev_nonnote_insn}), and @var{op} is the intermediate
                   2735: value (from @code{operands[@var{i}]}).@refill
                   2736: 
                   2737: Applying the optimization means replacing the sequence of insns with one
                   2738: new insn.  The @var{template} controls ultimate output of assembler code
                   2739: for this combined insn.  It works exactly like the template of a
                   2740: @code{define_insn}.  Operand numbers in this template are the same ones
                   2741: used in matching the original sequence of insns.
                   2742: 
                   2743: The result of a defined peephole optimizer does not need to match any of
                   2744: the insn patterns in the machine description; it does not even have an
                   2745: opportunity to match them.  The peephole optimizer definition itself serves
                   2746: as the insn pattern to control how the insn is output.
                   2747: 
                   2748: Defined peephole optimizers are run as assembler code is being output,
                   2749: so the insns they produce are never combined or rearranged in any way.
                   2750: 
                   2751: Here is an example, taken from the 68000 machine description:
                   2752: 
1.1.1.5   root     2753: @smallexample
1.1       root     2754: (define_peephole
                   2755:   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
1.1.1.3   root     2756:    (set (match_operand:DF 0 "register_operand" "=f")
1.1       root     2757:         (match_operand:DF 1 "register_operand" "ad"))]
                   2758:   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
                   2759:   "*
                   2760: @{
                   2761:   rtx xoperands[2];
                   2762:   xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                   2763: #ifdef MOTOROLA
                   2764:   output_asm_insn (\"move.l %1,(sp)\", xoperands);
                   2765:   output_asm_insn (\"move.l %1,-(sp)\", operands);
                   2766:   return \"fmove.d (sp)+,%0\";
                   2767: #else
                   2768:   output_asm_insn (\"movel %1,sp@@\", xoperands);
                   2769:   output_asm_insn (\"movel %1,sp@@-\", operands);
                   2770:   return \"fmoved sp@@+,%0\";
                   2771: #endif
                   2772: @}
                   2773: ")
1.1.1.5   root     2774: @end smallexample
1.1       root     2775: 
1.1.1.5   root     2776: @need 1000
1.1       root     2777: The effect of this optimization is to change
                   2778: 
1.1.1.5   root     2779: @smallexample
                   2780: @group
1.1       root     2781: jbsr _foobar
                   2782: addql #4,sp
                   2783: movel d1,sp@@-
                   2784: movel d0,sp@@-
                   2785: fmoved sp@@+,fp0
1.1.1.5   root     2786: @end group
                   2787: @end smallexample
1.1       root     2788: 
                   2789: @noindent
                   2790: into
                   2791: 
1.1.1.5   root     2792: @smallexample
                   2793: @group
1.1       root     2794: jbsr _foobar
                   2795: movel d1,sp@@
                   2796: movel d0,sp@@-
                   2797: fmoved sp@@+,fp0
1.1.1.5   root     2798: @end group
                   2799: @end smallexample
1.1       root     2800: 
                   2801: @ignore
                   2802: @findex CC_REVERSED
                   2803: If a peephole matches a sequence including one or more jump insns, you must
                   2804: take account of the flags such as @code{CC_REVERSED} which specify that the
                   2805: condition codes are represented in an unusual manner.  The compiler
                   2806: automatically alters any ordinary conditional jumps which occur in such
                   2807: situations, but the compiler cannot alter jumps which have been replaced by
                   2808: peephole optimizations.  So it is up to you to alter the assembler code
                   2809: that the peephole produces.  Supply C code to write the assembler output,
                   2810: and in this C code check the condition code status flags and change the
                   2811: assembler code as appropriate.
                   2812: @end ignore
                   2813: 
                   2814: @var{insn-pattern-1} and so on look @emph{almost} like the second
                   2815: operand of @code{define_insn}.  There is one important difference: the
                   2816: second operand of @code{define_insn} consists of one or more RTX's
                   2817: enclosed in square brackets.  Usually, there is only one: then the same
                   2818: action can be written as an element of a @code{define_peephole}.  But
                   2819: when there are multiple actions in a @code{define_insn}, they are
                   2820: implicitly enclosed in a @code{parallel}.  Then you must explicitly
                   2821: write the @code{parallel}, and the square brackets within it, in the
                   2822: @code{define_peephole}.  Thus, if an insn pattern looks like this,
                   2823: 
1.1.1.5   root     2824: @smallexample
1.1       root     2825: (define_insn "divmodsi4"
                   2826:   [(set (match_operand:SI 0 "general_operand" "=d")
                   2827:         (div:SI (match_operand:SI 1 "general_operand" "0")
                   2828:                 (match_operand:SI 2 "general_operand" "dmsK")))
                   2829:    (set (match_operand:SI 3 "general_operand" "=d")
                   2830:         (mod:SI (match_dup 1) (match_dup 2)))]
                   2831:   "TARGET_68020"
                   2832:   "divsl%.l %2,%3:%0")
1.1.1.5   root     2833: @end smallexample
1.1       root     2834: 
                   2835: @noindent
                   2836: then the way to mention this insn in a peephole is as follows:
                   2837: 
1.1.1.5   root     2838: @smallexample
1.1       root     2839: (define_peephole
                   2840:   [@dots{}
                   2841:    (parallel
                   2842:     [(set (match_operand:SI 0 "general_operand" "=d")
                   2843:           (div:SI (match_operand:SI 1 "general_operand" "0")
                   2844:                   (match_operand:SI 2 "general_operand" "dmsK")))
                   2845:      (set (match_operand:SI 3 "general_operand" "=d")
                   2846:           (mod:SI (match_dup 1) (match_dup 2)))])
                   2847:    @dots{}]
                   2848:   @dots{})
1.1.1.5   root     2849: @end smallexample
1.1       root     2850: 
1.1.1.5   root     2851: @node Expander Definitions
1.1       root     2852: @section Defining RTL Sequences for Code Generation
                   2853: @cindex expander definitions
                   2854: @cindex code generation RTL sequences
                   2855: @cindex defining RTL sequences for code generation
                   2856: 
                   2857: On some target machines, some standard pattern names for RTL generation
                   2858: cannot be handled with single insn, but a sequence of RTL insns can
                   2859: represent them.  For these target machines, you can write a
                   2860: @code{define_expand} to specify how to generate the sequence of RTL.
                   2861: 
                   2862: @findex define_expand
                   2863: A @code{define_expand} is an RTL expression that looks almost like a
                   2864: @code{define_insn}; but, unlike the latter, a @code{define_expand} is used
                   2865: only for RTL generation and it can produce more than one RTL insn.
                   2866: 
                   2867: A @code{define_expand} RTX has four operands:
                   2868: 
                   2869: @itemize @bullet
                   2870: @item
                   2871: The name.  Each @code{define_expand} must have a name, since the only
                   2872: use for it is to refer to it by name.
                   2873: 
                   2874: @findex define_peephole
                   2875: @item
                   2876: The RTL template.  This is just like the RTL template for a
                   2877: @code{define_peephole} in that it is a vector of RTL expressions
                   2878: each being one insn.
                   2879: 
                   2880: @item
                   2881: The condition, a string containing a C expression.  This expression is
                   2882: used to express how the availability of this pattern depends on
                   2883: subclasses of target machine, selected by command-line options when
                   2884: GNU CC is run.  This is just like the condition of a
                   2885: @code{define_insn} that has a standard name.
                   2886: 
                   2887: @item
                   2888: The preparation statements, a string containing zero or more C
                   2889: statements which are to be executed before RTL code is generated from
                   2890: the RTL template.
                   2891: 
                   2892: Usually these statements prepare temporary registers for use as
                   2893: internal operands in the RTL template, but they can also generate RTL
                   2894: insns directly by calling routines such as @code{emit_insn}, etc.
                   2895: Any such insns precede the ones that come from the RTL template.
                   2896: @end itemize
                   2897: 
                   2898: Every RTL insn emitted by a @code{define_expand} must match some
                   2899: @code{define_insn} in the machine description.  Otherwise, the compiler
                   2900: will crash when trying to generate code for the insn or trying to optimize
                   2901: it.
                   2902: 
                   2903: The RTL template, in addition to controlling generation of RTL insns,
                   2904: also describes the operands that need to be specified when this pattern
                   2905: is used.  In particular, it gives a predicate for each operand.
                   2906: 
                   2907: A true operand, which needs to be specified in order to generate RTL from
                   2908: the pattern, should be described with a @code{match_operand} in its first
                   2909: occurrence in the RTL template.  This enters information on the operand's
                   2910: predicate into the tables that record such things.  GNU CC uses the
                   2911: information to preload the operand into a register if that is required for
                   2912: valid RTL code.  If the operand is referred to more than once, subsequent
                   2913: references should use @code{match_dup}.
                   2914: 
                   2915: The RTL template may also refer to internal ``operands'' which are
                   2916: temporary registers or labels used only within the sequence made by the
                   2917: @code{define_expand}.  Internal operands are substituted into the RTL
                   2918: template with @code{match_dup}, never with @code{match_operand}.  The
                   2919: values of the internal operands are not passed in as arguments by the
                   2920: compiler when it requests use of this pattern.  Instead, they are computed
                   2921: within the pattern, in the preparation statements.  These statements
                   2922: compute the values and store them into the appropriate elements of
                   2923: @code{operands} so that @code{match_dup} can find them.
                   2924: 
                   2925: There are two special macros defined for use in the preparation statements:
                   2926: @code{DONE} and @code{FAIL}.  Use them with a following semicolon,
                   2927: as a statement.
                   2928: 
                   2929: @table @code
                   2930: 
                   2931: @findex DONE
                   2932: @item DONE
                   2933: Use the @code{DONE} macro to end RTL generation for the pattern.  The
                   2934: only RTL insns resulting from the pattern on this occasion will be
                   2935: those already emitted by explicit calls to @code{emit_insn} within the
                   2936: preparation statements; the RTL template will not be generated.
                   2937: 
                   2938: @findex FAIL
                   2939: @item FAIL
                   2940: Make the pattern fail on this occasion.  When a pattern fails, it means
                   2941: that the pattern was not truly available.  The calling routines in the
                   2942: compiler will try other strategies for code generation using other patterns.
                   2943: 
                   2944: Failure is currently supported only for binary (addition, multiplication,
                   2945: shifting, etc.) and bitfield (@code{extv}, @code{extzv}, and @code{insv})
                   2946: operations.
                   2947: @end table
                   2948: 
                   2949: Here is an example, the definition of left-shift for the SPUR chip:
                   2950: 
1.1.1.5   root     2951: @smallexample
                   2952: @group
1.1       root     2953: (define_expand "ashlsi3"
                   2954:   [(set (match_operand:SI 0 "register_operand" "")
                   2955:         (ashift:SI
1.1.1.5   root     2956: @end group
                   2957: @group
1.1       root     2958:           (match_operand:SI 1 "register_operand" "")
                   2959:           (match_operand:SI 2 "nonmemory_operand" "")))]
                   2960:   ""
                   2961:   "
1.1.1.5   root     2962: @end group
                   2963: @end smallexample
                   2964: 
                   2965: @smallexample
                   2966: @group
1.1       root     2967: @{
                   2968:   if (GET_CODE (operands[2]) != CONST_INT
                   2969:       || (unsigned) INTVAL (operands[2]) > 3)
                   2970:     FAIL;
                   2971: @}")
1.1.1.5   root     2972: @end group
                   2973: @end smallexample
1.1       root     2974: 
                   2975: @noindent
                   2976: This example uses @code{define_expand} so that it can generate an RTL insn
                   2977: for shifting when the shift-count is in the supported range of 0 to 3 but
                   2978: fail in other cases where machine insns aren't available.  When it fails,
                   2979: the compiler tries another strategy using different patterns (such as, a
                   2980: library call).
                   2981: 
                   2982: If the compiler were able to handle nontrivial condition-strings in
                   2983: patterns with names, then it would be possible to use a
                   2984: @code{define_insn} in that case.  Here is another case (zero-extension
                   2985: on the 68000) which makes more use of the power of @code{define_expand}:
                   2986: 
1.1.1.5   root     2987: @smallexample
1.1       root     2988: (define_expand "zero_extendhisi2"
                   2989:   [(set (match_operand:SI 0 "general_operand" "")
                   2990:         (const_int 0))
                   2991:    (set (strict_low_part
                   2992:           (subreg:HI
                   2993:             (match_dup 0)
                   2994:             0))
                   2995:         (match_operand:HI 1 "general_operand" ""))]
                   2996:   ""
                   2997:   "operands[1] = make_safe_from (operands[1], operands[0]);")
1.1.1.5   root     2998: @end smallexample
1.1       root     2999: 
                   3000: @noindent
                   3001: @findex make_safe_from
                   3002: Here two RTL insns are generated, one to clear the entire output operand
                   3003: and the other to copy the input operand into its low half.  This sequence
                   3004: is incorrect if the input operand refers to [the old value of] the output
                   3005: operand, so the preparation statement makes sure this isn't so.  The
                   3006: function @code{make_safe_from} copies the @code{operands[1]} into a
                   3007: temporary register if it refers to @code{operands[0]}.  It does this
                   3008: by emitting another RTL insn.
                   3009: 
                   3010: Finally, a third example shows the use of an internal operand.
                   3011: Zero-extension on the SPUR chip is done by @code{and}-ing the result
                   3012: against a halfword mask.  But this mask cannot be represented by a
                   3013: @code{const_int} because the constant value is too large to be legitimate
                   3014: on this machine.  So it must be copied into a register with
                   3015: @code{force_reg} and then the register used in the @code{and}.
                   3016: 
1.1.1.5   root     3017: @smallexample
1.1       root     3018: (define_expand "zero_extendhisi2"
                   3019:   [(set (match_operand:SI 0 "register_operand" "")
                   3020:         (and:SI (subreg:SI
                   3021:                   (match_operand:HI 1 "register_operand" "")
                   3022:                   0)
                   3023:                 (match_dup 2)))]
                   3024:   ""
                   3025:   "operands[2]
                   3026:      = force_reg (SImode, gen_rtx (CONST_INT,
                   3027:                                    VOIDmode, 65535)); ")
1.1.1.5   root     3028: @end smallexample
1.1       root     3029: 
                   3030: @strong{Note:} If the @code{define_expand} is used to serve a
                   3031: standard binary or unary arithmetic operation or a bitfield operation,
                   3032: then the last insn it generates must not be a @code{code_label},
                   3033: @code{barrier} or @code{note}.  It must be an @code{insn},
                   3034: @code{jump_insn} or @code{call_insn}.  If you don't need a real insn
                   3035: at the end, emit an insn to copy the result of the operation into
                   3036: itself.  Such an insn will generate no code, but it can avoid problems
                   3037: in the compiler.@refill
                   3038: 
1.1.1.5   root     3039: @node Insn Splitting
                   3040: @section Defining How to Split Instructions
1.1       root     3041: @cindex insn splitting
                   3042: @cindex instruction splitting
                   3043: @cindex splitting instructions
                   3044: 
1.1.1.3   root     3045: There are two cases where you should specify how to split a pattern into
                   3046: multiple insns.  On machines that have instructions requiring delay
                   3047: slots (@pxref{Delay Slots}) or that have instructions whose output is
                   3048: not available for multiple cycles (@pxref{Function Units}), the compiler
                   3049: phases that optimize these cases need to be able to move insns into
1.1.1.6   root     3050: one-instruction delay slots.  However, some insns may generate more than one
1.1.1.3   root     3051: machine instruction.  These insns cannot be placed into a delay slot.
                   3052: 
                   3053: Often you can rewrite the single insn as a list of individual insns,
                   3054: each corresponding to one machine instruction.  The disadvantage of
                   3055: doing so is that it will cause the compilation to be slower and require
                   3056: more space.  If the resulting insns are too complex, it may also
                   3057: suppress some optimizations.  The compiler splits the insn if there is a
                   3058: reason to believe that it might improve instruction or delay slot
                   3059: scheduling.
                   3060: 
                   3061: The insn combiner phase also splits putative insns.  If three insns are
                   3062: merged into one insn with a complex expression that cannot be matched by
                   3063: some @code{define_insn} pattern, the combiner phase attempts to split
                   3064: the complex pattern into two insns that are recognized.  Usually it can
                   3065: break the complex pattern into two patterns by splitting out some
                   3066: subexpression.  However, in some other cases, such as performing an
                   3067: addition of a large constant in two insns on a RISC machine, the way to
                   3068: split the addition into two insns is machine-dependent.
1.1       root     3069: 
1.1.1.3   root     3070: @cindex define_split
1.1       root     3071: The @code{define_split} definition tells the compiler how to split a
1.1.1.3   root     3072: complex insn into several simpler insns.  It looks like this:
1.1       root     3073: 
1.1.1.5   root     3074: @smallexample
1.1       root     3075: (define_split
                   3076:   [@var{insn-pattern}]
                   3077:   "@var{condition}"
                   3078:   [@var{new-insn-pattern-1}
                   3079:    @var{new-insn-pattern-2}
                   3080:    @dots{}]
                   3081:   "@var{preparation statements}")
1.1.1.5   root     3082: @end smallexample
1.1       root     3083: 
                   3084: @var{insn-pattern} is a pattern that needs to be split and
                   3085: @var{condition} is the final condition to be tested, as in a
1.1.1.3   root     3086: @code{define_insn}.  When an insn matching @var{insn-pattern} and
                   3087: satisfying @var{condition} is found, it is replaced in the insn list
                   3088: with the insns given by @var{new-insn-pattern-1},
                   3089: @var{new-insn-pattern-2}, etc.
1.1       root     3090: 
1.1.1.5   root     3091: The @var{preparation statements} are similar to those statements that
                   3092: are specified for @code{define_expand} (@pxref{Expander Definitions})
                   3093: and are executed before the new RTL is generated to prepare for the
                   3094: generated code or emit some insns whose pattern is not fixed.  Unlike
                   3095: those in @code{define_expand}, however, these statements must not
                   3096: generate any new pseudo-registers.  Once reload has completed, they also
1.1.1.4   root     3097: must not allocate any space in the stack frame.
1.1       root     3098: 
1.1.1.3   root     3099: Patterns are matched against @var{insn-pattern} in two different
                   3100: circumstances.  If an insn needs to be split for delay slot scheduling
                   3101: or insn scheduling, the insn is already known to be valid, which means
                   3102: that it must have been matched by some @code{define_insn} and, if
                   3103: @code{reload_completed} is non-zero, is known to satisfy the constraints
                   3104: of that @code{define_insn}.  In that case, the new insn patterns must
                   3105: also be insns that are matched by some @code{define_insn} and, if
                   3106: @code{reload_completed} is non-zero, must also satisfy the constraints
                   3107: of those definitions.
                   3108: 
                   3109: As an example of this usage of @code{define_split}, consider the following
                   3110: example from @file{a29k.md}, which splits a @code{sign_extend} from
1.1       root     3111: @code{HImode} to @code{SImode} into a pair of shift insns:
                   3112: 
1.1.1.5   root     3113: @smallexample
1.1       root     3114: (define_split
                   3115:   [(set (match_operand:SI 0 "gen_reg_operand" "")
1.1.1.4   root     3116:         (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
1.1       root     3117:   ""
                   3118:   [(set (match_dup 0)
1.1.1.4   root     3119:         (ashift:SI (match_dup 1)
                   3120:                    (const_int 16)))
1.1       root     3121:    (set (match_dup 0)
1.1.1.4   root     3122:         (ashiftrt:SI (match_dup 0)
                   3123:                      (const_int 16)))]
1.1       root     3124:   "
                   3125: @{ operands[1] = gen_lowpart (SImode, operands[1]); @}")
1.1.1.5   root     3126: @end smallexample
1.1       root     3127: 
1.1.1.3   root     3128: When the combiner phase tries to split an insn pattern, it is always the
                   3129: case that the pattern is @emph{not} matched by any @code{define_insn}.
                   3130: The combiner pass first tries to split a single @code{set} expression
                   3131: and then the same @code{set} expression inside a @code{parallel}, but
                   3132: followed by a @code{clobber} of a pseudo-reg to use as a scratch
                   3133: register.  In these cases, the combiner expects exactly two new insn
                   3134: patterns to be generated.  It will verify that these patterns match some
                   3135: @code{define_insn} definitions, so you need not do this test in the
                   3136: @code{define_split} (of course, there is no point in writing a
                   3137: @code{define_split} that will never produce insns that match).
                   3138: 
                   3139: Here is an example of this use of @code{define_split}, taken from
                   3140: @file{rs6000.md}:
                   3141: 
1.1.1.5   root     3142: @smallexample
1.1.1.3   root     3143: (define_split
                   3144:   [(set (match_operand:SI 0 "gen_reg_operand" "")
1.1.1.4   root     3145:         (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
                   3146:                  (match_operand:SI 2 "non_add_cint_operand" "")))]
1.1.1.3   root     3147:   ""
                   3148:   [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
                   3149:    (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
                   3150: "
                   3151: @{
                   3152:   int low = INTVAL (operands[2]) & 0xffff;
                   3153:   int high = (unsigned) INTVAL (operands[2]) >> 16;
                   3154: 
                   3155:   if (low & 0x8000)
                   3156:     high++, low |= 0xffff0000;
                   3157: 
                   3158:   operands[3] = gen_rtx (CONST_INT, VOIDmode, high << 16);
                   3159:   operands[4] = gen_rtx (CONST_INT, VOIDmode, low);
                   3160: @}")
1.1.1.5   root     3161: @end smallexample
1.1.1.3   root     3162: 
                   3163: Here the predicate @code{non_add_cint_operand} matches any
                   3164: @code{const_int} that is @emph{not} a valid operand of a single add
1.1.1.6   root     3165: insn.  The add with the smaller displacement is written so that it
1.1.1.3   root     3166: can be substituted into the address of a subsequent operation.
                   3167: 
                   3168: An example that uses a scratch register, from the same file, generates
                   3169: an equality comparison of a register and a large constant:
                   3170: 
1.1.1.5   root     3171: @smallexample
1.1.1.3   root     3172: (define_split
                   3173:   [(set (match_operand:CC 0 "cc_reg_operand" "")
1.1.1.4   root     3174:         (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
                   3175:                     (match_operand:SI 2 "non_short_cint_operand" "")))
1.1.1.3   root     3176:    (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
                   3177:   "find_single_use (operands[0], insn, 0)
                   3178:    && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
                   3179:        || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
                   3180:   [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
                   3181:    (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
                   3182:   "
                   3183: @{
1.1.1.5   root     3184:   /* Get the constant we are comparing against, C, and see what it 
                   3185:      looks like sign-extended to 16 bits.  Then see what constant 
                   3186:      could be XOR'ed with C to get the sign-extended value.  */
1.1.1.3   root     3187: 
                   3188:   int c = INTVAL (operands[2]);
                   3189:   int sextc = (c << 16) >> 16;
                   3190:   int xorv = c ^ sextc;
                   3191: 
                   3192:   operands[4] = gen_rtx (CONST_INT, VOIDmode, xorv);
                   3193:   operands[5] = gen_rtx (CONST_INT, VOIDmode, sextc);
                   3194: @}")
1.1.1.5   root     3195: @end smallexample
1.1.1.3   root     3196: 
                   3197: To avoid confusion, don't write a single @code{define_split} that
                   3198: accepts some insns that match some @code{define_insn} as well as some
                   3199: insns that don't.  Instead, write two separate @code{define_split}
                   3200: definitions, one for the insns that are valid and one for the insns that
                   3201: are not valid.
                   3202: 
1.1.1.5   root     3203: @node Insn Attributes
1.1       root     3204: @section Instruction Attributes
                   3205: @cindex insn attributes
                   3206: @cindex instruction attributes
                   3207: 
                   3208: In addition to describing the instruction supported by the target machine,
                   3209: the @file{md} file also defines a group of @dfn{attributes} and a set of
                   3210: values for each.  Every generated insn is assigned a value for each attribute.
                   3211: One possible attribute would be the effect that the insn has on the machine's
                   3212: condition code.  This attribute can then be used by @code{NOTICE_UPDATE_CC}
                   3213: to track the condition codes.
                   3214: 
                   3215: @menu
                   3216: * Defining Attributes:: Specifying attributes and their values.
                   3217: * Expressions::         Valid expressions for attribute values.
                   3218: * Tagging Insns::       Assigning attribute values to insns.
                   3219: * Attr Example::        An example of assigning attributes.
                   3220: * Insn Lengths::        Computing the length of insns.
1.1.1.2   root     3221: * Constant Attributes:: Defining attributes that are constant.
1.1       root     3222: * Delay Slots::         Defining delay slots required for a machine.
                   3223: * Function Units::      Specifying information for insn scheduling.
                   3224: @end menu
                   3225: 
1.1.1.5   root     3226: @node Defining Attributes
1.1       root     3227: @subsection Defining Attributes and their Values
                   3228: @cindex defining attributes and their values
                   3229: @cindex attributes, defining
                   3230: 
                   3231: @findex define_attr
                   3232: The @code{define_attr} expression is used to define each attribute required
                   3233: by the target machine.  It looks like:
                   3234: 
1.1.1.5   root     3235: @smallexample
1.1       root     3236: (define_attr @var{name} @var{list-of-values} @var{default})
1.1.1.5   root     3237: @end smallexample
1.1       root     3238: 
                   3239: @var{name} is a string specifying the name of the attribute being defined.
                   3240: 
                   3241: @var{list-of-values} is either a string that specifies a comma-separated
                   3242: list of values that can be assigned to the attribute, or a null string to
                   3243: indicate that the attribute takes numeric values.
                   3244: 
                   3245: @var{default} is an attribute expression that gives the value of this
                   3246: attribute for insns that match patterns whose definition does not include
                   3247: an explicit value for this attribute.  @xref{Attr Example}, for more
1.1.1.2   root     3248: information on the handling of defaults.  @xref{Constant Attributes},
                   3249: for information on attributes that do not depend on any particular insn.
1.1       root     3250: 
                   3251: @findex insn-attr.h
                   3252: For each defined attribute, a number of definitions are written to the
                   3253: @file{insn-attr.h} file.  For cases where an explicit set of values is
                   3254: specified for an attribute, the following are defined:
                   3255: 
                   3256: @itemize @bullet
                   3257: @item
                   3258: A @samp{#define} is written for the symbol @samp{HAVE_ATTR_@var{name}}.
                   3259: 
                   3260: @item
                   3261: An enumeral class is defined for @samp{attr_@var{name}} with
                   3262: elements of the form @samp{@var{upper-name}_@var{upper-value}} where
                   3263: the attribute name and value are first converted to upper case.
                   3264: 
                   3265: @item
                   3266: A function @samp{get_attr_@var{name}} is defined that is passed an insn and
                   3267: returns the attribute value for that insn.
                   3268: @end itemize
                   3269: 
                   3270: For example, if the following is present in the @file{md} file:
                   3271: 
1.1.1.5   root     3272: @smallexample
1.1       root     3273: (define_attr "type" "branch,fp,load,store,arith" @dots{})
1.1.1.5   root     3274: @end smallexample
1.1       root     3275: 
                   3276: @noindent
                   3277: the following lines will be written to the file @file{insn-attr.h}.
                   3278: 
1.1.1.5   root     3279: @smallexample
1.1       root     3280: #define HAVE_ATTR_type
                   3281: enum attr_type @{TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
1.1.1.4   root     3282:                  TYPE_STORE, TYPE_ARITH@};
1.1       root     3283: extern enum attr_type get_attr_type ();
1.1.1.5   root     3284: @end smallexample
1.1       root     3285: 
                   3286: If the attribute takes numeric values, no @code{enum} type will be
                   3287: defined and the function to obtain the attribute's value will return
                   3288: @code{int}.
                   3289: 
1.1.1.5   root     3290: @node Expressions
1.1       root     3291: @subsection Attribute Expressions
                   3292: @cindex attribute expressions
                   3293: 
                   3294: RTL expressions used to define attributes use the codes described above
                   3295: plus a few specific to attribute definitions, to be discussed below. 
                   3296: Attribute value expressions must have one of the following forms:
                   3297: 
                   3298: @table @code
                   3299: @cindex @code{const_int} and attributes
                   3300: @item (const_int @var{i})
                   3301: The integer @var{i} specifies the value of a numeric attribute.  @var{i}
                   3302: must be non-negative.
                   3303: 
                   3304: The value of a numeric attribute can be specified either with a
                   3305: @code{const_int} or as an integer represented as a string in
                   3306: @code{const_string}, @code{eq_attr} (see below), and @code{set_attr}
                   3307: (@pxref{Tagging Insns}) expressions.
                   3308: 
                   3309: @cindex @code{const_string} and attributes
                   3310: @item (const_string @var{value})
                   3311: The string @var{value} specifies a constant attribute value.
                   3312: If @var{value} is specified as @samp{"*"}, it means that the default value of
                   3313: the attribute is to be used for the insn containing this expression.
                   3314: @samp{"*"} obviously cannot be used in the @var{default} expression
                   3315: of a @code{define_attr}.@refill
                   3316: 
                   3317: If the attribute whose value is being specified is numeric, @var{value}
                   3318: must be a string containing a non-negative integer (normally
                   3319: @code{const_int} would be used in this case).  Otherwise, it must
                   3320: contain one of the valid values for the attribute.
                   3321: 
                   3322: @cindex @code{if_then_else} and attributes
                   3323: @item (if_then_else @var{test} @var{true-value} @var{false-value})
                   3324: @var{test} specifies an attribute test, whose format is defined below.
                   3325: The value of this expression is @var{true-value} if @var{test} is true,
                   3326: otherwise it is @var{false-value}.
                   3327: 
                   3328: @cindex @code{cond} and attributes
                   3329: @item (cond [@var{test1} @var{value1} @dots{}] @var{default})
                   3330: The first operand of this expression is a vector containing an even
                   3331: number of expressions and consisting of pairs of @var{test} and @var{value}
                   3332: expressions.  The value of the @code{cond} expression is that of the
                   3333: @var{value} corresponding to the first true @var{test} expression.  If
                   3334: none of the @var{test} expressions are true, the value of the @code{cond}
                   3335: expression is that of the @var{default} expression.
                   3336: @end table
                   3337: 
                   3338: @var{test} expressions can have one of the following forms:
                   3339: 
                   3340: @table @code
                   3341: @cindex @code{const_int} and attribute tests
                   3342: @item (const_int @var{i})
                   3343: This test is true if @var{i} is non-zero and false otherwise.
                   3344: 
                   3345: @cindex @code{not} and attributes
                   3346: @cindex @code{ior} and attributes
                   3347: @cindex @code{and} and attributes
                   3348: @item (not @var{test})
                   3349: @itemx (ior @var{test1} @var{test2})
                   3350: @itemx (and @var{test1} @var{test2})
                   3351: These tests are true if the indicated logical function is true.
                   3352: 
                   3353: @cindex @code{match_operand} and attributes
                   3354: @item (match_operand:@var{m} @var{n} @var{pred} @var{constraints})
                   3355: This test is true if operand @var{n} of the insn whose attribute value
                   3356: is being determined has mode @var{m} (this part of the test is ignored
                   3357: if @var{m} is @code{VOIDmode}) and the function specified by the string
                   3358: @var{pred} returns a non-zero value when passed operand @var{n} and mode
                   3359: @var{m} (this part of the test is ignored if @var{pred} is the null
                   3360: string).
                   3361: 
                   3362: The @var{constraints} operand is ignored and should be the null string.
                   3363: 
                   3364: @cindex @code{le} and attributes
                   3365: @cindex @code{leu} and attributes
                   3366: @cindex @code{lt} and attributes
                   3367: @cindex @code{gt} and attributes
                   3368: @cindex @code{gtu} and attributes
                   3369: @cindex @code{ge} and attributes
                   3370: @cindex @code{geu} and attributes
                   3371: @cindex @code{ne} and attributes
                   3372: @cindex @code{eq} and attributes
                   3373: @cindex @code{plus} and attributes
                   3374: @cindex @code{minus} and attributes
                   3375: @cindex @code{mult} and attributes
                   3376: @cindex @code{div} and attributes
                   3377: @cindex @code{mod} and attributes
                   3378: @cindex @code{abs} and attributes
                   3379: @cindex @code{neg} and attributes
                   3380: @cindex @code{ashift} and attributes
                   3381: @cindex @code{lshiftrt} and attributes
                   3382: @cindex @code{ashiftrt} and attributes
                   3383: @item (le @var{arith1} @var{arith2})
                   3384: @itemx (leu @var{arith1} @var{arith2})
                   3385: @itemx (lt @var{arith1} @var{arith2})
                   3386: @itemx (ltu @var{arith1} @var{arith2})
                   3387: @itemx (gt @var{arith1} @var{arith2})
                   3388: @itemx (gtu @var{arith1} @var{arith2})
                   3389: @itemx (ge @var{arith1} @var{arith2})
                   3390: @itemx (geu @var{arith1} @var{arith2})
                   3391: @itemx (ne @var{arith1} @var{arith2})
                   3392: @itemx (eq @var{arith1} @var{arith2})
                   3393: These tests are true if the indicated comparison of the two arithmetic
                   3394: expressions is true.  Arithmetic expressions are formed with
                   3395: @code{plus}, @code{minus}, @code{mult}, @code{div}, @code{mod},
                   3396: @code{abs}, @code{neg}, @code{and}, @code{ior}, @code{xor}, @code{not},
1.1.1.7 ! root     3397: @code{ashift}, @code{lshiftrt}, and @code{ashiftrt} expressions.@refill
1.1       root     3398: 
                   3399: @findex get_attr
                   3400: @code{const_int} and @code{symbol_ref} are always valid terms (@pxref{Insn
                   3401: Lengths},for additional forms).  @code{symbol_ref} is a string
                   3402: denoting a C expression that yields an @code{int} when evaluated by the
                   3403: @samp{get_attr_@dots{}} routine.  It should normally be a global
                   3404: variable.@refill
                   3405: 
                   3406: @findex eq_attr
                   3407: @item (eq_attr @var{name} @var{value})
                   3408: @var{name} is a string specifying the name of an attribute.
                   3409: 
                   3410: @var{value} is a string that is either a valid value for attribute
                   3411: @var{name}, a comma-separated list of values, or @samp{!} followed by a
                   3412: value or list.  If @var{value} does not begin with a @samp{!}, this
                   3413: test is true if the value of the @var{name} attribute of the current
                   3414: insn is in the list specified by @var{value}.  If @var{value} begins
                   3415: with a @samp{!}, this test is true if the attribute's value is
                   3416: @emph{not} in the specified list.
                   3417: 
                   3418: For example,
                   3419: 
1.1.1.5   root     3420: @smallexample
1.1       root     3421: (eq_attr "type" "load,store")
1.1.1.5   root     3422: @end smallexample
1.1       root     3423: 
                   3424: @noindent
                   3425: is equivalent to
                   3426: 
1.1.1.5   root     3427: @smallexample
1.1       root     3428: (ior (eq_attr "type" "load") (eq_attr "type" "store"))
1.1.1.5   root     3429: @end smallexample
1.1       root     3430: 
                   3431: If @var{name} specifies an attribute of @samp{alternative}, it refers to the
                   3432: value of the compiler variable @code{which_alternative}
                   3433: (@pxref{Output Statement}) and the values must be small integers.  For
                   3434: example,@refill
                   3435: 
1.1.1.5   root     3436: @smallexample
1.1       root     3437: (eq_attr "alternative" "2,3")
1.1.1.5   root     3438: @end smallexample
1.1       root     3439: 
                   3440: @noindent
                   3441: is equivalent to
                   3442: 
1.1.1.5   root     3443: @smallexample
1.1       root     3444: (ior (eq (symbol_ref "which_alternative") (const_int 2))
                   3445:      (eq (symbol_ref "which_alternative") (const_int 3)))
1.1.1.5   root     3446: @end smallexample
1.1       root     3447: 
                   3448: Note that, for most attributes, an @code{eq_attr} test is simplified in cases
                   3449: where the value of the attribute being tested is known for all insns matching
                   3450: a particular pattern.  This is by far the most common case.@refill
1.1.1.5   root     3451: 
                   3452: @findex attr_flag
                   3453: @item (attr_flag @var{name})
                   3454: The value of an @code{attr_flag} expression is true if the flag
                   3455: specified by @var{name} is true for the @code{insn} currently being
                   3456: scheduled.
                   3457: 
                   3458: @var{name} is a string specifying one of a fixed set of flags to test.
                   3459: Test the flags @code{forward} and @code{backward} to determine the
                   3460: direction of a conditional branch.  Test the flags @code{very_likely}, 
                   3461: @code{likely}, @code{very_unlikely}, and @code{unlikely} to determine 
                   3462: if a conditional branch is expected to be taken.
                   3463: 
                   3464: If the @code{very_likely} flag is true, then the @code{likely} flag is also 
                   3465: true.  Likewise for the @code{very_unlikely} and @code{unlikely} flags.
                   3466: 
                   3467: This example describes a conditional branch delay slot which
                   3468: can be nullified for forward branches that are taken (annul-true) or 
                   3469: for backward branches which are not taken (annul-false).  
                   3470: 
                   3471: @smallexample
                   3472: (define_delay (eq_attr "type" "cbranch")
                   3473:   [(eq_attr "in_branch_delay" "true") 
                   3474:    (and (eq_attr "in_branch_delay" "true") 
                   3475:         (attr_flag "forward"))
                   3476:    (and (eq_attr "in_branch_delay" "true")
                   3477:         (attr_flag "backward"))])
                   3478: @end smallexample
                   3479: 
                   3480: The @code{forward} and @code{backward} flags are false if the current
                   3481: @code{insn} being scheduled is not a conditional branch.
                   3482: 
                   3483: The @code{very_likely} and @code{likely} flags are true if the 
                   3484: @code{insn} being scheduled is not a conditional branch.  The 
                   3485: The @code{very_unlikely} and @code{unlikely} flags are false if the
                   3486: @code{insn} being scheduled is not a conditional branch.
                   3487: 
                   3488: @code{attr_flag} is only used during delay slot scheduling and has no 
                   3489: meaning to other passes of the compiler.
1.1       root     3490: @end table
                   3491: 
1.1.1.5   root     3492: @node Tagging Insns
1.1       root     3493: @subsection Assigning Attribute Values to Insns
                   3494: @cindex tagging insns
                   3495: @cindex assigning attribute values to insns
                   3496: 
                   3497: The value assigned to an attribute of an insn is primarily determined by
                   3498: which pattern is matched by that insn (or which @code{define_peephole}
                   3499: generated it).  Every @code{define_insn} and @code{define_peephole} can
                   3500: have an optional last argument to specify the values of attributes for
                   3501: matching insns.  The value of any attribute not specified in a particular
                   3502: insn is set to the default value for that attribute, as specified in its
                   3503: @code{define_attr}.  Extensive use of default values for attributes
                   3504: permits the specification of the values for only one or two attributes
                   3505: in the definition of most insn patterns, as seen in the example in the
                   3506: next section.@refill
                   3507: 
                   3508: The optional last argument of @code{define_insn} and
                   3509: @code{define_peephole} is a vector of expressions, each of which defines
                   3510: the value for a single attribute.  The most general way of assigning an
                   3511: attribute's value is to use a @code{set} expression whose first operand is an
                   3512: @code{attr} expression giving the name of the attribute being set.  The
                   3513: second operand of the @code{set} is an attribute expression
                   3514: (@pxref{Expressions}) giving the value of the attribute.@refill
                   3515: 
                   3516: When the attribute value depends on the @samp{alternative} attribute
                   3517: (i.e., which is the applicable alternative in the constraint of the
1.1.1.4   root     3518: insn), the @code{set_attr_alternative} expression can be used.  It
1.1       root     3519: allows the specification of a vector of attribute expressions, one for
                   3520: each alternative.
                   3521: 
                   3522: @findex set_attr
                   3523: When the generality of arbitrary attribute expressions is not required,
                   3524: the simpler @code{set_attr} expression can be used, which allows
                   3525: specifying a string giving either a single attribute value or a list
                   3526: of attribute values, one for each alternative.
                   3527: 
                   3528: The form of each of the above specifications is shown below.  In each case,
                   3529: @var{name} is a string specifying the attribute to be set.
                   3530: 
                   3531: @table @code
                   3532: @item (set_attr @var{name} @var{value-string})
                   3533: @var{value-string} is either a string giving the desired attribute value,
                   3534: or a string containing a comma-separated list giving the values for
                   3535: succeeding alternatives.  The number of elements must match the number
                   3536: of alternatives in the constraint of the insn pattern.
                   3537: 
                   3538: Note that it may be useful to specify @samp{*} for some alternative, in
                   3539: which case the attribute will assume its default value for insns matching
                   3540: that alternative.
                   3541: 
                   3542: @findex set_attr_alternative
                   3543: @item (set_attr_alternative @var{name} [@var{value1} @var{value2} @dots{}])
                   3544: Depending on the alternative of the insn, the value will be one of the
                   3545: specified values.  This is a shorthand for using a @code{cond} with
                   3546: tests on the @samp{alternative} attribute.
                   3547: 
                   3548: @findex attr
                   3549: @item (set (attr @var{name}) @var{value})
                   3550: The first operand of this @code{set} must be the special RTL expression
                   3551: @code{attr}, whose sole operand is a string giving the name of the
                   3552: attribute being set.  @var{value} is the value of the attribute.
                   3553: @end table
                   3554: 
                   3555: The following shows three different ways of representing the same
                   3556: attribute value specification:
                   3557: 
1.1.1.5   root     3558: @smallexample
1.1       root     3559: (set_attr "type" "load,store,arith")
                   3560: 
                   3561: (set_attr_alternative "type"
                   3562:                       [(const_string "load") (const_string "store")
                   3563:                        (const_string "arith")])
                   3564: 
                   3565: (set (attr "type")
                   3566:      (cond [(eq_attr "alternative" "1") (const_string "load")
                   3567:             (eq_attr "alternative" "2") (const_string "store")]
                   3568:            (const_string "arith")))
1.1.1.5   root     3569: @end smallexample
1.1       root     3570: 
1.1.1.5   root     3571: @need 1000
1.1       root     3572: @findex define_asm_attributes
                   3573: The @code{define_asm_attributes} expression provides a mechanism to
                   3574: specify the attributes assigned to insns produced from an @code{asm}
1.1.1.5   root     3575: statement.  It has the form:
1.1       root     3576: 
1.1.1.5   root     3577: @smallexample
1.1       root     3578: (define_asm_attributes [@var{attr-sets}])
1.1.1.5   root     3579: @end smallexample
1.1       root     3580: 
                   3581: @noindent
1.1.1.5   root     3582: where @var{attr-sets} is specified the same as for both the
                   3583: @code{define_insn} and the @code{define_peephole} expressions.
1.1       root     3584: 
                   3585: These values will typically be the ``worst case'' attribute values.  For
                   3586: example, they might indicate that the condition code will be clobbered.
                   3587: 
1.1.1.5   root     3588: A specification for a @code{length} attribute is handled specially.  The
                   3589: way to compute the length of an @code{asm} insn is to multiply the
                   3590: length specified in the expression @code{define_asm_attributes} by the
                   3591: number of machine instructions specified in the @code{asm} statement,
                   3592: determined by counting the number of semicolons and newlines in the
                   3593: string.  Therefore, the value of the @code{length} attribute specified
                   3594: in a @code{define_asm_attributes} should be the maximum possible length
                   3595: of a single machine instruction.
1.1       root     3596: 
1.1.1.5   root     3597: @node Attr Example
1.1       root     3598: @subsection Example of Attribute Specifications
                   3599: @cindex attribute specifications example
                   3600: @cindex attribute specifications
                   3601: 
                   3602: The judicious use of defaulting is important in the efficient use of
                   3603: insn attributes.  Typically, insns are divided into @dfn{types} and an
                   3604: attribute, customarily called @code{type}, is used to represent this
                   3605: value.  This attribute is normally used only to define the default value
                   3606: for other attributes.  An example will clarify this usage.
                   3607: 
                   3608: Assume we have a RISC machine with a condition code and in which only
                   3609: full-word operations are performed in registers.  Let us assume that we
                   3610: can divide all insns into loads, stores, (integer) arithmetic
                   3611: operations, floating point operations, and branches.
                   3612: 
                   3613: Here we will concern ourselves with determining the effect of an insn on
                   3614: the condition code and will limit ourselves to the following possible
                   3615: effects:  The condition code can be set unpredictably (clobbered), not
                   3616: be changed, be set to agree with the results of the operation, or only
                   3617: changed if the item previously set into the condition code has been
                   3618: modified.
                   3619: 
                   3620: Here is part of a sample @file{md} file for such a machine:
                   3621: 
1.1.1.5   root     3622: @smallexample
1.1       root     3623: (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
                   3624: 
                   3625: (define_attr "cc" "clobber,unchanged,set,change0"
                   3626:              (cond [(eq_attr "type" "load")
                   3627:                         (const_string "change0")
                   3628:                     (eq_attr "type" "store,branch")
                   3629:                         (const_string "unchanged")
                   3630:                     (eq_attr "type" "arith")
                   3631:                         (if_then_else (match_operand:SI 0 "" "")
                   3632:                                       (const_string "set")
                   3633:                                       (const_string "clobber"))]
                   3634:                    (const_string "clobber")))
                   3635: 
                   3636: (define_insn ""
                   3637:   [(set (match_operand:SI 0 "general_operand" "=r,r,m")
                   3638:         (match_operand:SI 1 "general_operand" "r,m,r"))]
                   3639:   ""
                   3640:   "@@
                   3641:    move %0,%1
                   3642:    load %0,%1
                   3643:    store %0,%1"
                   3644:   [(set_attr "type" "arith,load,store")])
1.1.1.5   root     3645: @end smallexample
1.1       root     3646: 
                   3647: Note that we assume in the above example that arithmetic operations
                   3648: performed on quantities smaller than a machine word clobber the condition
                   3649: code since they will set the condition code to a value corresponding to the
                   3650: full-word result.
                   3651: 
1.1.1.5   root     3652: @node Insn Lengths
1.1       root     3653: @subsection Computing the Length of an Insn
                   3654: @cindex insn lengths, computing
                   3655: @cindex computing the length of an insn
                   3656: 
                   3657: For many machines, multiple types of branch instructions are provided, each
                   3658: for different length branch displacements.  In most cases, the assembler
                   3659: will choose the correct instruction to use.  However, when the assembler
                   3660: cannot do so, GCC can when a special attribute, the @samp{length}
                   3661: attribute, is defined.  This attribute must be defined to have numeric
                   3662: values by specifying a null string in its @code{define_attr}.
                   3663: 
                   3664: In the case of the @samp{length} attribute, two additional forms of
                   3665: arithmetic terms are allowed in test expressions:
                   3666: 
                   3667: @table @code
                   3668: @cindex @code{match_dup} and attributes
                   3669: @item (match_dup @var{n})
                   3670: This refers to the address of operand @var{n} of the current insn, which
                   3671: must be a @code{label_ref}.
                   3672: 
                   3673: @cindex @code{pc} and attributes
                   3674: @item (pc)
                   3675: This refers to the address of the @emph{current} insn.  It might have
                   3676: been more consistent with other usage to make this the address of the
                   3677: @emph{next} insn but this would be confusing because the length of the 
                   3678: current insn is to be computed.
                   3679: @end table
                   3680: 
                   3681: @cindex @code{addr_vec}, length of
                   3682: @cindex @code{addr_diff_vec}, length of
                   3683: For normal insns, the length will be determined by value of the
                   3684: @samp{length} attribute.  In the case of @code{addr_vec} and
1.1.1.5   root     3685: @code{addr_diff_vec} insn patterns, the length is computed as
                   3686: the number of vectors multiplied by the size of each vector.
                   3687: 
                   3688: Lengths are measured in addressable storage units (bytes). 
1.1       root     3689: 
                   3690: The following macros can be used to refine the length computation:
                   3691: 
                   3692: @table @code
                   3693: @findex FIRST_INSN_ADDRESS
                   3694: @item FIRST_INSN_ADDRESS
                   3695: When the @code{length} insn attribute is used, this macro specifies the
                   3696: value to be assigned to the address of the first insn in a function.  If
                   3697: not specified, 0 is used.
                   3698: 
                   3699: @findex ADJUST_INSN_LENGTH
                   3700: @item ADJUST_INSN_LENGTH (@var{insn}, @var{length})
                   3701: If defined, modifies the length assigned to instruction @var{insn} as a
                   3702: function of the context in which it is used.  @var{length} is an lvalue
                   3703: that contains the initially computed length of the insn and should be
                   3704: updated with the correct length of the insn.  If updating is required,
                   3705: @var{insn} must not be a varying-length insn.
                   3706: 
                   3707: This macro will normally not be required.  A case in which it is
                   3708: required is the ROMP.  On this machine, the size of an @code{addr_vec}
                   3709: insn must be increased by two to compensate for the fact that alignment
                   3710: may be required.
                   3711: @end table
                   3712: 
1.1.1.2   root     3713: @findex get_attr_length
1.1.1.5   root     3714: The routine that returns @code{get_attr_length} (the value of the
                   3715: @code{length} attribute) can be used by the output routine to
                   3716: determine the form of the branch instruction to be written, as the
                   3717: example below illustrates.
1.1       root     3718: 
                   3719: As an example of the specification of variable-length branches, consider
                   3720: the IBM 360.  If we adopt the convention that a register will be set to
1.1.1.5   root     3721: the starting address of a function, we can jump to labels within 4k of
1.1       root     3722: the start using a four-byte instruction.  Otherwise, we need a six-byte
                   3723: sequence to load the address from memory and then branch to it.
                   3724: 
                   3725: On such a machine, a pattern for a branch instruction might be specified
                   3726: as follows:
                   3727: 
1.1.1.5   root     3728: @smallexample
1.1       root     3729: (define_insn "jump"
                   3730:   [(set (pc)
                   3731:         (label_ref (match_operand 0 "" "")))]
                   3732:   ""
                   3733:   "*
                   3734: @{
                   3735:    return (get_attr_length (insn) == 4
                   3736:            ? \"b %l0\" : \"l r15,=a(%l0); br r15\");
                   3737: @}"
                   3738:   [(set (attr "length") (if_then_else (lt (match_dup 0) (const_int 4096))
                   3739:                                       (const_int 4)
                   3740:                                       (const_int 6)))])
1.1.1.5   root     3741: @end smallexample
1.1       root     3742: 
1.1.1.5   root     3743: @node Constant Attributes
1.1.1.2   root     3744: @subsection Constant Attributes
                   3745: @cindex constant attributes
                   3746: 
1.1.1.3   root     3747: A special form of @code{define_attr}, where the expression for the
                   3748: default value is a @code{const} expression, indicates an attribute that
                   3749: is constant for a given run of the compiler.  Constant attributes may be
                   3750: used to specify which variety of processor is used.  For example,
1.1.1.2   root     3751: 
1.1.1.5   root     3752: @smallexample
1.1.1.2   root     3753: (define_attr "cpu" "m88100,m88110,m88000"
                   3754:  (const
                   3755:   (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
1.1.1.4   root     3756:          (symbol_ref "TARGET_88110") (const_string "m88110")]
                   3757:         (const_string "m88000"))))
1.1.1.2   root     3758: 
                   3759: (define_attr "memory" "fast,slow"
                   3760:  (const
                   3761:   (if_then_else (symbol_ref "TARGET_FAST_MEM")
1.1.1.4   root     3762:                 (const_string "fast")
                   3763:                 (const_string "slow"))))
1.1.1.5   root     3764: @end smallexample
1.1.1.2   root     3765: 
                   3766: The routine generated for constant attributes has no parameters as it
1.1.1.3   root     3767: does not depend on any particular insn.  RTL expressions used to define
                   3768: the value of a constant attribute may use the @code{symbol_ref} form,
                   3769: but may not use either the @code{match_operand} form or @code{eq_attr}
                   3770: forms involving insn attributes.
1.1.1.2   root     3771: 
1.1.1.5   root     3772: @node Delay Slots
1.1       root     3773: @subsection Delay Slot Scheduling
                   3774: @cindex delay slots, defining
                   3775: 
                   3776: The insn attribute mechanism can be used to specify the requirements for
                   3777: delay slots, if any, on a target machine.  An instruction is said to
                   3778: require a @dfn{delay slot} if some instructions that are physically
                   3779: after the instruction are executed as if they were located before it.
                   3780: Classic examples are branch and call instructions, which often execute
                   3781: the following instruction before the branch or call is performed.
                   3782: 
                   3783: On some machines, conditional branch instructions can optionally
                   3784: @dfn{annul} instructions in the delay slot.  This means that the
                   3785: instruction will not be executed for certain branch outcomes.  Both
                   3786: instructions that annul if the branch is true and instructions that
                   3787: annul if the branch is false are supported.
                   3788:   
                   3789: Delay slot scheduling differs from instruction scheduling in that
                   3790: determining whether an instruction needs a delay slot is dependent only
                   3791: on the type of instruction being generated, not on data flow between the
                   3792: instructions.  See the next section for a discussion of data-dependent
                   3793: instruction scheduling.
                   3794: 
                   3795: @findex define_delay
                   3796: The requirement of an insn needing one or more delay slots is indicated
                   3797: via the @code{define_delay} expression.  It has the following form:
                   3798: 
1.1.1.5   root     3799: @smallexample
1.1       root     3800: (define_delay @var{test}
                   3801:               [@var{delay-1} @var{annul-true-1} @var{annul-false-1}
                   3802:                @var{delay-2} @var{annul-true-2} @var{annul-false-2}
                   3803:                @dots{}])
1.1.1.5   root     3804: @end smallexample
1.1       root     3805: 
                   3806: @var{test} is an attribute test that indicates whether this
                   3807: @code{define_delay} applies to a particular insn.  If so, the number of
                   3808: required delay slots is determined by the length of the vector specified
                   3809: as the second argument.  An insn placed in delay slot @var{n} must
                   3810: satisfy attribute test @var{delay-n}.  @var{annul-true-n} is an
                   3811: attribute test that specifies which insns may be annulled if the branch
                   3812: is true.  Similarly, @var{annul-false-n} specifies which insns in the
                   3813: delay slot may be annulled if the branch is false.  If annulling is not
                   3814: supported for that delay slot, @code{(nil)} should be coded.@refill
                   3815: 
                   3816: For example, in the common case where branch and call insns require
                   3817: a single delay slot, which may contain any insn other than a branch or
                   3818: call, the following would be placed in the @file{md} file:
                   3819: 
1.1.1.5   root     3820: @smallexample
1.1       root     3821: (define_delay (eq_attr "type" "branch,call")
                   3822:               [(eq_attr "type" "!branch,call") (nil) (nil)])
1.1.1.5   root     3823: @end smallexample
1.1       root     3824: 
                   3825: Multiple @code{define_delay} expressions may be specified.  In this
                   3826: case, each such expression specifies different delay slot requirements
                   3827: and there must be no insn for which tests in two @code{define_delay}
                   3828: expressions are both true.
                   3829: 
                   3830: For example, if we have a machine that requires one delay slot for branches
                   3831: but two for calls,  no delay slot can contain a branch or call insn,
                   3832: and any valid insn in the delay slot for the branch can be annulled if the
                   3833: branch is true, we might represent this as follows:
                   3834: 
1.1.1.5   root     3835: @smallexample
1.1       root     3836: (define_delay (eq_attr "type" "branch")
1.1.1.5   root     3837:    [(eq_attr "type" "!branch,call")
                   3838:     (eq_attr "type" "!branch,call")
                   3839:     (nil)])
1.1       root     3840: 
                   3841: (define_delay (eq_attr "type" "call")
                   3842:               [(eq_attr "type" "!branch,call") (nil) (nil)
                   3843:                (eq_attr "type" "!branch,call") (nil) (nil)])
1.1.1.5   root     3844: @end smallexample
                   3845: @c the above is *still* too long.  --mew 4feb93
1.1       root     3846: 
1.1.1.5   root     3847: @node Function Units
1.1       root     3848: @subsection Specifying Function Units
                   3849: @cindex function units, for scheduling
                   3850: 
                   3851: On most RISC machines, there are instructions whose results are not
                   3852: available for a specific number of cycles.  Common cases are instructions
                   3853: that load data from memory.  On many machines, a pipeline stall will result
                   3854: if the data is referenced too soon after the load instruction.
                   3855: 
                   3856: In addition, many newer microprocessors have multiple function units, usually
                   3857: one for integer and one for floating point, and often will incur pipeline
                   3858: stalls when a result that is needed is not yet ready.
                   3859: 
                   3860: The descriptions in this section allow the specification of how much
                   3861: time must elapse between the execution of an instruction and the time
                   3862: when its result is used.  It also allows specification of when the
                   3863: execution of an instruction will delay execution of similar instructions
                   3864: due to function unit conflicts.
                   3865: 
                   3866: For the purposes of the specifications in this section, a machine is
                   3867: divided into @dfn{function units}, each of which execute a specific
1.1.1.4   root     3868: class of instructions in first-in-first-out order.  Function units that
                   3869: accept one instruction each cycle and allow a result to be used in the
                   3870: succeeding instruction (usually via forwarding) need not be specified.
                   3871: Classic RISC microprocessors will normally have a single function unit,
                   3872: which we can call @samp{memory}.  The newer ``superscalar'' processors
                   3873: will often have function units for floating point operations, usually at
                   3874: least a floating point adder and multiplier.
1.1       root     3875: 
                   3876: @findex define_function_unit
                   3877: Each usage of a function units by a class of insns is specified with a
                   3878: @code{define_function_unit} expression, which looks like this:
                   3879: 
1.1.1.5   root     3880: @smallexample
1.1       root     3881: (define_function_unit @var{name} @var{multiplicity} @var{simultaneity}
1.1.1.4   root     3882:                       @var{test} @var{ready-delay} @var{issue-delay}
                   3883:                      [@var{conflict-list}])
1.1.1.5   root     3884: @end smallexample
1.1       root     3885: 
                   3886: @var{name} is a string giving the name of the function unit.
                   3887: 
                   3888: @var{multiplicity} is an integer specifying the number of identical
                   3889: units in the processor.  If more than one unit is specified, they will
                   3890: be scheduled independently.  Only truly independent units should be
                   3891: counted; a pipelined unit should be specified as a single unit.  (The
                   3892: only common example of a machine that has multiple function units for a
                   3893: single instruction class that are truly independent and not pipelined
                   3894: are the two multiply and two increment units of the CDC 6600.)
                   3895: 
                   3896: @var{simultaneity} specifies the maximum number of insns that can be
                   3897: executing in each instance of the function unit simultaneously or zero
                   3898: if the unit is pipelined and has no limit.
                   3899: 
                   3900: All @code{define_function_unit} definitions referring to function unit
                   3901: @var{name} must have the same name and values for @var{multiplicity} and
                   3902: @var{simultaneity}.
                   3903: 
                   3904: @var{test} is an attribute test that selects the insns we are describing
                   3905: in this definition.  Note that an insn may use more than one function
                   3906: unit and a function unit may be specified in more than one
                   3907: @code{define_function_unit}.
                   3908: 
                   3909: @var{ready-delay} is an integer that specifies the number of cycles
                   3910: after which the result of the instruction can be used without
                   3911: introducing any stalls.
                   3912: 
1.1.1.4   root     3913: @var{issue-delay} is an integer that specifies the number of cycles
                   3914: after the instruction matching the @var{test} expression begins using
                   3915: this unit until a subsequent instruction can begin.  A cost of @var{N}
                   3916: indicates an @var{N-1} cycle delay.  A subsequent instruction may also
                   3917: be delayed if an earlier instruction has a longer @var{ready-delay}
                   3918: value.  This blocking effect is computed using the @var{simultaneity},
                   3919: @var{ready-delay}, @var{issue-delay}, and @var{conflict-list} terms.
                   3920: For a normal non-pipelined function unit, @var{simultaneity} is one, the
                   3921: unit is taken to block for the @var{ready-delay} cycles of the executing
                   3922: insn, and smaller values of @var{issue-delay} are ignored.
1.1       root     3923: 
                   3924: @var{conflict-list} is an optional list giving detailed conflict costs
                   3925: for this unit.  If specified, it is a list of condition test expressions
1.1.1.4   root     3926: to be applied to insns chosen to execute in @var{name} following the
                   3927: particular insn matching @var{test} that is already executing in
                   3928: @var{name}.  For each insn in the list, @var{issue-delay} specifies the
                   3929: conflict cost; for insns not in the list, the cost is zero.  If not
                   3930: specified, @var{conflict-list} defaults to all instructions that use the
                   3931: function unit.
1.1       root     3932: 
                   3933: Typical uses of this vector are where a floating point function unit can
                   3934: pipeline either single- or double-precision operations, but not both, or
                   3935: where a memory unit can pipeline loads, but not stores, etc.
                   3936: 
                   3937: As an example, consider a classic RISC machine where the result of a
                   3938: load instruction is not available for two cycles (a single ``delay''
                   3939: instruction is required) and where only one load instruction can be executed
                   3940: simultaneously.  This would be specified as:
                   3941: 
1.1.1.5   root     3942: @smallexample
1.1.1.4   root     3943: (define_function_unit "memory" 1 1 (eq_attr "type" "load") 2 0)
1.1.1.5   root     3944: @end smallexample
1.1       root     3945: 
                   3946: For the case of a floating point function unit that can pipeline either
                   3947: single or double precision, but not both, the following could be specified:
                   3948: 
1.1.1.5   root     3949: @smallexample
1.1       root     3950: (define_function_unit
1.1.1.4   root     3951:    "fp" 1 0 (eq_attr "type" "sp_fp") 4 4 [(eq_attr "type" "dp_fp")])
1.1       root     3952: (define_function_unit
1.1.1.4   root     3953:    "fp" 1 0 (eq_attr "type" "dp_fp") 4 4 [(eq_attr "type" "sp_fp")])
1.1.1.5   root     3954: @end smallexample
1.1       root     3955: 
1.1.1.4   root     3956: @strong{Note:} The scheduler attempts to avoid function unit conflicts
                   3957: and uses all the specifications in the @code{define_function_unit}
                   3958: expression.  It has recently come to our attention that these
                   3959: specifications may not allow modeling of some of the newer
                   3960: ``superscalar'' processors that have insns using multiple pipelined
                   3961: units.  These insns will cause a potential conflict for the second unit
                   3962: used during their execution and there is no way of representing that
                   3963: conflict.  We welcome any examples of how function unit conflicts work
                   3964: in such processors and suggestions for their representation.
1.1       root     3965: @end ifset

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.