home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / gccdist / gcc / gcc.info-7 < prev    next >
Encoding:
GNU Info File  |  1992-09-10  |  41.9 KB  |  952 lines

  1. This is Info file gcc.info, produced by Makeinfo-1.47 from the input
  2. file gcc.texinfo.
  3.  
  4.    This file documents the use and the internals of the GNU compiler.
  5.  
  6.    Copyright (C) 1988, 1989, 1990 Free Software Foundation, Inc.
  7.  
  8.    Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.  
  12.    Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided also
  14. that the sections entitled "GNU General Public License" and "Protect
  15. Your Freedom--Fight `Look And Feel'" are included exactly as in the
  16. original, and provided that the entire resulting derived work is
  17. distributed under the terms of a permission notice identical to this
  18. one.
  19.  
  20.    Permission is granted to copy and distribute translations of this
  21. manual into another language, under the above conditions for modified
  22. versions, except that the sections entitled "GNU General Public
  23. License" and "Protect Your Freedom--Fight `Look And Feel'" and this
  24. permission notice may be included in translations approved by the Free
  25. Software Foundation instead of in the original English.
  26.  
  27. 
  28. File: gcc.info,  Node: Sharing,  Prev: Calls,  Up: RTL
  29.  
  30. Structure Sharing Assumptions
  31. =============================
  32.  
  33.    The compiler assumes that certain kinds of RTL expressions are
  34. unique; there do not exist two distinct objects representing the same
  35. value. In other cases, it makes an opposite assumption: that no RTL
  36. expression object of a certain kind appears in more than one place in
  37. the containing structure.
  38.  
  39.    These assumptions refer to a single function; except for the RTL
  40. objects that describe global variables and external functions, no RTL
  41. objects are common to two functions.
  42.  
  43.    * Each pseudo-register has only a single `reg' object to represent
  44.      it, and therefore only a single machine mode.
  45.  
  46.    * For any symbolic label, there is only one `symbol_ref' object
  47.      referring to it.
  48.  
  49.    * There is only one `const_int' expression with value zero, and only
  50.      one with value one.
  51.  
  52.    * There is only one `pc' expression.
  53.  
  54.    * There is only one `cc0' expression.
  55.  
  56.    * There is only one `const_double' expression with mode `SFmode' and
  57.      value zero, and only one with mode `DFmode' and value zero.
  58.  
  59.    * No `label_ref' appears in more than one place in the RTL
  60.      structure; in other words, it is safe to do a tree-walk of all the
  61.      insns in the function and assume that each time a `label_ref' is
  62.      seen it is distinct from all others that are seen.
  63.  
  64.    * Only one `mem' object is normally created for each static variable
  65.      or stack slot, so these objects are frequently shared in all the
  66.      places they appear.  However, separate but equal objects for these
  67.      variables are occasionally made.
  68.  
  69.    * When a single `asm' statement has multiple output operands, a
  70.      distinct `asm_operands' RTX is made for each output operand.
  71.      However, these all share the vector which contains the sequence of
  72.      input operands.  Because this sharing is used later on to test
  73.      whether two `asm_operands' RTX's come from the same statement, the
  74.      sharing must be guaranteed to be preserved.
  75.  
  76.    * No RTL object appears in more than one place in the RTL structure
  77.      except as described above.  Many passes of the compiler rely on
  78.      this by assuming that they can modify RTL objects in place without
  79.      unwanted side-effects on other insns.
  80.  
  81.    * During initial RTL generation, shared structure is freely
  82.      introduced. After all the RTL for a function has been generated,
  83.      all shared structure is copied by `unshare_all_rtl' in
  84.      `emit-rtl.c', after which the above rules are guaranteed to be
  85.      followed.
  86.  
  87.    * During the combiner pass, shared structure with an insn can exist
  88.      temporarily.  However, the shared structure is copied before the
  89.      combiner is finished with the insn.  This is done by
  90.      `copy_substitutions' in `combine.c'.
  91.  
  92. 
  93. File: gcc.info,  Node: Machine Desc,  Next: Machine Macros,  Prev: RTL,  Up: Top
  94.  
  95. Machine Descriptions
  96. ********************
  97.  
  98.    A machine description has two parts: a file of instruction patterns
  99. (`.md' file) and a C header file of macro definitions.
  100.  
  101.    The `.md' file for a target machine contains a pattern for each
  102. instruction that the target machine supports (or at least each
  103. instruction that is worth telling the compiler about).  It may also
  104. contain comments. A semicolon causes the rest of the line to be a
  105. comment, unless the semicolon is inside a quoted string.
  106.  
  107.    See the next chapter for information on the C header file.
  108.  
  109. * Menu:
  110.  
  111. * Patterns::            How to write instruction patterns.
  112. * Example::             An explained example of a `define_insn' pattern.
  113. * RTL Template::        The RTL template defines what insns match a pattern.
  114. * Output Template::     The output template says how to make assembler code
  115.                           from such an insn.
  116. * Output Statement::    For more generality, write C code to output
  117.                           the assembler code.
  118. * Constraints::         When not all operands are general operands.
  119. * Standard Names::      Names mark patterns to use for code generation.
  120. * Pattern Ordering::    When the order of patterns makes a difference.
  121. * Dependent Patterns::  Having one pattern may make you need another.
  122. * Jump Patterns::       Special considerations for patterns for jump insns.
  123. * Peephole Definitions::Defining machine-specific peephole optimizations.
  124. * Expander Definitions::Generating a sequence of several RTL insns
  125.                          for a standard operation.
  126.  
  127. 
  128. File: gcc.info,  Node: Patterns,  Next: Example,  Prev: Machine Desc,  Up: Machine Desc
  129.  
  130. Everything about Instruction Patterns
  131. =====================================
  132.  
  133.    Each instruction pattern contains an incomplete RTL expression, with
  134. pieces to be filled in later, operand constraints that restrict how the
  135. pieces can be filled in, and an output pattern or C code to generate
  136. the assembler output, all wrapped up in a `define_insn' expression.
  137.  
  138.    A `define_insn' is an RTL expression containing four or five
  139. operands:
  140.  
  141.   1. An optional name.  The presence of a name indicate that this
  142.      instruction pattern can perform a certain standard job for the
  143.      RTL-generation pass of the compiler.  This pass knows certain
  144.      names and will use the instruction patterns with those names, if
  145.      the names are defined in the machine description.
  146.  
  147.      The absence of a name is indicated by writing an empty string
  148.      where the name should go.  Nameless instruction patterns are never
  149.      used for generating RTL code, but they may permit several simpler
  150.      insns to be combined later on.
  151.  
  152.      Names that are not thus known and used in RTL-generation have no
  153.      effect; they are equivalent to no name at all.
  154.  
  155.   2. The "RTL template" (*note RTL Template::.) is a vector of
  156.      incomplete RTL expressions which show what the instruction should
  157.      look like.  It is incomplete because it may contain `match_operand'
  158.      and `match_dup' expressions that stand for operands of the
  159.      instruction.
  160.  
  161.      If the vector has only one element, that element is the template
  162.      for the instruction pattern.  If the vector has multiple elements,
  163.      then the instruction pattern is a `parallel' expression containing
  164.      the elements described.
  165.  
  166.   3. A condition.  This is a string which contains a C expression that
  167.      is the final test to decide whether an insn body matches this
  168.      pattern.
  169.  
  170.      For a named pattern, the condition (if present) may not depend on
  171.      the data in the insn being matched, but only the
  172.      target-machine-type flags.  The compiler needs to test these
  173.      conditions during initialization in order to learn exactly which
  174.      named instructions are available in a particular run.
  175.  
  176.      For nameless patterns, the condition is applied only when matching
  177.      an individual insn, and only after the insn has matched the
  178.      pattern's recognition template.  The insn's operands may be found
  179.      in the vector `operands'.
  180.  
  181.   4. The "output template": a string that says how to output matching
  182.      insns as assembler code.  `%' in this string specifies where to
  183.      substitute the value of an operand.  *Note Output Template::.
  184.  
  185.      When simple substitution isn't general enough, you can specify a
  186.      piece of C code to compute the output.  *Note Output Statement::.
  187.  
  188.   5. Optionally, some "machine-specific information".  The meaning of
  189.      this information is defined only by an individual machine
  190.      description; typically it might say whether this insn alters the
  191.      condition codes, or how many bytes of output it generates.
  192.  
  193.      This operand is written as a string containing a C initializer
  194.      (complete with braces) for the structure type `INSN_MACHINE_INFO',
  195.      whose definition is up to you (*note Misc::.).
  196.  
  197. 
  198. File: gcc.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
  199.  
  200. Example of `define_insn'
  201. ========================
  202.  
  203.    Here is an actual example of an instruction pattern, for the
  204. 68000/68020.
  205.  
  206.      (define_insn "tstsi"
  207.        [(set (cc0)
  208.              (match_operand:SI 0 "general_operand" "rm"))]
  209.        ""
  210.        "*
  211.      { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
  212.          return \"tstl %0\";
  213.        return \"cmpl #0,%0\"; }")
  214.  
  215.    This is an instruction that sets the condition codes based on the
  216. value of a general operand.  It has no condition, so any insn whose RTL
  217. description has the form shown may be handled according to this
  218. pattern.  The name `tstsi' means "test a `SImode' value" and tells the
  219. RTL generation pass that, when it is necessary to test such a value, an
  220. insn to do so can be constructed using this pattern.
  221.  
  222.    The output control string is a piece of C code which chooses which
  223. output template to return based on the kind of operand and the specific
  224. type of CPU for which code is being generated.
  225.  
  226.    `"rm"' is an operand constraint.  Its meaning is explained below.
  227.  
  228. 
  229. File: gcc.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
  230.  
  231. RTL Template for Generating and Recognizing Insns
  232. =================================================
  233.  
  234.    The RTL template is used to define which insns match the particular
  235. pattern and how to find their operands.  For named patterns, the RTL
  236. template also says how to construct an insn from specified operands.
  237.  
  238.    Construction involves substituting specified operands into a copy of
  239. the template.  Matching involves determining the values that serve as
  240. the operands in the insn being matched.  Both of these activities are
  241. controlled by special expression types that direct matching and
  242. substitution of the operands.
  243.  
  244. `(match_operand:M N PRED CONSTRAINT)'
  245.      This expression is a placeholder for operand number N of the insn.
  246.       When constructing an insn, operand number N will be substituted
  247.      at this point.  When matching an insn, whatever appears at this
  248.      position in the insn will be taken as operand number N; but it
  249.      must satisfy PRED or this instruction pattern will not match at
  250.      all.
  251.  
  252.      Operand numbers must be chosen consecutively counting from zero in
  253.      each instruction pattern.  There may be only one `match_operand'
  254.      expression in the pattern for each operand number.  Usually
  255.      operands are numbered in the order of appearance in `match_operand'
  256.      expressions.
  257.  
  258.      PRED is a string that is the name of a C function that accepts two
  259.      arguments, an expression and a machine mode.  During matching, the
  260.      function will be called with the putative operand as the expression
  261.      and M as the mode argument.  If it returns zero, this instruction
  262.      pattern fails to match.  PRED may be an empty string; then it
  263.      means no test is to be done on the operand, so anything which
  264.      occurs in this position is valid.
  265.  
  266.      CONSTRAINT controls reloading and the choice of the best register
  267.      class to use for a value, as explained later (*note
  268.      Constraints::.).
  269.  
  270.      People are often unclear on the difference between the constraint
  271.      and the predicate.  The predicate helps decide whether a given
  272.      insn matches the pattern.  The constraint plays no role in this
  273.      decision; instead, it controls various decisions in the case of an
  274.      insn which does match.
  275.  
  276.      Most often, PRED is `"general_operand"'.  This function checks
  277.      that the putative operand is either a constant, a register or a
  278.      memory reference, and that it is valid for mode M.
  279.  
  280.      For an operand that must be a register, PRED should be
  281.      `"register_operand"'.  It would be valid to use
  282.      `"general_operand"', since the reload pass would copy any
  283.      non-register operands through registers, but this would make GNU
  284.      CC do extra work, and it would prevent the register allocator from
  285.      doing the best possible job.
  286.  
  287.      For an operand that must be a constant, either PRED should be
  288.      `"immediate_operand"', or the instruction pattern's extra
  289.      condition should check for constants, or both.  You cannot expect
  290.      the constraints to do this work!  If the constraints allow only
  291.      constants, but the predicate allows something else, the compiler
  292.      will crash when that case arises.
  293.  
  294. `(match_dup N)'
  295.      This expression is also a placeholder for operand number N. It is
  296.      used when the operand needs to appear more than once in the insn.
  297.  
  298.      In construction, `match_dup' behaves exactly like `match_operand':
  299.      the operand is substituted into the insn being constructed.  But
  300.      in matching, `match_dup' behaves differently. It assumes that
  301.      operand number N has already been determined by a `match_operand'
  302.      appearing earlier in the recognition template, and it matches only
  303.      an identical-looking expression.
  304.  
  305. `(match_operator:M N "PREDICATE" [OPERANDS...])'
  306.      This pattern is a kind of placeholder for a variable RTL expression
  307.      code.
  308.  
  309.      When constructing an insn, it stands for an RTL expression whose
  310.      expression code is taken from that of operand N, and whose
  311.      operands are constructed from the patterns OPERANDS.
  312.  
  313.      When matching an expression, it matches an expression if the
  314.      function PREDICATE returns nonzero on that expression *and* the
  315.      patterns OPERANDS match the operands of the expression.
  316.  
  317.      Suppose that the function `commutative_operator' is defined as
  318.      follows, to match any expression whose operator is one of the six
  319.      commutative arithmetic operators of RTL and whose mode is MODE:
  320.  
  321.           int
  322.           commutative_operator (x, mode)
  323.                rtx x;
  324.                enum machine_mode mode;
  325.           {
  326.             enum rtx_code code = GET_CODE (x);
  327.             if (GET_MODE (x) != mode)
  328.               return 0;
  329.             return (code == PLUS || code == MULT || code == UMULT
  330.                     || code == AND || code == IOR || code == XOR);
  331.           }
  332.  
  333.      Then the following pattern will match any RTL expression consisting
  334.      of a commutative operator applied to two general operands:
  335.  
  336.           (match_operator:SI 2 "commutative_operator"
  337.             [(match_operand:SI 3 "general_operand" "g")
  338.              (match_operand:SI 4 "general_operand" "g")])
  339.  
  340.      Here the vector `[OPERANDS...]' contains two patterns because the
  341.      expressions to be matched all contain two operands.
  342.  
  343.      When this pattern does match, the two operands of the commutative
  344.      operator are recorded as operands 3 and 4 of the insn.  (This is
  345.      done by the two instances of `match_operand'.)  Operand 2 of the
  346.      insn will be the entire commutative expression: use `GET_CODE
  347.      (operands[2])' to see which commutative operator was used.
  348.  
  349.      The machine mode M of `match_operator' works like that of
  350.      `match_operand': it is passed as the second argument to the
  351.      predicate function, and that function is solely responsible for
  352.      deciding whether the expression to be matched "has" that mode.
  353.  
  354.      When constructing an insn, argument 2 of the gen-function will
  355.      specify the operation (i.e. the expression code) for the
  356.      expression to be made.  It should be an RTL expression, whose
  357.      expression code is copied into a new expression whose operands are
  358.      arguments 3 and 4 of the gen-function.  The subexpressions of
  359.      argument 2 are not used; only its expression code matters.
  360.  
  361.      There is no way to specify constraints in `match_operator'.  The
  362.      operand of the insn which corresponds to the `match_operator'
  363.      never has any constraints because it is never reloaded as a whole.
  364.      However, if parts of its OPERANDS are matched by `match_operand'
  365.      patterns, those parts may have constraints of their own.
  366.  
  367. `(address (match_operand:M N "address_operand" ""))'
  368.      This complex of expressions is a placeholder for an operand number
  369.      N in a "load address" instruction: an operand which specifies a
  370.      memory location in the usual way, but for which the actual operand
  371.      value used is the address of the location, not the contents of the
  372.      location.
  373.  
  374.      `address' expressions never appear in RTL code, only in machine
  375.      descriptions.  And they are used only in machine descriptions that
  376.      do not use the operand constraint feature.  When operand
  377.      constraints are in use, the letter `p' in the constraint serves
  378.      this purpose.
  379.  
  380.      M is the machine mode of the *memory location being addressed*,
  381.      not the machine mode of the address itself.  That mode is always
  382.      the same on a given target machine (it is `Pmode', which normally
  383.      is `SImode'), so there is no point in mentioning it; thus, no
  384.      machine mode is written in the `address' expression.  If some day
  385.      support is added for machines in which addresses of different
  386.      kinds of objects appear differently or are used differently (such
  387.      as the PDP-10), different formats would perhaps need different
  388.      machine modes and these modes might be written in the `address'
  389.      expression.
  390.  
  391. 
  392. File: gcc.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
  393.  
  394. Output Templates and Operand Substitution
  395. =========================================
  396.  
  397.    The "output template" is a string which specifies how to output the
  398. assembler code for an instruction pattern.  Most of the template is a
  399. fixed string which is output literally.  The character `%' is used to
  400. specify where to substitute an operand; it can also be used to identify
  401. places where different variants of the assembler require different
  402. syntax.
  403.  
  404.    In the simplest case, a `%' followed by a digit N says to output
  405. operand N at that point in the string.
  406.  
  407.    `%' followed by a letter and a digit says to output an operand in an
  408. alternate fashion.  Four letters have standard, built-in meanings
  409. described below.  The machine description macro `PRINT_OPERAND' can
  410. define additional letters with nonstandard meanings.
  411.  
  412.    `%cDIGIT' can be used to substitute an operand that is a constant
  413. value without the syntax that normally indicates an immediate operand.
  414.  
  415.    `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
  416. negated before printing.
  417.  
  418.    `%aDIGIT' can be used to substitute an operand as if it were a
  419. memory reference, with the actual operand treated as the address.  This
  420. may be useful when outputting a "load address" instruction, because
  421. often the assembler syntax for such an instruction requires you to
  422. write the operand as if it were a memory reference.
  423.  
  424.    `%lDIGIT' is used to substitute a `label_ref' into a jump
  425. instruction.
  426.  
  427.    `%' followed by a punctuation character specifies a substitution that
  428. does not use an operand.  Only one case is standard: `%%' outputs a `%'
  429. into the assembler code.  Other nonstandard cases can be defined in the
  430. `PRINT_OPERAND' macro.  You must also define which punctuation
  431. characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
  432.  
  433.    The template may generate multiple assembler instructions.  Write
  434. the text for the instructions, with `\;' between them.
  435.  
  436.    When the RTL contains two operands which are required by constraint
  437. to match each other, the output template must refer only to the
  438. lower-numbered operand. Matching operands are not always identical, and
  439. the rest of the compiler arranges to put the proper RTL expression for
  440. printing into the lower-numbered operand.
  441.  
  442.    One use of nonstandard letters or punctuation following `%' is to
  443. distinguish between different assembler languages for the same machine;
  444. for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
  445. syntax requires periods in most opcode names, while MIT syntax does
  446. not.  For example, the opcode `movel' in MIT syntax is `move.l' in
  447. Motorola syntax.  The same file of patterns is used for both kinds of
  448. output syntax, but the character sequence `%.' is used in each place
  449. where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
  450. Motorola syntax defines the sequence to output a period; the macro for
  451. MIT syntax defines it to do nothing.
  452.  
  453. 
  454. File: gcc.info,  Node: Output Statement,  Next: Constraints,  Prev: Output Template,  Up: Machine Desc
  455.  
  456. C Statements for Generating Assembler Output
  457. ============================================
  458.  
  459.    Often a single fixed template string cannot produce correct and
  460. efficient assembler code for all the cases that are recognized by a
  461. single instruction pattern.  For example, the opcodes may depend on the
  462. kinds of operands; or some unfortunate combinations of operands may
  463. require extra machine instructions.
  464.  
  465.    If the output control string starts with a `*', then it is not an
  466. output template but rather a piece of C program that should compute a
  467. template.  It should execute a `return' statement to return the
  468. template-string you want.  Most such templates use C string literals,
  469. which require doublequote characters to delimit them.  To include these
  470. doublequote characters in the string, prefix each one with `\'.
  471.  
  472.    The operands may be found in the array `operands', whose C data type
  473. is `rtx []'.
  474.  
  475.    It is possible to output an assembler instruction and then go on to
  476. output or compute more of them, using the subroutine `output_asm_insn'.
  477.  This receives two arguments: a template-string and a vector of
  478. operands.  The vector may be `operands', or it may be another array of
  479. `rtx' that you declare locally and initialize yourself.
  480.  
  481.    When an insn pattern has multiple alternatives in its constraints,
  482. often the appearance of the assembler code is determined mostly by
  483. which alternative was matched.  When this is so, the C code can test
  484. the variable `which_alternative', which is the ordinal number of the
  485. alternative that was actually satisfied (0 for the first, 1 for the
  486. second alternative, etc.).
  487.  
  488.    For example, suppose there are two opcodes for storing zero, `clrreg'
  489. for registers and `clrmem' for memory locations.  Here is how a pattern
  490. could use `which_alternative' to choose between them:
  491.  
  492.      (define_insn ""
  493.        [(set (match_operand:SI 0 "general_operand" "=r,m")
  494.              (const_int 0))]
  495.        ""
  496.        "*
  497.        return (which_alternative == 0
  498.                ? \"clrreg %0\" : \"clrmem %0\");
  499.        ")
  500.  
  501. 
  502. File: gcc.info,  Node: Constraints,  Next: Standard Names,  Prev: Output Statement,  Up: Machine Desc
  503.  
  504. Operand Constraints
  505. ===================
  506.  
  507.    Each `match_operand' in an instruction pattern can specify a
  508. constraint for the type of operands allowed.  Constraints can say
  509. whether an operand may be in a register, and which kinds of register;
  510. whether the operand can be a memory reference, and which kinds of
  511. address; whether the operand may be an immediate constant, and which
  512. possible values it may have.  Constraints can also require two operands
  513. to match.
  514.  
  515. * Menu:
  516.  
  517. * Simple Constraints::  Basic use of constraints.
  518. * Multi-Alternative::   When an insn has two alternative constraint-patterns.
  519. * Class Preferences::   Constraints guide which hard register to put things in.
  520. * Modifiers::           More precise control over effects of constraints.
  521. * No Constraints::      Describing a clean machine without constraints.
  522.  
  523. 
  524. File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Prev: Constraints,  Up: Constraints
  525.  
  526. Simple Constraints
  527. ------------------
  528.  
  529.    The simplest kind of constraint is a string full of letters, each of
  530. which describes one kind of operand that is permitted.  Here are the
  531. letters that are allowed:
  532.  
  533. `m'
  534.      A memory operand is allowed, with any kind of address that the
  535.      machine supports in general.
  536.  
  537. `o'
  538.      A memory operand is allowed, but only if the address is
  539.      "offsettable".  This means that adding a small integer (actually,
  540.      the width in bytes of the operand, as determined by its machine
  541.      mode) may be added to the address and the result is also a valid
  542.      memory address.
  543.  
  544.      For example, an address which is constant is offsettable; so is an
  545.      address that is the sum of a register and a constant (as long as a
  546.      slightly larger constant is also within the range of
  547.      address-offsets supported by the machine); but an autoincrement or
  548.      autodecrement address is not offsettable.  More complicated
  549.      indirect/indexed addresses may or may not be offsettable depending
  550.      on the other addressing modes that the machine supports.
  551.  
  552.      Note that in an output operand which can be matched by another
  553.      operand, the constraint letter `o' is valid only when accompanied
  554.      by both `<' (if the target machine has predecrement addressing)
  555.      and `>' (if the target machine has preincrement addressing).
  556.  
  557.      When the constraint letter `o' is used, the reload pass may
  558.      generate instructions which copy a nonoffsettable address into an
  559.      index register.  The idea is that the register can be used as a
  560.      replacement offsettable address.  But this method requires that
  561.      there be patterns to copy any kind of address into a register. 
  562.      Auto-increment and auto-decrement addresses are an exception;
  563.      there need not be an instruction that can copy such an address
  564.      into a register, because reload handles these cases specially.
  565.  
  566.      Most older machine designs have "load address" instructions which
  567.      do just what is needed here.  Some RISC machines do not advertise
  568.      such instructions, but the possible addresses on these machines
  569.      are very limited, so it is easy to fake them.
  570.  
  571. `<'
  572.      A memory operand with autodecrement addressing (either
  573.      predecrement or postdecrement) is allowed.
  574.  
  575. `>'
  576.      A memory operand with autoincrement addressing (either
  577.      preincrement or postincrement) is allowed.
  578.  
  579. `r'
  580.      A register operand is allowed provided that it is in a general
  581.      register.
  582.  
  583. `d', `a', `f', ...
  584.      Other letters can be defined in machine-dependent fashion to stand
  585.      for particular classes of registers.  `d', `a' and `f' are defined
  586.      on the 68000/68020 to stand for data, address and floating point
  587.      registers.
  588.  
  589. `i'
  590.      An immediate integer operand (one with constant value) is allowed.
  591.      This includes symbolic constants whose values will be known only at
  592.      assembly time.
  593.  
  594. `n'
  595.      An immediate integer operand with a known numeric value is allowed.
  596.      Many systems cannot support assembly-time constants for operands
  597.      less than a word wide.  Constraints for these operands should use
  598.      `n' rather than `i'.
  599.  
  600. `I', `J', `K', ...
  601.      Other letters in the range `I' through `M' may be defined in a
  602.      machine-dependent fashion to permit immediate integer operands with
  603.      explicit integer values in specified ranges.  For example, on the
  604.      68000, `I' is defined to stand for the range of values 1 to 8.
  605.      This is the range permitted as a shift count in the shift
  606.      instructions.
  607.  
  608. `F'
  609.      An immediate floating operand (expression code `const_double') is
  610.      allowed.
  611.  
  612. `G', `H'
  613.      `G' and `H' may be defined in a machine-dependent fashion to
  614.      permit immediate floating operands in particular ranges of values.
  615.  
  616. `s'
  617.      An immediate integer operand whose value is not an explicit
  618.      integer is allowed.
  619.  
  620.      This might appear strange; if an insn allows a constant operand
  621.      with a value not known at compile time, it certainly must allow
  622.      any known value.  So why use `s' instead of `i'?  Sometimes it
  623.      allows better code to be generated.
  624.  
  625.      For example, on the 68000 in a fullword instruction it is possible
  626.      to use an immediate operand; but if the immediate value is between
  627.      -128 and 127, better code results from loading the value into a
  628.      register and using the register.  This is because the load into
  629.      the register can be done with a `moveq' instruction.  We arrange
  630.      for this to happen by defining the letter `K' to mean "any integer
  631.      outside the range -128 to 127", and then specifying `Ks' in the
  632.      operand constraints.
  633.  
  634. `g'
  635.      Any register, memory or immediate integer operand is allowed,
  636.      except for registers that are not general registers.
  637.  
  638. `N' (a digit)
  639.      An operand that matches operand number N is allowed. If a digit is
  640.      used together with letters, the digit should come last.
  641.  
  642.      This is called a "matching constraint" and what it really means is
  643.      that the assembler has only a single operand that fills two roles
  644.      considered separate in the RTL insn.  For example, an add insn has
  645.      two input operands and one output operand in the RTL, but on most
  646.      machines an add instruction really has only two operands, one of
  647.      them an input-output operand.
  648.  
  649.      Matching constraints work only in circumstances like that add insn.
  650.      More precisely, the matching constraint must appear in an
  651.      input-only operand and the operand that it matches must be an
  652.      output-only operand with a lower number.  Thus, operand N must
  653.      have `=' in its constraint.
  654.  
  655.      For operands to match in a particular case usually means that they
  656.      are identical-looking RTL expressions.  But in a few special cases
  657.      specific kinds of dissimilarity are allowed.  For example, `*x' as
  658.      an input operand will match `*x++' as an output operand. For
  659.      proper results in such cases, the output template should always
  660.      use the output-operand's number when printing the operand.
  661.  
  662. `p'
  663.      An operand that is a valid memory address is allowed.  This is for
  664.      "load address" and "push address" instructions.
  665.  
  666.      `p' in the constraint must be accompanies by `address_operand' as
  667.      the predicate in the `match_operand'.
  668.  
  669.    In order to have valid assembler code, each operand must satisfy its
  670. constraint.  But a failure to do so does not prevent the pattern from
  671. applying to an insn.  Instead, it directs the compiler to modify the
  672. code so that the constraint will be satisfied.  Usually this is done by
  673. copying an operand into a register.
  674.  
  675.    Contrast, therefore, the two instruction patterns that follow:
  676.  
  677.      (define_insn ""
  678.        [(set (match_operand:SI 0 "general_operand" "=r")
  679.              (plus:SI (match_dup 0)
  680.                       (match_operand:SI 1 "general_operand" "r")))]
  681.        ""
  682.        "...")
  683.  
  684. which has two operands, one of which must appear in two places, and
  685.  
  686.      (define_insn ""
  687.        [(set (match_operand:SI 0 "general_operand" "=r")
  688.              (plus:SI (match_operand:SI 1 "general_operand" "0")
  689.                       (match_operand:SI 2 "general_operand" "r")))]
  690.        ""
  691.        "...")
  692.  
  693. which has three operands, two of which are required by a constraint to
  694. be identical.  If we are considering an insn of the form
  695.  
  696.      (insn N PREV NEXT
  697.        (set (reg:SI 3)
  698.             (plus:SI (reg:SI 6) (reg:SI 109)))
  699.        ...)
  700.  
  701. the first pattern would not apply at all, because this insn does not
  702. contain two identical subexpressions in the right place.  The pattern
  703. would say, "That does not look like an add instruction; try other
  704. patterns." The second pattern would say, "Yes, that's an add
  705. instruction, but there is something wrong with it."  It would direct
  706. the reload pass of the compiler to generate additional insns to make
  707. the constraint true.  The results might look like this:
  708.  
  709.      (insn N2 PREV N
  710.        (set (reg:SI 3) (reg:SI 6))
  711.        ...)
  712.      
  713.      (insn N N2 NEXT
  714.        (set (reg:SI 3)
  715.             (plus:SI (reg:SI 3) (reg:SI 109)))
  716.        ...)
  717.  
  718.    It is up to you to make sure that each operand, in each pattern, has
  719. constraints that can handle any RTL expression that could be present for
  720. that operand.  (When multiple alternatives are in use, each pattern
  721. must, for each possible combination of operand expressions, have at
  722. least one alternative which can handle that combination of operands.) 
  723. The constraints don't need to *allow* any possible operand--when this is
  724. the case, they do not constrain--but they must at least point the way to
  725. reloading any possible operand so that it will fit.
  726.  
  727.    * If the constraint accepts whatever operands the predicate permits,
  728.      there is no problem: reloading is never necessary for this operand.
  729.  
  730.      For example, an operand whose constraints permit everything except
  731.      registers is safe provided its predicate rejects registers.
  732.  
  733.      An operand whose predicate accepts only constant values is safe
  734.      provided its constraints include the letter `i'.  If any possible
  735.      constant value is accepted, then nothing less than `i' will do; if
  736.      the predicate is more selective, then the constraints may also be
  737.      more selective.
  738.  
  739.    * Any operand expression can be reloaded by copying it into a
  740.      register. So if an operand's constraints allow some kind of
  741.      register, it is certain to be safe.  It need not permit all
  742.      classes of registers; the compiler knows how to copy a register
  743.      into another register of the proper class in order to make an
  744.      instruction valid.
  745.  
  746.    * A nonoffsettable memory reference can be reloaded by copying the
  747.      address into a register.  So if the constraint uses the letter
  748.      `o', all memory references are taken care of.
  749.  
  750.    * A constant operand can be reloaded by allocating space in memory to
  751.      hold it as preinitialized data.  Then the memory reference can be
  752.      used in place of the constant.  So if the constraint uses the
  753.      letters `o' or `m', constant operands are not a problem.
  754.  
  755.    If the operand's predicate can recognize registers, but the
  756. constraint does not permit them, it can make the compiler crash.  When
  757. this operand happens to be a register, the reload pass will be stymied,
  758. because it does not know how to copy a register temporarily into memory.
  759.  
  760. 
  761. File: gcc.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
  762.  
  763. Multiple Alternative Constraints
  764. --------------------------------
  765.  
  766.    Sometimes a single instruction has multiple alternative sets of
  767. possible operands.  For example, on the 68000, a logical-or instruction
  768. can combine register or an immediate value into memory, or it can
  769. combine any kind of operand into a register; but it cannot combine one
  770. memory location into another.
  771.  
  772.    These constraints are represented as multiple alternatives.  An
  773. alternative can be described by a series of letters for each operand. 
  774. The overall constraint for an operand is made from the letters for this
  775. operand from the first alternative, a comma, the letters for this
  776. operand from the second alternative, a comma, and so on until the last
  777. alternative. Here is how it is done for fullword logical-or on the
  778. 68000:
  779.  
  780.      (define_insn "iorsi3"
  781.        [(set (match_operand:SI 0 "general_operand" "=m,d")
  782.              (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
  783.                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  784.        ...)
  785.  
  786.    The first alternative has `m' (memory) for operand 0, `0' for
  787. operand 1 (meaning it must match operand 0), and `dKs' for operand 2. 
  788. The second alternative has `d' (data register) for operand 0, `0' for
  789. operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
  790. constraints apply to all the alternatives; their meaning is explained
  791. in the next section.
  792.  
  793.    If all the operands fit any one alternative, the instruction is
  794. valid. Otherwise, for each alternative, the compiler counts how many
  795. instructions must be added to copy the operands so that that
  796. alternative applies. The alternative requiring the least copying is
  797. chosen.  If two alternatives need the same amount of copying, the one
  798. that comes first is chosen. These choices can be altered with the `?'
  799. and `!' characters:
  800.  
  801. `?'
  802.      Disparage slightly the alternative that the `?' appears in, as a
  803.      choice when no alternative applies exactly.  The compiler regards
  804.      this alternative as one unit more costly for each `?' that appears
  805.      in it.
  806.  
  807. `!'
  808.      Disparage severely the alternative that the `!' appears in. When
  809.      operands must be copied into registers, the compiler will never
  810.      choose this alternative as the one to strive for.
  811.  
  812.    When an insn pattern has multiple alternatives in its constraints,
  813. often the appearance of the assembler code is determined mostly by which
  814. alternative was matched.  When this is so, the C code for writing the
  815. assembler code can use the variable `which_alternative', which is the
  816. ordinal number of the alternative that was actually satisfied (0 for
  817. the first, 1 for the second alternative, etc.).  For example:
  818.  
  819.      (define_insn ""
  820.        [(set (match_operand:SI 0 "general_operand" "=r,m")
  821.              (const_int 0))]
  822.        ""
  823.        "*
  824.        return (which_alternative == 0
  825.                ? \"clrreg %0\" : \"clrmem %0\");
  826.        ")
  827.  
  828. 
  829. File: gcc.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
  830.  
  831. Register Class Preferences
  832. --------------------------
  833.  
  834.    The operand constraints have another function: they enable the
  835. compiler to decide which kind of hardware register a pseudo register is
  836. best allocated to.  The compiler examines the constraints that apply to
  837. the insns that use the pseudo register, looking for the
  838. machine-dependent letters such as `d' and `a' that specify classes of
  839. registers. The pseudo register is put in whichever class gets the most
  840. "votes". The constraint letters `g' and `r' also vote: they vote in
  841. favor of a general register.  The machine description says which
  842. registers are considered general.
  843.  
  844.    Of course, on some machines all registers are equivalent, and no
  845. register classes are defined.  Then none of this complexity is relevant.
  846.  
  847. 
  848. File: gcc.info,  Node: Modifiers,  Next: No Constraints,  Prev: Class Preferences,  Up: Constraints
  849.  
  850. Constraint Modifier Characters
  851. ------------------------------
  852.  
  853. `='
  854.      Means that this operand is write-only for this instruction: the
  855.      previous value is discarded and replaced by output data.
  856.  
  857. `+'
  858.      Means that this operand is both read and written by the
  859.      instruction.
  860.  
  861.      When the compiler fixes up the operands to satisfy the constraints,
  862.      it needs to know which operands are inputs to the instruction and
  863.      which are outputs from it.  `=' identifies an output; `+'
  864.      identifies an operand that is both input and output; all other
  865.      operands are assumed to be input only.
  866.  
  867. `&'
  868.      Means (in a particular alternative) that this operand is written
  869.      before the instruction is finished using the input operands.
  870.      Therefore, this operand may not lie in a register that is used as
  871.      an input operand or as part of any memory address.
  872.  
  873.      `&' applies only to the alternative in which it is written.  In
  874.      constraints with multiple alternatives, sometimes one alternative
  875.      requires `&' while others do not.  See, for example, the `movdf'
  876.      insn of the 68000.
  877.  
  878.      `&' does not obviate the need to write `='.
  879.  
  880. `%'
  881.      Declares the instruction to be commutative for this operand and the
  882.      following operand.  This means that the compiler may interchange
  883.      the two operands if that is the cheapest way to make all operands
  884.      fit the constraints.  This is often used in patterns for addition
  885.      instructions that really have only two operands: the result must
  886.      go in one of the arguments.  Here for example, is how the 68000
  887.      halfword-add instruction is defined:
  888.  
  889.           (define_insn "addhi3"
  890.             [(set (match_operand:HI 0 "general_operand" "=m,r")
  891.                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
  892.                         (match_operand:HI 2 "general_operand" "di,g")))]
  893.             ...)
  894.  
  895.      Note that in previous versions of GNU CC the `%' constraint
  896.      modifier always applied to operands 1 and 2 regardless of which
  897.      operand it was written in.  The usual custom was to write it in
  898.      operand 0.  Now it must be in operand 1 if the operands to be
  899.      exchanged are 1 and 2.
  900.  
  901. `#'
  902.      Says that all following characters, up to the next comma, are to be
  903.      ignored as a constraint.  They are significant only for choosing
  904.      register preferences.
  905.  
  906. `*'
  907.      Says that the following character should be ignored when choosing
  908.      register preferences.  `*' has no effect on the meaning of the
  909.      constraint as a constraint.
  910.  
  911.      Here is an example: the 68000 has an instruction to sign-extend a
  912.      halfword in a data register, and can also sign-extend a value by
  913.      copying it into an address register.  While either kind of
  914.      register is acceptable, the constraints on an address-register
  915.      destination are less strict, so it is best if register allocation
  916.      makes an address register its goal.  Therefore, `*' is used so
  917.      that the `d' constraint letter (for data register) is ignored when
  918.      computing register preferences.
  919.  
  920.           (define_insn "extendhisi2"
  921.             [(set (match_operand:SI 0 "general_operand" "=*d,a")
  922.                   (sign_extend:SI
  923.                    (match_operand:HI 1 "general_operand" "0,g")))]
  924.             ...)
  925.  
  926. 
  927. File: gcc.info,  Node: No Constraints,  Prev: Modifiers,  Up: Constraints
  928.  
  929. Not Using Constraints
  930. ---------------------
  931.  
  932.    Some machines are so clean that operand constraints are not
  933. required.  For example, on the Vax, an operand valid in one context is
  934. valid in any other context.  On such a machine, every operand
  935. constraint would be `g', excepting only operands of "load address"
  936. instructions which are written as if they referred to a memory
  937. location's contents but actual refer to its address.  They would have
  938. constraint `p'.
  939.  
  940.    For such machines, instead of writing `g' and `p' for all the
  941. constraints, you can choose to write a description with empty
  942. constraints. Then you write `""' for the constraint in every
  943. `match_operand'. Address operands are identified by writing an
  944. `address' expression around the `match_operand', not by their
  945. constraints.
  946.  
  947.    When the machine description has just empty constraints, certain
  948. parts of compilation are skipped, making the compiler faster.  However,
  949. few machines actually do not need constraints; all machine descriptions
  950. now in existence use constraints.
  951.  
  952.