Annotation of GNUtools/cc/gcc.info-13, revision 1.1.1.1

1.1       root        1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
                      2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
                      9:    Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
                     10: 
                     11:    Permission is granted to make and distribute verbatim copies of this
                     12: manual provided the copyright notice and this permission notice are
                     13: preserved on all copies.
                     14: 
                     15:    Permission is granted to copy and distribute modified versions of
                     16: this manual under the conditions for verbatim copying, provided also
                     17: that the sections entitled "GNU General Public License" and "Protect
                     18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
                     19: original, and provided that the entire resulting derived work is
                     20: distributed under the terms of a permission notice identical to this
                     21: one.
                     22: 
                     23:    Permission is granted to copy and distribute translations of this
                     24: manual into another language, under the above conditions for modified
                     25: versions, except that the sections entitled "GNU General Public
                     26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
                     27: permission notice, may be included in translations approved by the Free
                     28: Software Foundation instead of in the original English.
                     29: 
                     30: 
                     31: File: gcc.info,  Node: Insns,  Next: Calls,  Prev: Assembler,  Up: RTL
                     32: 
                     33: Insns
                     34: =====
                     35: 
                     36:    The RTL representation of the code for a function is a doubly-linked
                     37: chain of objects called "insns".  Insns are expressions with special
                     38: codes that are used for no other purpose.  Some insns are actual
                     39: instructions; others represent dispatch tables for `switch' statements;
                     40: others represent labels to jump to or various sorts of declarative
                     41: information.
                     42: 
                     43:    In addition to its own specific data, each insn must have a unique
                     44: id-number that distinguishes it from all other insns in the current
                     45: function (after delayed branch scheduling, copies of an insn with the
                     46: same id-number may be present in multiple places in a function, but
                     47: these copies will always be identical and will only appear inside a
                     48: `sequence'), and chain pointers to the preceding and following insns.
                     49: These three fields occupy the same position in every insn, independent
                     50: of the expression code of the insn.  They could be accessed with `XEXP'
                     51: and `XINT', but instead three special macros are always used:
                     52: 
                     53: `INSN_UID (I)'
                     54:      Accesses the unique id of insn I.
                     55: 
                     56: `PREV_INSN (I)'
                     57:      Accesses the chain pointer to the insn preceding I.  If I is the
                     58:      first insn, this is a null pointer.
                     59: 
                     60: `NEXT_INSN (I)'
                     61:      Accesses the chain pointer to the insn following I.  If I is the
                     62:      last insn, this is a null pointer.
                     63: 
                     64:    The first insn in the chain is obtained by calling `get_insns'; the
                     65: last insn is the result of calling `get_last_insn'.  Within the chain
                     66: delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
                     67: always correspond: if INSN is not the first insn,
                     68: 
                     69:      NEXT_INSN (PREV_INSN (INSN)) == INSN
                     70: 
                     71: is always true and if INSN is not the last insn,
                     72: 
                     73:      PREV_INSN (NEXT_INSN (INSN)) == INSN
                     74: 
                     75: is always true.
                     76: 
                     77:    After delay slot scheduling, some of the insns in the chain might be
                     78: `sequence' expressions, which contain a vector of insns.  The value of
                     79: `NEXT_INSN' in all but the last of these insns is the next insn in the
                     80: vector; the value of `NEXT_INSN' of the last insn in the vector is the
                     81: same as the value of `NEXT_INSN' for the `sequence' in which it is
                     82: contained.  Similar rules apply for `PREV_INSN'.
                     83: 
                     84:    This means that the above invariants are not necessarily true for
                     85: insns inside `sequence' expressions.  Specifically, if INSN is the
                     86: first insn in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn
                     87: containing the `sequence' expression, as is the value of `PREV_INSN
                     88: (NEXT_INSN (INSN))' is INSN is the last insn in the `sequence'
                     89: expression.  You can use these expressions to find the containing
                     90: `sequence' expression.
                     91: 
                     92:    Every insn has one of the following six expression codes:
                     93: 
                     94: `insn'
                     95:      The expression code `insn' is used for instructions that do not
                     96:      jump and do not do function calls.  `sequence' expressions are
                     97:      always contained in insns with code `insn' even if one of those
                     98:      insns should jump or do function calls.
                     99: 
                    100:      Insns with code `insn' have four additional fields beyond the three
                    101:      mandatory ones listed above.  These four are described in a table
                    102:      below.
                    103: 
                    104: `jump_insn'
                    105:      The expression code `jump_insn' is used for instructions that may
                    106:      jump (or, more generally, may contain `label_ref' expressions).  If
                    107:      there is an instruction to return from the current function, it is
                    108:      recorded as a `jump_insn'.
                    109: 
                    110:      `jump_insn' insns have the same extra fields as `insn' insns,
                    111:      accessed in the same way and in addition contains a field
                    112:      `JUMP_LABEL' which is defined once jump optimization has completed.
                    113: 
                    114:      For simple conditional and unconditional jumps, this field
                    115:      contains the `code_label' to which this insn will (possibly
                    116:      conditionally) branch.  In a more complex jump, `JUMP_LABEL'
                    117:      records one of the labels that the insn refers to; the only way to
                    118:      find the others is to scan the entire body of the insn.
                    119: 
                    120:      Return insns count as jumps, but since they do not refer to any
                    121:      labels, they have zero in the `JUMP_LABEL' field.
                    122: 
                    123: `call_insn'
                    124:      The expression code `call_insn' is used for instructions that may
                    125:      do function calls.  It is important to distinguish these
                    126:      instructions because they imply that certain registers and memory
                    127:      locations may be altered unpredictably.
                    128: 
                    129:      A `call_insn' insn may be preceded by insns that contain a single
                    130:      `use' expression and be followed by insns the contain a single
                    131:      `clobber' expression.  If so, these `use' and `clobber'
                    132:      expressions are treated as being part of the function call.  There
                    133:      must not even be a `note' between the `call_insn' and the `use' or
                    134:      `clobber' insns for this special treatment to take place.  This is
                    135:      somewhat of a kludge and will be removed in a later version of GNU
                    136:      CC.
                    137: 
                    138:      `call_insn' insns have the same extra fields as `insn' insns,
                    139:      accessed in the same way.
                    140: 
                    141: `code_label'
                    142:      A `code_label' insn represents a label that a jump insn can jump
                    143:      to.  It contains two special fields of data in addition to the
                    144:      three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
                    145:      "label number", a number that identifies this label uniquely among
                    146:      all the labels in the compilation (not just in the current
                    147:      function).  Ultimately, the label is represented in the assembler
                    148:      output as an assembler label, usually of the form `LN' where N is
                    149:      the label number.
                    150: 
                    151:      When a `code_label' appears in an RTL expression, it normally
                    152:      appears within a `label_ref' which represents the address of the
                    153:      label, as a number.
                    154: 
                    155:      The field `LABEL_NUSES' is only defined once the jump optimization
                    156:      phase is completed and contains the number of times this label is
                    157:      referenced in the current function.
                    158: 
                    159: `barrier'
                    160:      Barriers are placed in the instruction stream when control cannot
                    161:      flow past them.  They are placed after unconditional jump
                    162:      instructions to indicate that the jumps are unconditional and
                    163:      after calls to `volatile' functions, which do not return (e.g.,
                    164:      `exit').  They contain no information beyond the three standard
                    165:      fields.
                    166: 
                    167: `note'
                    168:      `note' insns are used to represent additional debugging and
                    169:      declarative information.  They contain two nonstandard fields, an
                    170:      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
                    171:      string accessed with `NOTE_SOURCE_FILE'.
                    172: 
                    173:      If `NOTE_LINE_NUMBER' is positive, the note represents the
                    174:      position of a source line and `NOTE_SOURCE_FILE' is the source
                    175:      file name that the line came from.  These notes control generation
                    176:      of line number data in the assembler output.
                    177: 
                    178:      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
                    179:      code with one of the following values (and `NOTE_SOURCE_FILE' must
                    180:      contain a null pointer):
                    181: 
                    182:     `NOTE_INSN_DELETED'
                    183:           Such a note is completely ignorable.  Some passes of the
                    184:           compiler delete insns by altering them into notes of this
                    185:           kind.
                    186: 
                    187:     `NOTE_INSN_BLOCK_BEG'
                    188:     `NOTE_INSN_BLOCK_END'
                    189:           These types of notes indicate the position of the beginning
                    190:           and end of a level of scoping of variable names.  They
                    191:           control the output of debugging information.
                    192: 
                    193:     `NOTE_INSN_LOOP_BEG'
                    194:     `NOTE_INSN_LOOP_END'
                    195:           These types of notes indicate the position of the beginning
                    196:           and end of a `while' or `for' loop.  They enable the loop
                    197:           optimizer to find loops quickly.
                    198: 
                    199:     `NOTE_INSN_LOOP_CONT'
                    200:           Appears at the place in a loop that `continue' statements
                    201:           jump to.
                    202: 
                    203:     `NOTE_INSN_LOOP_VTOP'
                    204:           This note indicates the place in a loop where the exit test
                    205:           begins for those loops in which the exit test has been
                    206:           duplicated.  This position becomes another virtual start of
                    207:           the loop when considering loop invariants.
                    208: 
                    209:     `NOTE_INSN_FUNCTION_END'
                    210:           Appears near the end of the function body, just before the
                    211:           label that `return' statements jump to (on machine where a
                    212:           single instruction does not suffice for returning).  This
                    213:           note may be deleted by jump optimization.
                    214: 
                    215:     `NOTE_INSN_SETJMP'
                    216:           Appears following each call to `setjmp' or a related function.
                    217: 
                    218:      These codes are printed symbolically when they appear in debugging
                    219:      dumps.
                    220: 
                    221:    The machine mode of an insn is normally `VOIDmode', but some phases
                    222: use the mode for various purposes; for example, the reload pass sets it
                    223: to `HImode' if the insn needs reloading but not register elimination
                    224: and `QImode' if both are required.  The common subexpression
                    225: elimination pass sets the mode of an insn to `QImode' when it is the
                    226: first insn in a block that has already been processed.
                    227: 
                    228:    Here is a table of the extra fields of `insn', `jump_insn' and
                    229: `call_insn' insns:
                    230: 
                    231: `PATTERN (I)'
                    232:      An expression for the side effect performed by this insn.  This
                    233:      must be one of the following codes: `set', `call', `use',
                    234:      `clobber', `return', `asm_input', `asm_output', `addr_vec',
                    235:      `addr_diff_vec', `trap_if', `unspec', `unspec_volatile',
                    236:      `parallel', or `sequence'.  If it is a `parallel', each element of
                    237:      the `parallel' must be one these codes, except that `parallel'
                    238:      expressions cannot be nested and `addr_vec' and `addr_diff_vec'
                    239:      are not permitted inside a `parallel' expression.
                    240: 
                    241: `INSN_CODE (I)'
                    242:      An integer that says which pattern in the machine description
                    243:      matches this insn, or -1 if the matching has not yet been
                    244:      attempted.
                    245: 
                    246:      Such matching is never attempted and this field remains -1 on an
                    247:      insn whose pattern consists of a single `use', `clobber',
                    248:      `asm_input', `addr_vec' or `addr_diff_vec' expression.
                    249: 
                    250:      Matching is also never attempted on insns that result from an `asm'
                    251:      statement.  These contain at least one `asm_operands' expression.
                    252:      The function `asm_noperands' returns a non-negative value for such
                    253:      insns.
                    254: 
                    255:      In the debugging output, this field is printed as a number
                    256:      followed by a symbolic representation that locates the pattern in
                    257:      the `md' file as some small positive or negative offset from a
                    258:      named pattern.
                    259: 
                    260: `LOG_LINKS (I)'
                    261:      A list (chain of `insn_list' expressions) giving information about
                    262:      dependencies between instructions within a basic block.  Neither a
                    263:      jump nor a label may come between the related insns.
                    264: 
                    265: `REG_NOTES (I)'
                    266:      A list (chain of `expr_list' and `insn_list' expressions) giving
                    267:      miscellaneous information about the insn.  It is often information
                    268:      pertaining to the registers used in this insn.
                    269: 
                    270:    The `LOG_LINKS' field of an insn is a chain of `insn_list'
                    271: expressions.  Each of these has two operands: the first is an insn, and
                    272: the second is another `insn_list' expression (the next one in the
                    273: chain).  The last `insn_list' in the chain has a null pointer as second
                    274: operand.  The significant thing about the chain is which insns appear
                    275: in it (as first operands of `insn_list' expressions).  Their order is
                    276: not significant.
                    277: 
                    278:    This list is originally set up by the flow analysis pass; it is a
                    279: null pointer until then.  Flow only adds links for those data
                    280: dependencies which can be used for instruction combination.  For each
                    281: insn, the flow analysis pass adds a link to insns which store into
                    282: registers values that are used for the first time in this insn.  The
                    283: instruction scheduling pass adds extra links so that every dependence
                    284: will be represented.  Links represent data dependencies,
                    285: antidependencies and output dependencies; the machine mode of the link
                    286: distinguishes these three types: antidependencies have mode
                    287: `REG_DEP_ANTI', output dependencies have mode `REG_DEP_OUTPUT', and
                    288: data dependencies have mode `VOIDmode'.
                    289: 
                    290:    The `REG_NOTES' field of an insn is a chain similar to the
                    291: `LOG_LINKS' field but it includes `expr_list' expressions in addition
                    292: to `insn_list' expressions.  There are several kinds of register notes,
                    293: which are distinguished by the machine mode, which in a register note
                    294: is really understood as being an `enum reg_note'.  The first operand OP
                    295: of the note is data whose meaning depends on the kind of note.
                    296: 
                    297:    The macro `REG_NOTE_KIND (X)' returns the kind of register note.
                    298: Its counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
                    299: register note type of X to be NEWKIND.
                    300: 
                    301:    Register notes are of three classes: They may say something about an
                    302: input to an insn, they may say something about an output of an insn, or
                    303: they may create a linkage between two insns.  There are also a set of
                    304: values that are only used in `LOG_LINKS'.
                    305: 
                    306:    These register notes annotate inputs to an insn:
                    307: 
                    308: `REG_DEAD'
                    309:      The value in OP dies in this insn; that is to say, altering the
                    310:      value immediately after this insn would not affect the future
                    311:      behavior of the program.
                    312: 
                    313:      This does not necessarily mean that the register OP has no useful
                    314:      value after this insn since it may also be an output of the insn.
                    315:      In such a case, however, a `REG_DEAD' note would be redundant and
                    316:      is usually not present until after the reload pass, but no code
                    317:      relies on this fact.
                    318: 
                    319: `REG_INC'
                    320:      The register OP is incremented (or decremented; at this level
                    321:      there is no distinction) by an embedded side effect inside this
                    322:      insn.  This means it appears in a `post_inc', `pre_inc',
                    323:      `post_dec' or `pre_dec' expression.
                    324: 
                    325: `REG_NONNEG'
                    326:      The register OP is known to have a nonnegative value when this
                    327:      insn is reached.  This is used so that decrement and branch until
                    328:      zero instructions, such as the m68k dbra, can be matched.
                    329: 
                    330:      The `REG_NONNEG' note is added to insns only if the machine
                    331:      description has a `decrement_and_branch_until_zero' pattern.
                    332: 
                    333: `REG_NO_CONFLICT'
                    334:      This insn does not cause a conflict between OP and the item being
                    335:      set by this insn even though it might appear that it does.  In
                    336:      other words, if the destination register and OP could otherwise be
                    337:      assigned the same register, this insn does not prevent that
                    338:      assignment.
                    339: 
                    340:      Insns with this note are usually part of a block that begins with a
                    341:      `clobber' insn specifying a multi-word pseudo register (which will
                    342:      be the output of the block), a group of insns that each set one
                    343:      word of the value and have the `REG_NO_CONFLICT' note attached,
                    344:      and a final insn that copies the output to itself with an attached
                    345:      `REG_EQUAL' note giving the expression being computed.  This block
                    346:      is encapsulated with `REG_LIBCALL' and `REG_RETVAL' notes on the
                    347:      first and last insns, respectively.
                    348: 
                    349: `REG_LABEL'
                    350:      This insn uses OP, a `code_label', but is not a `jump_insn'.  The
                    351:      presence of this note allows jump optimization to be aware that OP
                    352:      is, in fact, being used.
                    353: 
                    354:    The following notes describe attributes of outputs of an insn:
                    355: 
                    356: `REG_EQUIV'
                    357: `REG_EQUAL'
                    358:      This note is only valid on an insn that sets only one register and
                    359:      indicates that that register will be equal to OP at run time; the
                    360:      scope of this equivalence differs between the two types of notes.
                    361:      The value which the insn explicitly copies into the register may
                    362:      look different from OP, but they will be equal at run time.  If the
                    363:      output of the single `set' is a `strict_low_part' expression, the
                    364:      note refers to the register that is contained in `SUBREG_REG' of
                    365:      the `subreg' expression.
                    366: 
                    367:      For `REG_EQUIV', the register is equivalent to OP throughout the
                    368:      entire function, and could validly be replaced in all its
                    369:      occurrences by OP.  ("Validly" here refers to the data flow of the
                    370:      program; simple replacement may make some insns invalid.)  For
                    371:      example, when a constant is loaded into a register that is never
                    372:      assigned any other value, this kind of note is used.
                    373: 
                    374:      When a parameter is copied into a pseudo-register at entry to a
                    375:      function, a note of this kind records that the register is
                    376:      equivalent to the stack slot where the parameter was passed.
                    377:      Although in this case the register may be set by other insns, it
                    378:      is still valid to replace the register by the stack slot
                    379:      throughout the function.
                    380: 
                    381:      In the case of `REG_EQUAL', the register that is set by this insn
                    382:      will be equal to OP at run time at the end of this insn but not
                    383:      necessarily elsewhere in the function.  In this case, OP is
                    384:      typically an arithmetic expression.  For example, when a sequence
                    385:      of insns such as a library call is used to perform an arithmetic
                    386:      operation, this kind of note is attached to the insn that produces
                    387:      or copies the final value.
                    388: 
                    389:      These two notes are used in different ways by the compiler passes.
                    390:      `REG_EQUAL' is used by passes prior to register allocation (such as
                    391:      common subexpression elimination and loop optimization) to tell
                    392:      them how to think of that value.  `REG_EQUIV' notes are used by
                    393:      register allocation to indicate that there is an available
                    394:      substitute expression (either a constant or a `mem' expression for
                    395:      the location of a parameter on the stack) that may be used in
                    396:      place of a register if insufficient registers are available.
                    397: 
                    398:      Except for stack homes for parameters, which are indicated by a
                    399:      `REG_EQUIV' note and are not useful to the early optimization
                    400:      passes and pseudo registers that are equivalent to a memory
                    401:      location throughout there entire life, which is not detected until
                    402:      later in the compilation, all equivalences are initially indicated
                    403:      by an attached `REG_EQUAL' note.  In the early stages of register
                    404:      allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
                    405:      if OP is a constant and the insn represents the only set of its
                    406:      destination register.
                    407: 
                    408:      Thus, compiler passes prior to register allocation need only check
                    409:      for `REG_EQUAL' notes and passes subsequent to register allocation
                    410:      need only check for `REG_EQUIV' notes.
                    411: 
                    412: `REG_UNUSED'
                    413:      The register OP being set by this insn will not be used in a
                    414:      subsequent insn.  This differs from a `REG_DEAD' note, which
                    415:      indicates that the value in an input will not be used subsequently.
                    416:      These two notes are independent; both may be present for the same
                    417:      register.
                    418: 
                    419: `REG_WAS_0'
                    420:      The single output of this insn contained zero before this insn.
                    421:      OP is the insn that set it to zero.  You can rely on this note if
                    422:      it is present and OP has not been deleted or turned into a `note';
                    423:      its absence implies nothing.
                    424: 
                    425:    These notes describe linkages between insns.  They occur in pairs:
                    426: one insn has one of a pair of notes that points to a second insn, which
                    427: has the inverse note pointing back to the first insn.
                    428: 
                    429: `REG_RETVAL'
                    430:      This insn copies the value of a multi-insn sequence (for example, a
                    431:      library call), and OP is the first insn of the sequence (for a
                    432:      library call, the first insn that was generated to set up the
                    433:      arguments for the library call).
                    434: 
                    435:      Loop optimization uses this note to treat such a sequence as a
                    436:      single operation for code motion purposes and flow analysis uses
                    437:      this note to delete such sequences whose results are dead.
                    438: 
                    439:      A `REG_EQUAL' note will also usually be attached to this insn to
                    440:      provide the expression being computed by the sequence.
                    441: 
                    442: `REG_LIBCALL'
                    443:      This is the inverse of `REG_RETVAL': it is placed on the first
                    444:      insn of a multi-insn sequence, and it points to the last one.
                    445: 
                    446: `REG_CC_SETTER'
                    447: `REG_CC_USER'
                    448:      On machines that use `cc0', the insns which set and use `cc0' set
                    449:      and use `cc0' are adjacent.  However, when branch delay slot
                    450:      filling is done, this may no longer be true.  In this case a
                    451:      `REG_CC_USER' note will be placed on the insn setting `cc0' to
                    452:      point to the insn using `cc0' and a `REG_CC_SETTER' note will be
                    453:      placed on the insn using `cc0' to point to the insn setting `cc0'.
                    454: 
                    455:    These values are only used in the `LOG_LINKS' field, and indicate
                    456: the type of dependency that each link represents.  Links which indicate
                    457: a data dependence (a read after write dependence) do not use any code,
                    458: they simply have mode `VOIDmode', and are printed without any
                    459: descriptive text.
                    460: 
                    461: `REG_DEP_ANTI'
                    462:      This indicates an anti dependence (a write after read dependence).
                    463: 
                    464: `REG_DEP_OUTPUT'
                    465:      This indicates an output dependence (a write after write
                    466:      dependence).
                    467: 
                    468:    For convenience, the machine mode in an `insn_list' or `expr_list'
                    469: is printed using these symbolic codes in debugging dumps.
                    470: 
                    471:    The only difference between the expression codes `insn_list' and
                    472: `expr_list' is that the first operand of an `insn_list' is assumed to
                    473: be an insn and is printed in debugging dumps as the insn's unique id;
                    474: the first operand of an `expr_list' is printed in the ordinary way as
                    475: an expression.
                    476: 
                    477: 
                    478: File: gcc.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
                    479: 
                    480: RTL Representation of Function-Call Insns
                    481: =========================================
                    482: 
                    483:    Insns that call subroutines have the RTL expression code `call_insn'.
                    484: These insns must satisfy special rules, and their bodies must use a
                    485: special RTL expression code, `call'.
                    486: 
                    487:    A `call' expression has two operands, as follows:
                    488: 
                    489:      (call (mem:FM ADDR) NBYTES)
                    490: 
                    491: Here NBYTES is an operand that represents the number of bytes of
                    492: argument data being passed to the subroutine, FM is a machine mode
                    493: (which must equal as the definition of the `FUNCTION_MODE' macro in the
                    494: machine description) and ADDR represents the address of the subroutine.
                    495: 
                    496:    For a subroutine that returns no value, the `call' expression as
                    497: shown above is the entire body of the insn, except that the insn might
                    498: also contain `use' or `clobber' expressions.
                    499: 
                    500:    For a subroutine that returns a value whose mode is not `BLKmode',
                    501: the value is returned in a hard register.  If this register's number is
                    502: R, then the body of the call insn looks like this:
                    503: 
                    504:      (set (reg:M R)
                    505:           (call (mem:FM ADDR) NBYTES))
                    506: 
                    507: This RTL expression makes it clear (to the optimizer passes) that the
                    508: appropriate register receives a useful value in this insn.
                    509: 
                    510:    When a subroutine returns a `BLKmode' value, it is handled by
                    511: passing to the subroutine the address of a place to store the value.
                    512: So the call insn itself does not "return" any value, and it has the
                    513: same RTL form as a call that returns nothing.
                    514: 
                    515:    On some machines, the call instruction itself clobbers some register,
                    516: for example to contain the return address.  `call_insn' insns on these
                    517: machines should have a body which is a `parallel' that contains both
                    518: the `call' expression and `clobber' expressions that indicate which
                    519: registers are destroyed.  Similarly, if the call instruction requires
                    520: some register other than the stack pointer that is not explicitly
                    521: mentioned it its RTL, a `use' subexpression should mention that
                    522: register.
                    523: 
                    524:    Functions that are called are assumed to modify all registers listed
                    525: in the configuration macro `CALL_USED_REGISTERS' (*note Register
                    526: Basics::.) and, with the exception of `const' functions and library
                    527: calls, to modify all of memory.
                    528: 
                    529:    Insns containing just `use' expressions directly precede the
                    530: `call_insn' insn to indicate which registers contain inputs to the
                    531: function.  Similarly, if registers other than those in
                    532: `CALL_USED_REGISTERS' are clobbered by the called function, insns
                    533: containing a single `clobber' follow immediately after the call to
                    534: indicate which registers.
                    535: 
                    536: 
                    537: File: gcc.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
                    538: 
                    539: Structure Sharing Assumptions
                    540: =============================
                    541: 
                    542:    The compiler assumes that certain kinds of RTL expressions are
                    543: unique; there do not exist two distinct objects representing the same
                    544: value.  In other cases, it makes an opposite assumption: that no RTL
                    545: expression object of a certain kind appears in more than one place in
                    546: the containing structure.
                    547: 
                    548:    These assumptions refer to a single function; except for the RTL
                    549: objects that describe global variables and external functions, and a
                    550: few standard objects such as small integer constants, no RTL objects
                    551: are common to two functions.
                    552: 
                    553:    * Each pseudo-register has only a single `reg' object to represent
                    554:      it, and therefore only a single machine mode.
                    555: 
                    556:    * For any symbolic label, there is only one `symbol_ref' object
                    557:      referring to it.
                    558: 
                    559:    * There is only one `const_int' expression with value 0, only one
                    560:      with value 1, and only one with value -1.  Some other integer
                    561:      values are also stored uniquely.
                    562: 
                    563:    * There is only one `pc' expression.
                    564: 
                    565:    * There is only one `cc0' expression.
                    566: 
                    567:    * There is only one `const_double' expression with value 0 for each
                    568:      floating point mode.  Likewise for values 1 and 2.
                    569: 
                    570:    * No `label_ref' or `scratch' appears in more than one place in the
                    571:      RTL structure; in other words, it is safe to do a tree-walk of all
                    572:      the insns in the function and assume that each time a `label_ref'
                    573:      or `scratch' is seen it is distinct from all others that are seen.
                    574: 
                    575:    * Only one `mem' object is normally created for each static variable
                    576:      or stack slot, so these objects are frequently shared in all the
                    577:      places they appear.  However, separate but equal objects for these
                    578:      variables are occasionally made.
                    579: 
                    580:    * When a single `asm' statement has multiple output operands, a
                    581:      distinct `asm_operands' expression is made for each output operand.
                    582:      However, these all share the vector which contains the sequence of
                    583:      input operands.  This sharing is used later on to test whether two
                    584:      `asm_operands' expressions come from the same statement, so all
                    585:      optimizations must carefully preserve the sharing if they copy the
                    586:      vector at all.
                    587: 
                    588:    * No RTL object appears in more than one place in the RTL structure
                    589:      except as described above.  Many passes of the compiler rely on
                    590:      this by assuming that they can modify RTL objects in place without
                    591:      unwanted side-effects on other insns.
                    592: 
                    593:    * During initial RTL generation, shared structure is freely
                    594:      introduced.  After all the RTL for a function has been generated,
                    595:      all shared structure is copied by `unshare_all_rtl' in
                    596:      `emit-rtl.c', after which the above rules are guaranteed to be
                    597:      followed.
                    598: 
                    599:    * During the combiner pass, shared structure within an insn can exist
                    600:      temporarily.  However, the shared structure is copied before the
                    601:      combiner is finished with the insn.  This is done by calling
                    602:      `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
                    603: 
                    604: 
                    605: File: gcc.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
                    606: 
                    607: Reading RTL
                    608: ===========
                    609: 
                    610:    To read an RTL object from a file, call `read_rtx'.  It takes one
                    611: argument, a stdio stream, and returns a single RTL object.
                    612: 
                    613:    Reading RTL from a file is very slow.  This is no currently not a
                    614: problem because reading RTL occurs only as part of building the
                    615: compiler.
                    616: 
                    617:    People frequently have the idea of using RTL stored as text in a
                    618: file as an interface between a language front end and the bulk of GNU
                    619: CC.  This idea is not feasible.
                    620: 
                    621:    GNU CC was designed to use RTL internally only.  Correct RTL for a
                    622: given program is very dependent on the particular target machine.  And
                    623: the RTL does not contain all the information about the program.
                    624: 
                    625:    The proper way to interface GNU CC to a new language front end is
                    626: with the "tree" data structure.  There is no manual for this data
                    627: structure, but it is described in the files `tree.h' and `tree.def'.
                    628: 
                    629: 
                    630: File: gcc.info,  Node: Machine Desc,  Next: Target Macros,  Prev: RTL,  Up: Top
                    631: 
                    632: Machine Descriptions
                    633: ********************
                    634: 
                    635:    A machine description has two parts: a file of instruction patterns
                    636: (`.md' file) and a C header file of macro definitions.
                    637: 
                    638:    The `.md' file for a target machine contains a pattern for each
                    639: instruction that the target machine supports (or at least each
                    640: instruction that is worth telling the compiler about).  It may also
                    641: contain comments.  A semicolon causes the rest of the line to be a
                    642: comment, unless the semicolon is inside a quoted string.
                    643: 
                    644:    See the next chapter for information on the C header file.
                    645: 
                    646: * Menu:
                    647: 
                    648: * Patterns::            How to write instruction patterns.
                    649: * Example::             An explained example of a `define_insn' pattern.
                    650: * RTL Template::        The RTL template defines what insns match a pattern.
                    651: * Output Template::     The output template says how to make assembler code
                    652:                           from such an insn.
                    653: * Output Statement::    For more generality, write C code to output
                    654:                           the assembler code.
                    655: * Constraints::         When not all operands are general operands.
                    656: * Standard Names::      Names mark patterns to use for code generation.
                    657: * Pattern Ordering::    When the order of patterns makes a difference.
                    658: * Dependent Patterns::  Having one pattern may make you need another.
                    659: * Jump Patterns::       Special considerations for patterns for jump insns.
                    660: * Insn Canonicalizations::Canonicalization of Instructions
                    661: * Peephole Definitions::Defining machine-specific peephole optimizations.
                    662: * Expander Definitions::Generating a sequence of several RTL insns
                    663:                          for a standard operation.
                    664: * Insn Splitting::    Splitting Instructions into Multiple Instructions
                    665: * Insn Attributes::     Specifying the value of attributes for generated insns.
                    666: 
                    667: 
                    668: File: gcc.info,  Node: Patterns,  Next: Example,  Up: Machine Desc
                    669: 
                    670: Everything about Instruction Patterns
                    671: =====================================
                    672: 
                    673:    Each instruction pattern contains an incomplete RTL expression, with
                    674: pieces to be filled in later, operand constraints that restrict how the
                    675: pieces can be filled in, and an output pattern or C code to generate
                    676: the assembler output, all wrapped up in a `define_insn' expression.
                    677: 
                    678:    A `define_insn' is an RTL expression containing four or five
                    679: operands:
                    680: 
                    681:   1. An optional name.  The presence of a name indicate that this
                    682:      instruction pattern can perform a certain standard job for the
                    683:      RTL-generation pass of the compiler.  This pass knows certain
                    684:      names and will use the instruction patterns with those names, if
                    685:      the names are defined in the machine description.
                    686: 
                    687:      The absence of a name is indicated by writing an empty string
                    688:      where the name should go.  Nameless instruction patterns are never
                    689:      used for generating RTL code, but they may permit several simpler
                    690:      insns to be combined later on.
                    691: 
                    692:      Names that are not thus known and used in RTL-generation have no
                    693:      effect; they are equivalent to no name at all.
                    694: 
                    695:   2. The "RTL template" (*note RTL Template::.) is a vector of
                    696:      incomplete RTL expressions which show what the instruction should
                    697:      look like.  It is incomplete because it may contain
                    698:      `match_operand', `match_operator', and `match_dup' expressions
                    699:      that stand for operands of the instruction.
                    700: 
                    701:      If the vector has only one element, that element is the template
                    702:      for the instruction pattern.  If the vector has multiple elements,
                    703:      then the instruction pattern is a `parallel' expression containing
                    704:      the elements described.
                    705: 
                    706:   3. A condition.  This is a string which contains a C expression that
                    707:      is the final test to decide whether an insn body matches this
                    708:      pattern.
                    709: 
                    710:      For a named pattern, the condition (if present) may not depend on
                    711:      the data in the insn being matched, but only the
                    712:      target-machine-type flags.  The compiler needs to test these
                    713:      conditions during initialization in order to learn exactly which
                    714:      named instructions are available in a particular run.
                    715: 
                    716:      For nameless patterns, the condition is applied only when matching
                    717:      an individual insn, and only after the insn has matched the
                    718:      pattern's recognition template.  The insn's operands may be found
                    719:      in the vector `operands'.
                    720: 
                    721:   4. The "output template": a string that says how to output matching
                    722:      insns as assembler code.  `%' in this string specifies where to
                    723:      substitute the value of an operand.  *Note Output Template::.
                    724: 
                    725:      When simple substitution isn't general enough, you can specify a
                    726:      piece of C code to compute the output.  *Note Output Statement::.
                    727: 
                    728:   5. Optionally, a vector containing the values of attributes for insns
                    729:      matching this pattern.  *Note Insn Attributes::.
                    730: 
                    731: 
                    732: File: gcc.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
                    733: 
                    734: Example of `define_insn'
                    735: ========================
                    736: 
                    737:    Here is an actual example of an instruction pattern, for the
                    738: 68000/68020.
                    739: 
                    740:      (define_insn "tstsi"
                    741:        [(set (cc0)
                    742:              (match_operand:SI 0 "general_operand" "rm"))]
                    743:        ""
                    744:        "*
                    745:      { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
                    746:          return \"tstl %0\";
                    747:        return \"cmpl #0,%0\"; }")
                    748: 
                    749:    This is an instruction that sets the condition codes based on the
                    750: value of a general operand.  It has no condition, so any insn whose RTL
                    751: description has the form shown may be handled according to this
                    752: pattern.  The name `tstsi' means "test a `SImode' value" and tells the
                    753: RTL generation pass that, when it is necessary to test such a value, an
                    754: insn to do so can be constructed using this pattern.
                    755: 
                    756:    The output control string is a piece of C code which chooses which
                    757: output template to return based on the kind of operand and the specific
                    758: type of CPU for which code is being generated.
                    759: 
                    760:    `"rm"' is an operand constraint.  Its meaning is explained below.
                    761: 
                    762: 
                    763: File: gcc.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
                    764: 
                    765: RTL Template
                    766: ============
                    767: 
                    768:    The RTL template is used to define which insns match the particular
                    769: pattern and how to find their operands.  For named patterns, the RTL
                    770: template also says how to construct an insn from specified operands.
                    771: 
                    772:    Construction involves substituting specified operands into a copy of
                    773: the template.  Matching involves determining the values that serve as
                    774: the operands in the insn being matched.  Both of these activities are
                    775: controlled by special expression types that direct matching and
                    776: substitution of the operands.
                    777: 
                    778: `(match_operand:M N PREDICATE CONSTRAINT)'
                    779:      This expression is a placeholder for operand number N of the insn.
                    780:      When constructing an insn, operand number N will be substituted
                    781:      at this point.  When matching an insn, whatever appears at this
                    782:      position in the insn will be taken as operand number N; but it
                    783:      must satisfy PREDICATE or this instruction pattern will not match
                    784:      at all.
                    785: 
                    786:      Operand numbers must be chosen consecutively counting from zero in
                    787:      each instruction pattern.  There may be only one `match_operand'
                    788:      expression in the pattern for each operand number.  Usually
                    789:      operands are numbered in the order of appearance in `match_operand'
                    790:      expressions.
                    791: 
                    792:      PREDICATE is a string that is the name of a C function that
                    793:      accepts two arguments, an expression and a machine mode.  During
                    794:      matching, the function will be called with the putative operand as
                    795:      the expression and M as the mode argument (if M is not specified,
                    796:      `VOIDmode' will be used, which normally causes PREDICATE to accept
                    797:      any mode).  If it returns zero, this instruction pattern fails to
                    798:      match.  PREDICATE may be an empty string; then it means no test is
                    799:      to be done on the operand, so anything which occurs in this
                    800:      position is valid.
                    801: 
                    802:      Most of the time, PREDICATE will reject modes other than M--but
                    803:      not always.  For example, the predicate `address_operand' uses M
                    804:      as the mode of memory ref that the address should be valid for.
                    805:      Many predicates accept `const_int' nodes even though their mode is
                    806:      `VOIDmode'.
                    807: 
                    808:      CONSTRAINT controls reloading and the choice of the best register
                    809:      class to use for a value, as explained later (*note
                    810:      Constraints::.).
                    811: 
                    812:      People are often unclear on the difference between the constraint
                    813:      and the predicate.  The predicate helps decide whether a given
                    814:      insn matches the pattern.  The constraint plays no role in this
                    815:      decision; instead, it controls various decisions in the case of an
                    816:      insn which does match.
                    817: 
                    818:      On CISC machines, the most common PREDICATE is
                    819:      `"general_operand"'.  This function checks that the putative
                    820:      operand is either a constant, a register or a memory reference,
                    821:      and that it is valid for mode M.
                    822: 
                    823:      For an operand that must be a register, PREDICATE should be
                    824:      `"register_operand"'.  Using `"general_operand"' would be valid,
                    825:      since the reload pass would copy any non-register operands through
                    826:      registers, but this would make GNU CC do extra work, it would
                    827:      prevent invariant operands (such as constant) from being removed
                    828:      from loops, and it would prevent the register allocator from doing
                    829:      the best possible job.  On RISC machines, it is usually most
                    830:      efficient to allow PREDICATE to accept only objects that the
                    831:      constraints allow.
                    832: 
                    833:      For an operand that must be a constant, you must be sure to either
                    834:      use `"immediate_operand"' for PREDICATE, or make the instruction
                    835:      pattern's extra condition require a constant, or both.  You cannot
                    836:      expect the constraints to do this work!  If the constraints allow
                    837:      only constants, but the predicate allows something else, the
                    838:      compiler will crash when that case arises.
                    839: 
                    840: `(match_scratch:M N CONSTRAINT)'
                    841:      This expression is also a placeholder for operand number N and
                    842:      indicates that operand must be a `scratch' or `reg' expression.
                    843: 
                    844:      When matching patterns, this is completely equivalent to
                    845: 
                    846:           (match_operand:M N "scratch_operand" PRED)
                    847: 
                    848:      but, when generating RTL, it produces a (`scratch':M) expression.
                    849: 
                    850:      If the last few expressions in a `parallel' are `clobber'
                    851:      expressions whose operands are either a hard register or
                    852:      `match_scratch', the combiner can add them when necessary.  *Note
                    853:      Side Effects::.
                    854: 
                    855: `(match_dup N)'
                    856:      This expression is also a placeholder for operand number N.  It is
                    857:      used when the operand needs to appear more than once in the insn.
                    858: 
                    859:      In construction, `match_dup' acts just like `match_operand': the
                    860:      operand is substituted into the insn being constructed.  But in
                    861:      matching, `match_dup' behaves differently.  It assumes that operand
                    862:      number N has already been determined by a `match_operand'
                    863:      appearing earlier in the recognition template, and it matches only
                    864:      an identical-looking expression.
                    865: 
                    866: `(match_operator:M N PREDICATE [OPERANDS...])'
                    867:      This pattern is a kind of placeholder for a variable RTL expression
                    868:      code.
                    869: 
                    870:      When constructing an insn, it stands for an RTL expression whose
                    871:      expression code is taken from that of operand N, and whose
                    872:      operands are constructed from the patterns OPERANDS.
                    873: 
                    874:      When matching an expression, it matches an expression if the
                    875:      function PREDICATE returns nonzero on that expression *and* the
                    876:      patterns OPERANDS match the operands of the expression.
                    877: 
                    878:      Suppose that the function `commutative_operator' is defined as
                    879:      follows, to match any expression whose operator is one of the
                    880:      commutative arithmetic operators of RTL and whose mode is MODE:
                    881: 
                    882:           int
                    883:           commutative_operator (x, mode)
                    884:                rtx x;
                    885:                enum machine_mode mode;
                    886:           {
                    887:             enum rtx_code code = GET_CODE (x);
                    888:             if (GET_MODE (x) != mode)
                    889:               return 0;
                    890:             return (GET_RTX_CLASS (code) == 'c'
                    891:                     || code == EQ || code == NE);
                    892:           }
                    893: 
                    894:      Then the following pattern will match any RTL expression consisting
                    895:      of a commutative operator applied to two general operands:
                    896: 
                    897:           (match_operator:SI 3 "commutative_operator"
                    898:             [(match_operand:SI 1 "general_operand" "g")
                    899:              (match_operand:SI 2 "general_operand" "g")])
                    900: 
                    901:      Here the vector `[OPERANDS...]' contains two patterns because the
                    902:      expressions to be matched all contain two operands.
                    903: 
                    904:      When this pattern does match, the two operands of the commutative
                    905:      operator are recorded as operands 1 and 2 of the insn.  (This is
                    906:      done by the two instances of `match_operand'.)  Operand 3 of the
                    907:      insn will be the entire commutative expression: use `GET_CODE
                    908:      (operands[3])' to see which commutative operator was used.
                    909: 
                    910:      The machine mode M of `match_operator' works like that of
                    911:      `match_operand': it is passed as the second argument to the
                    912:      predicate function, and that function is solely responsible for
                    913:      deciding whether the expression to be matched "has" that mode.
                    914: 
                    915:      When constructing an insn, argument 3 of the gen-function will
                    916:      specify the operation (i.e. the expression code) for the
                    917:      expression to be made.  It should be an RTL expression, whose
                    918:      expression code is copied into a new expression whose operands are
                    919:      arguments 1 and 2 of the gen-function.  The subexpressions of
                    920:      argument 3 are not used; only its expression code matters.
                    921: 
                    922:      When `match_operator' is used in a pattern for matching an insn,
                    923:      it usually best if the operand number of the `match_operator' is
                    924:      higher than that of the actual operands of the insn.  This improves
                    925:      register allocation because the register allocator often looks at
                    926:      operands 1 and 2 of insns to see if it can do register tying.
                    927: 
                    928:      There is no way to specify constraints in `match_operator'.  The
                    929:      operand of the insn which corresponds to the `match_operator'
                    930:      never has any constraints because it is never reloaded as a whole.
                    931:      However, if parts of its OPERANDS are matched by `match_operand'
                    932:      patterns, those parts may have constraints of their own.
                    933: 
                    934: `(match_op_dup:M N[OPERANDS...])'
                    935:      Like `match_dup', except that it applies to operators instead of
                    936:      operands.  When constructing an insn, operand number N will be
                    937:      substituted at this point.  But in matching, `match_op_dup' behaves
                    938:      differently.  It assumes that operand number N has already been
                    939:      determined by a `match_operator' appearing earlier in the
                    940:      recognition template, and it matches only an identical-looking
                    941:      expression.
                    942: 
                    943: `(match_parallel N PREDICATE [SUBPAT...])'
                    944:      This pattern is a placeholder for an insn that consists of a
                    945:      `parallel' expression with a variable number of elements.  This
                    946:      expression should only appear at the top level of an insn pattern.
                    947: 
                    948:      When constructing an insn, operand number N will be substituted at
                    949:      this point.  When matching an insn, it matches if the body of the
                    950:      insn is a `parallel' expression with at least as many elements as
                    951:      the vector of SUBPAT expressions in the `match_parallel', if each
                    952:      SUBPAT matches the corresponding element of the `parallel', *and*
                    953:      the function PREDICATE returns nonzero on the `parallel' that is
                    954:      the body of the insn.  It is the responsibility of the predicate
                    955:      to validate elements of the `parallel' beyond those listed in the
                    956:      `match_parallel'.
                    957: 
                    958:      A typical use of `match_parallel' is to match load and store
                    959:      multiple expressions, which can contains a variable number of
                    960:      elements in a `parallel'.  For example,
                    961: 
                    962:           (define_insn ""
                    963:             [(match_parallel 0 "load_multiple_operation"
                    964:                [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
                    965:                      (match_operand:SI 2 "memory_operand" "m"))
                    966:                 (use (reg:SI 179))
                    967:                 (clobber (reg:SI 179))])]
                    968:             ""
                    969:             "loadm 0,0,%1,%2")
                    970: 
                    971:      This example comes from `a29k.md'.  The function
                    972:      `load_multiple_operations' is defined in `a29k.c' and checks that
                    973:      subsequent elements in the `parallel' are the same as the `set' in
                    974:      the pattern, except that they are referencing subsequent registers
                    975:      and memory locations.
                    976: 
                    977:      An insn that matches this pattern might look like:
                    978: 
                    979:           (parallel
                    980:            [(set (reg:SI 20) (mem:SI (reg:SI 100)))
                    981:             (use (reg:SI 179))
                    982:             (clobber (reg:SI 179))
                    983:             (set (reg:SI 21)
                    984:                  (mem:SI (plus:SI (reg:SI 100)
                    985:                                   (const_int 4))))
                    986:             (set (reg:SI 22)
                    987:                  (mem:SI (plus:SI (reg:SI 100)
                    988:                                   (const_int 8))))])
                    989: 
                    990: `(match_par_dup N [SUBPAT...])'
                    991:      Like `match_op_dup', but for `match_parallel' instead of
                    992:      `match_operator'.
                    993: 
                    994: `(address (match_operand:M N "address_operand" ""))'
                    995:      This complex of expressions is a placeholder for an operand number
                    996:      N in a "load address" instruction: an operand which specifies a
                    997:      memory location in the usual way, but for which the actual operand
                    998:      value used is the address of the location, not the contents of the
                    999:      location.
                   1000: 
                   1001:      `address' expressions never appear in RTL code, only in machine
                   1002:      descriptions.  And they are used only in machine descriptions that
                   1003:      do not use the operand constraint feature.  When operand
                   1004:      constraints are in use, the letter `p' in the constraint serves
                   1005:      this purpose.
                   1006: 
                   1007:      M is the machine mode of the *memory location being addressed*,
                   1008:      not the machine mode of the address itself.  That mode is always
                   1009:      the same on a given target machine (it is `Pmode', which normally
                   1010:      is `SImode'), so there is no point in mentioning it; thus, no
                   1011:      machine mode is written in the `address' expression.  If some day
                   1012:      support is added for machines in which addresses of different
                   1013:      kinds of objects appear differently or are used differently (such
                   1014:      as the PDP-10), different formats would perhaps need different
                   1015:      machine modes and these modes might be written in the `address'
                   1016:      expression.
                   1017: 
                   1018: 
                   1019: File: gcc.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
                   1020: 
                   1021: Output Templates and Operand Substitution
                   1022: =========================================
                   1023: 
                   1024:    The "output template" is a string which specifies how to output the
                   1025: assembler code for an instruction pattern.  Most of the template is a
                   1026: fixed string which is output literally.  The character `%' is used to
                   1027: specify where to substitute an operand; it can also be used to identify
                   1028: places where different variants of the assembler require different
                   1029: syntax.
                   1030: 
                   1031:    In the simplest case, a `%' followed by a digit N says to output
                   1032: operand N at that point in the string.
                   1033: 
                   1034:    `%' followed by a letter and a digit says to output an operand in an
                   1035: alternate fashion.  Four letters have standard, built-in meanings
                   1036: described below.  The machine description macro `PRINT_OPERAND' can
                   1037: define additional letters with nonstandard meanings.
                   1038: 
                   1039:    `%cDIGIT' can be used to substitute an operand that is a constant
                   1040: value without the syntax that normally indicates an immediate operand.
                   1041: 
                   1042:    `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
                   1043: negated before printing.
                   1044: 
                   1045:    `%aDIGIT' can be used to substitute an operand as if it were a
                   1046: memory reference, with the actual operand treated as the address.  This
                   1047: may be useful when outputting a "load address" instruction, because
                   1048: often the assembler syntax for such an instruction requires you to
                   1049: write the operand as if it were a memory reference.
                   1050: 
                   1051:    `%lDIGIT' is used to substitute a `label_ref' into a jump
                   1052: instruction.
                   1053: 
                   1054:    `%=' outputs a number which is unique to each instruction in the
                   1055: entire compilation.  This is useful for making local labels to be
                   1056: referred to more than once in a single template that generates multiple
                   1057: assembler instructions.
                   1058: 
                   1059:    `%' followed by a punctuation character specifies a substitution that
                   1060: does not use an operand.  Only one case is standard: `%%' outputs a `%'
                   1061: into the assembler code.  Other nonstandard cases can be defined in the
                   1062: `PRINT_OPERAND' macro.  You must also define which punctuation
                   1063: characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
                   1064: 
                   1065:    The template may generate multiple assembler instructions.  Write
                   1066: the text for the instructions, with `\;' between them.
                   1067: 
                   1068:    When the RTL contains two operands which are required by constraint
                   1069: to match each other, the output template must refer only to the
                   1070: lower-numbered operand.  Matching operands are not always identical,
                   1071: and the rest of the compiler arranges to put the proper RTL expression
                   1072: for printing into the lower-numbered operand.
                   1073: 
                   1074:    One use of nonstandard letters or punctuation following `%' is to
                   1075: distinguish between different assembler languages for the same machine;
                   1076: for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
                   1077: syntax requires periods in most opcode names, while MIT syntax does
                   1078: not.  For example, the opcode `movel' in MIT syntax is `move.l' in
                   1079: Motorola syntax.  The same file of patterns is used for both kinds of
                   1080: output syntax, but the character sequence `%.' is used in each place
                   1081: where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
                   1082: Motorola syntax defines the sequence to output a period; the macro for
                   1083: MIT syntax defines it to do nothing.
                   1084: 
                   1085:    As a special case, a template consisting of the single character `#'
                   1086: instructs the compiler to first split the insn, and then output the
                   1087: resulting instructions separately.  This helps eliminate redundancy in
                   1088: the output templates.   If you have a `define_insn' that needs to emit
                   1089: multiple assembler instructions, and there is an matching `define_split'
                   1090: already defined, then you can simply use `#' as the output template
                   1091: instead of writing an output template that emits the multiple assembler
                   1092: instructions.
                   1093: 
                   1094:    If `ASSEMBLER_DIALECT' is defined, templates may contain strings of
                   1095: the form `{option0|option1|option2}' which represent variants of
                   1096: assembler language syntax.  *Note Instruction Output::.
                   1097: 

unix.superglobalmegacorp.com

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