Annotation of gcc/internals-2, revision 1.1.1.1

1.1       root        1: Info file internals, produced by texinfo-format-buffer   -*-Text-*-
                      2: from file internals.texinfo
                      3: 
                      4: 
                      5: This file documents the internals of the GNU compiler.
                      6: 
                      7: Copyright (C) 1987 Richard M. Stallman.
                      8: 
                      9: Permission is granted to make and distribute verbatim copies of
                     10: this manual provided the copyright notice and this permission notice
                     11: are preserved on all copies.
                     12: 
                     13: Permission is granted to copy and distribute modified versions of this
                     14: manual under the conditions for verbatim copying, provided also that the
                     15: section entitled "GNU CC General Public License" is included exactly as
                     16: in the original, and provided that the entire resulting derived work is
                     17: distributed under the terms of a permission notice identical to this one.
                     18: 
                     19: Permission is granted to copy and distribute translations of this manual
                     20: into another language, under the above conditions for modified versions,
                     21: except that the section entitled "GNU CC General Public License" may be
                     22: included in a translation approved by the author instead of in the original
                     23: English.
                     24: 
                     25: 
                     26: 
                     27: 
                     28: 
                     29: File: internals  Node: Comparisons, Prev: Arithmetic, Up: RTL, Next: Bit Fields
                     30: 
                     31: Comparison Operations
                     32: =====================
                     33: 
                     34: Comparison operators test a relation on two operands and are considered to
                     35: represent the value 1 if the relation holds, or zero if it does not.  The
                     36: mode of the comparison is determined by the operands; they must both be
                     37: valid for a common machine mode.  A comparison with both operands constant
                     38: would be invalid as the machine mode could not be deduced from it, but such
                     39: a comparison should never exist in rtl due to constant folding.
                     40: 
                     41: Inequality comparisons come in two flavors, signed and unsigned.  Thus,
                     42: there are distinct expression codes `GT' and `GTU' for signed and
                     43: unsigned greater-than.  These can produce different results for the same
                     44: pair of integer values: for example, 1 is signed greater-than -1 but not
                     45: unsigned greater-than, because -1 when regarded as unsigned is actually
                     46: 0xffffffff which is greater than 1.
                     47: 
                     48: The signed comparisons are also used for floating point values.  Floating
                     49: point comparisons are distinguished by the machine modes of the operands.
                     50: 
                     51: The comparison operators may be used to compare the condition codes
                     52: `(cc0)' against zero, as in `(eq (cc0) (const_int 0))'.
                     53: Such a construct actually refers to the result of the preceding
                     54: instruction in which the condition codes were set.  The above
                     55: example stands for 1 if the condition codes were set to say
                     56: "zero" or "equal", 0 otherwise.  Although the same comparison
                     57: operators are used for this as may be used in other contexts
                     58: on actual data, no confusion can result since the machine description
                     59: would never allow both kinds of uses in the same context.
                     60: 
                     61: `(eq X Y)'     
                     62:      1 if the values represented by X and Y are equal,
                     63:      otherwise 0.
                     64:      
                     65: `(ne X Y)'     
                     66:      1 if the values represented by X and Y are not equal,
                     67:      otherwise 0.
                     68:      
                     69: `(gt X Y)'     
                     70:      1 if the X is greater than Y.  If they are fixed-point,
                     71:      the comparison is done in a signed sense.
                     72:      
                     73: `(gtu X Y)'     
                     74:      Like `gt' but does unsigned comparison, on fixed-point numbers only.
                     75:      
                     76: `(lt X Y)'     
                     77: `(ltu X Y)'     
                     78:      Like `gt' and `gtu' but test for "less than".
                     79:      
                     80: `(ge X Y)'     
                     81: `(geu X Y)'     
                     82:      Like `gt' and `gtu' but test for "greater than or equal".
                     83:      
                     84: `(le X Y)'     
                     85: `(leu X Y)'     
                     86:      Like `gt' and `gtu' but test for "less than or equal".
                     87:      
                     88: `(if_then_else COND THEN ELSE)'     
                     89:      This is not a comparison operation but is listed here because it is
                     90:      always used in conjunction with a comparison operation.  To be
                     91:      precise, COND is a comparison expression.  This expression
                     92:      represents a choice, according to COND, between the value
                     93:      represented by THEN and the one represented by ELSE.
                     94:      
                     95:      On most machines, `if_then_else' expressions are valid only
                     96:      to express conditional jumps.
                     97: 
                     98: 
                     99: File: internals  Node: Bit Fields, Prev: Comparisons, Up: RTL, Next: Conversions
                    100: 
                    101: Bit-fields
                    102: ==========
                    103: 
                    104: Special expression codes exist to represent bit-field instructions.
                    105: These types of expressions are lvalues in rtl; they may appear
                    106: on the left side of a assignment, indicating insertion of a value
                    107: into the specified bit field.
                    108: 
                    109: `(sign_extract:SI LOC SIZE POS)'     
                    110:      This represents a reference to a sign-extended bit-field contained or
                    111:      starting in LOC (a memory or register reference).  The bit field
                    112:      is SIZE bits wide and starts at bit POS.  The compilation
                    113:      switch `BITS_BIG_ENDIAN' says which end of the memory unit
                    114:      POS counts from.
                    115:      
                    116:      Which machine modes are valid for LOC depends on the machine,
                    117:      but typically LOC should be a single byte when in memory
                    118:      or a full word in a register.
                    119:      
                    120: `(zero_extract:SI LOC POS SIZE)'     
                    121:      Like `sign_extract' but refers to an unsigned or zero-extended
                    122:      bit field.  The same sequence of bits are extracted, but they
                    123:      are filled to an entire word with zeros instead of by sign-extension.
                    124: 
                    125: 
                    126: File: internals  Node: Conversions, Prev: Bit Fields, Up: RTL, Next: RTL Declarations
                    127: 
                    128: Conversions
                    129: ===========
                    130: 
                    131: All conversions between machine modes must be represented by
                    132: explicit conversion operations.  For example, an expression
                    133: which the sum of a byte and a full word cannot be written as
                    134: `(plus:SI (reg:QI 34) (reg:SI 80))' because the `plus'
                    135: operation requires two operands of the same machine mode.
                    136: Therefore, the byte-sized operand is enclosed in a conversion
                    137: operation, as in
                    138: 
                    139:      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
                    140: 
                    141: The conversion operation is not a mere placeholder, because there
                    142: may be more than one way of converting from a given starting mode
                    143: to the desired final mode.  The conversion operation code says how
                    144: to do it.
                    145: 
                    146: `(sign_extend:M X)'     
                    147:      Represents the result of sign-extending the value X
                    148:      to machine mode M.  M must be a fixed-point mode
                    149:      and X a fixed-point value of a mode narrower than M.
                    150:      
                    151: `(zero_extend:M X)'     
                    152:      Represents the result of zero-extending the value X
                    153:      to machine mode M.  M must be a fixed-point mode
                    154:      and X a fixed-point value of a mode narrower than M.
                    155:      
                    156: `(float_extend:M X)'     
                    157:      Represents the result of extending the value X
                    158:      to machine mode M.  M must be a floating point mode
                    159:      and X a floating point value of a mode narrower than M.
                    160:      
                    161: `(truncate:M X)'     
                    162:      Represents the result of truncating the value X
                    163:      to machine mode M.  M must be a fixed-point mode
                    164:      and X a fixed-point value of a mode wider than M.
                    165:      
                    166: `(float_truncate:M X)'     
                    167:      Represents the result of truncating the value X
                    168:      to machine mode M.  M must be a floating point mode
                    169:      and X a floating point value of a mode wider than M.
                    170:      
                    171: `(float:M X)'     
                    172:      Represents the result of converting fixed point value X
                    173:      to floating point mode M.
                    174:      
                    175: `(fix:M X)'     
                    176:      Represents the result of converting floating point value X
                    177:      to fixed point mode M.  How rounding is done is not specified.
                    178:      
                    179: 
                    180: 
                    181: File: internals  Node: RTL Declarations, Prev: Conversions, Up: RTL, Next: Side Effects
                    182: 
                    183: Declarations
                    184: ============
                    185: 
                    186: Declaration expression codes do not represent arithmetic operations
                    187: but rather state assertions about their operands.
                    188: 
                    189: `(volatile:M X)'     
                    190:      Represents the same value X does, but makes the assertion
                    191:      that it should be treated as a volatile value.  This forbids
                    192:      coalescing multiple accesses or deleting them even if it would
                    193:      appear to have no effect on the program.  X must be a `mem'
                    194:      expression with mode M.
                    195:      
                    196:      The first thing the reload pass does to an insn is to remove all
                    197:      `volatile' expressions from it; each one is replaced by its
                    198:      operand.
                    199:      
                    200:      Recognizers will never recognize anything with `volatile' in it.
                    201:      This automatically prevents some optimizations on such things
                    202:      (such as instruction combination).  After the reload pass removes
                    203:      all volatility information, the insns can be recognized.
                    204:      
                    205:      Cse removes `volatile' from destinations of `set''s, because
                    206:      no optimizations reorder such `set's.  This is not required for
                    207:      correct code and is done to permit some optimization on the value to
                    208:      be stored.
                    209:      
                    210: `(unchanging:M X)'     
                    211:      Represents the same value X does, but makes the assertion
                    212:      that its value is effectively constant during the execution
                    213:      of the current function.  This permits references to X
                    214:      to be moved freely within the function.  X must be a `reg'
                    215:      expression with mode M.
                    216:      
                    217: `(strict_low_part (subreg:M (reg:N R) 0))'     
                    218:      This expression code is used in only one context: operand 0 of a
                    219:      `set' expression.  In addition, the operand of this expression
                    220:      must be a `subreg' expression.
                    221:      
                    222:      The presence of `strict_low_part' says that the part of the
                    223:      register which is meaningful in mode N but is not part of
                    224:      mode M is not to be altered.  Normally, an assignment to such
                    225:      a subreg is allowed to have undefined effects on the rest of the
                    226:      register when M is less than a word.
                    227: 
                    228: 
                    229: File: internals  Node: Side Effects, Prev: RTL Declarations, Up: RTL, Next: Incdec
                    230: 
                    231: Side Effect Expressions
                    232: =======================
                    233: 
                    234: The expression codes described so far represent values, not actions.
                    235: But machine instructions never produce values; they are meaningful
                    236: only for their side effects on the state of the machine.  Special
                    237: expression codes are used to represent side effects.
                    238: 
                    239: The body of an instruction is always one of these side effect codes;
                    240: the codes described above, which represent values, appear only as
                    241: the operands of these.
                    242: 
                    243: `(set LVAL X)'     
                    244:      Represents the action of storing the value of X into the place
                    245:      represented by LVAL.  LVAL must be an expression
                    246:      representing a place that can be stored in: `reg' (or
                    247:      `subreg' or `strict_low_part'), `mem', `pc' or
                    248:      `cc0'.
                    249:      
                    250:      If LVAL is a `reg', `subreg' or `mem', it has a
                    251:      machine mode; then X must be valid for that mode.
                    252:      
                    253:      If LVAL is a `reg' whose machine mode is less than the full
                    254:      width of the register, then it means that the part of the register
                    255:      specified by the machine mode is given the specified value and the
                    256:      rest of the register receives an undefined value.  Likewise, if
                    257:      LVAL is a `subreg' whose machine mode is narrower than
                    258:      `SImode', the rest of the register can be changed in an undefined way.
                    259:      
                    260:      If LVAL is a `strict_low_part' of a `subreg', then the
                    261:      part of the register specified by the machine mode of the
                    262:      `subreg' is given the value X and the rest of the register
                    263:      is not changed.
                    264:      
                    265:      If LVAL is `(cc0)', it has no machine mode, and X may
                    266:      have any mode.  This represents a "test" or "compare" instruction.
                    267:      
                    268:      If LVAL is `(pc)', we have a jump instruction, and the
                    269:      possibilities for X are very limited.  It may be a
                    270:      `label_ref' expression (unconditional jump).  It may be an
                    271:      `if_then_else' (conditional jump), in which case either the
                    272:      second or the third operand must be `(pc)' (for the case which
                    273:      does not jump) and the other of the two must be a `label_ref'
                    274:      (for the case which does jump).  X may also be a `mem' or
                    275:      `(plus:SI (pc) Y)', where Y may be a `reg' or a
                    276:      `mem'; these unusual patterns are used to represent jumps through
                    277:      branch tables.
                    278:      
                    279: `(return)'     
                    280:      Represents a return from the current function, on machines where
                    281:      this can be done with one instruction, such as Vaxen.  On machines
                    282:      where a multi-instruction "epilogue" must be executed in order
                    283:      to return from the function, returning is done by jumping to a
                    284:      label which precedes the epilogue, and the `return' expression
                    285:      code is never used.
                    286:      
                    287: `(call FUNCTION NARGS)'     
                    288:      Represents a function call.  FUNCTION is a `mem' expression
                    289:      whose address is the address of the function to be called.  NARGS
                    290:      is an expression representing the number of words of argument.
                    291:      
                    292:      Each machine has a standard machine mode which FUNCTION must
                    293:      have.  The machine descripion defines macro `FUNCTION_MODE' to
                    294:      expand into the requisite mode name.  The purpose of this mode is to
                    295:      specify what kind of addressing is allowed, on machines where the
                    296:      allowed kinds of addressing depend on the machine mode being
                    297:      addressed.
                    298:      
                    299: `(clobber X)'     
                    300:      Represents the storing or possible storing of an unpredictable,
                    301:      undescribed value into X, which must be a `reg' or
                    302:      `mem' expression.
                    303:      
                    304:      One place this is used is in string instructions that store standard
                    305:      values into particular hard registers.  It may not be worth the
                    306:      trouble to describe the values that are stored, but it is essential
                    307:      to inform the compiler that the registers will be altered, lest it
                    308:      attempt to keep data in them across the string instruction.
                    309:      
                    310:      X may also be null---a null C pointer, no expression at all.
                    311:      Such a `(clobber (null))' expression means that all memory
                    312:      locations must be presumed clobbered.
                    313:      
                    314:      Note that the machine description classifies certain hard registers as
                    315:      "call-clobbered".  All function call instructions are assumed by
                    316:      default to clobber these registers, so there is no need to use
                    317:      `clobber' expressions to indicate this fact.  Also, each function
                    318:      call is assumed to have the potential to alter any memory location.
                    319:      
                    320: `(use X)'     
                    321:      Represents the use of the value of X.  It indicates that
                    322:      the value in X at this point in the program is needed,
                    323:      even though it may not be apparent whythis is so.  Therefore, the
                    324:      compiler will not attempt to delete instructions whose only
                    325:      effect is to store a value in X.  X must be a `reg'
                    326:      expression.
                    327:      
                    328: `(parallel [X0 X1 ...])'     
                    329:      Represents several side effects performed in parallel.  The square
                    330:      brackets stand for a vector; the operand of `parallel' is a
                    331:      vector of expressions.  X0, X1 and so on are individual
                    332:      side effects---expressions of code `set', `call',
                    333:      `return', `clobber' or `use'.
                    334:      
                    335:      "In parallel" means that first all the values used in
                    336:      the individual side-effects are computed, and second all the actual
                    337:      side-effects are performed.  For example,
                    338:      
                    339:           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
                    340:                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
                    341:      
                    342:      says unambiguously that the values of hard register 1 and the memory
                    343:      location addressed by it are interchanged.  In both places where
                    344:      `(reg:SI 1)' appears as a memory address it refers to the value
                    345:      in register 1 before the execution of the instruction.
                    346: 
                    347: Three expression codes appear in place of a side effect, as the body
                    348: of an insn, though strictly speaking they do not describe side effects
                    349: as such:
                    350: 
                    351: `(asm_input S)'     
                    352:      Represents literal assembler code as described by the string S.
                    353:      
                    354: `(addr_vec:M [LR0 LR1 ...])'     
                    355:      Represents a table of jump addresses.  LR0 etc. are
                    356:      `label_ref' expressions.  The mode M specifies how much
                    357:      space is given to each address; normally M would be
                    358:      `Pmode'.
                    359:      
                    360: `(addr_diff_vec:M BASE [LR0 LR1 ...])'     
                    361:      Represents a table of jump addresses expressed as offsets from
                    362:      BASE.  LR0 etc. are `label_ref' expressions and so is
                    363:      BASE.  The mode M specifies how much space is given to
                    364:      each address-difference.
                    365: 
                    366: 
                    367: File: internals  Node: Incdec, Prev: Side Effects, Up: RTL, Next: Insns
                    368: 
                    369: Embedded Side-Effects on Addresses
                    370: ==================================
                    371: 
                    372: Four special side-effect expression codes appear as memory addresses.
                    373: 
                    374: `(pre_dec:M X)'     
                    375:      Represents the side effect of decrementing X by a standard
                    376:      amount and represents also the value that X has after being
                    377:      decremented.  X must be a `reg' or `mem', but most
                    378:      machines allow only a `reg'.  M must be the machine mode
                    379:      for pointers on the machine in use.  The amount X is decrement
                    380:      by is the length in bytes of the machine mode of the containing memory
                    381:      reference of which this expression serves as the address.  Here is an
                    382:      example of its use:
                    383:      
                    384:           (mem:DF (pre_dec:SI (reg:SI 39)))
                    385:      
                    386:      This says to decrement pseudo register 39 by the length of a `DFmode'
                    387:      value and use the result to address a `DFmode' value.
                    388:      
                    389: `(pre_inc:M X)'     
                    390:      Similar, but specifies incrementing X instead of decrementing it.
                    391:      
                    392: `(post_dec:M X)'     
                    393:      Represents the same side effect as `pre_decrement' but a different
                    394:      value.  The value represented here is the value X has before
                    395:      being decremented.
                    396:      
                    397: `(post_inc:M X)'     
                    398:      Similar, but specifies incrementing X instead of decrementing it.
                    399: 
                    400: These embedded side effect expressions must be used with care.  Instruction
                    401: patterns may not use them.  Until the `flow' pass of the compiler,
                    402: they may occur only to represent pushes onto the stack.  The `flow'
                    403: pass finds cases where registers are incremented or decremented in one
                    404: instruction and used as an address shortly before or after; these cases are
                    405: then transformed to use pre- or post-increment or -decrement.
                    406: 
                    407: Explicit popping of the stack could be represented with these embedded
                    408: side effect operators, but that would not be safe; the instruction
                    409: combination pass could move the popping past pushes, thus changing
                    410: the meaning of the code.
                    411: 
                    412: An instruction that can be represented with an embedded side effect
                    413: could also be represented using `parallel' containing an additional
                    414: `set' to describe how the address register is altered.  This is not
                    415: done because machines that allow these operations at all typically
                    416: allow them wherever a memory address is called for.  Describing them as
                    417: additional parallel stores would require doubling the number of entries
                    418: in the machine description.
                    419: 
                    420: 
                    421: File: internals  Node: Insns, Prev: Incdec, Up: RTL, Next: Sharing
                    422: 
                    423: Insns
                    424: =====
                    425: 
                    426: The RTL representation of the code for a function is a doubly-linked
                    427: chain of objects called "insns".  Insns are expressions with
                    428: special codes that are used for no other purpose.  Some insns are
                    429: actual instructions; others represent dispatch tables for `switch'
                    430: statements; others represent labels to jump to or various sorts of
                    431: declaratory information.
                    432: 
                    433: In addition to its own specific data, each insn must have a unique id number
                    434: that distinguishes it from all other insns in the current function, and
                    435: chain pointers to the preceding and following insns.  These three fields
                    436: occupy the same position in every insn, independent of the expression code
                    437: of the insn.  They could be accessed with `XEXP' and `XINT',
                    438: but instead three special macros are always used:
                    439: 
                    440: `INSN_UID (I)'     
                    441:      Accesses the unique id of insn I.
                    442:      
                    443: `PREV_INSN (I)'     
                    444:      Accesses the chain pointer to the insn preceding I.
                    445:      If I is the first insn, this is a null pointer.
                    446:      
                    447: `NEXT_INSN (I)'     
                    448:      Accesses the chain pointer to the insn following I.
                    449:      If I is the last insn, this is a null pointer.
                    450: 
                    451: The `NEXT_INSN' and `PREV_INSN' pointers must always
                    452: correspond: if I is not the first insn,
                    453: 
                    454:      NEXT_INSN (PREV_INSN (INSN)) == INSN
                    455: 
                    456: is always true.
                    457: 
                    458: Every insn has one of the following six expression codes:
                    459: 
                    460: `insn'     
                    461:      The expression code `insn' is used for instructions that do not jump
                    462:      and do not do function calls.  Insns with code `insn' have four
                    463:      additional fields beyond the three mandatory ones listed above.
                    464:      These four are described in a table below.
                    465:      
                    466: `jump_insn'     
                    467:      The expression code `jump_insn' is used for instructions that may jump
                    468:      (or, more generally, may contain `label_ref' expressions).
                    469:      `jump_insn' insns have the same extra fields as `insn' insns,
                    470:      accessed in the same way.
                    471:      
                    472: `call_insn'     
                    473:      The expression code `call_insn' is used for instructions that may do
                    474:      function calls.  It is important to distinguish these instructions because
                    475:      they imply that certain registers and memory locations may be altered
                    476:      unpredictably.
                    477:      
                    478:      `call_insn' insns have the same extra fields as `insn' insns,
                    479:      accessed in the same way.
                    480:      
                    481: `code_label'     
                    482:      A `code_label' insn represents a label that a jump insn can jump to.
                    483:      It contains one special field of data in addition to the three standard ones.
                    484:      It is used to hold the "label number", a number that identifies this
                    485:      label uniquely among all the labels in the compilation (not just in the
                    486:      current function).  Ultimately, the label is represented in the assembler
                    487:      output as an assembler label `LN' where N is the label number.
                    488:      
                    489: `barrier'     
                    490:      Barriers are placed in the instruction stream after unconditional
                    491:      jump instructions to indicate that the jumps are unconditional.
                    492:      They contain no information beyond the three standard fields.
                    493:      
                    494: `note'     
                    495:      `note' insns are used to represent additional debugging and
                    496:      declaratory information.  They contain two nonstandard fields, an
                    497:      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
                    498:      string accessed with `NOTE_SOURCE_FILE'.
                    499:      
                    500:      If `NOTE_LINE_NUMBER' is positive, the note represents the
                    501:      position of a source line and `NOTE_SOURCE_FILE' is the source file name
                    502:      that the line came from.  These notes control generation of line
                    503:      number data in the assembler output.
                    504:      
                    505:      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
                    506:      code with one of the following values (and `NOTE_SOURCE_FILE'
                    507:      must contain a null pointer):
                    508:      
                    509:      `NOTE_INSN_DELETED'     
                    510:           Such a note is completely ignorable.  Some passes of the compiler
                    511:           delete insns by altering them into notes of this kind.
                    512:           
                    513:      `NOTE_INSN_BLOCK_BEG'     
                    514:      `NOTE_INSN_BLOCK_END'     
                    515:           These types of notes indicate the position of the beginning and end
                    516:           of a level of scoping of variable names.  They control the output
                    517:           of debugging information.
                    518:           
                    519:      `NOTE_INSN_LOOP_BEG'     
                    520:      `NOTE_INSN_LOOP_END'     
                    521:           These types of notes indicate the position of the beginning and end
                    522:           of a `while' or `for' loop.  They enable the loop optimizer
                    523:           to find loops quickly.
                    524: 
                    525: Here is a table of the extra fields of `insn', `jump_insn'
                    526: and `call_insn' insns:
                    527: 
                    528: `PATTERN (I)'     
                    529:      An expression for the side effect performed by this insn.
                    530:      
                    531: `REG_NOTES (I)'     
                    532:      A list (chain of `expr_list' expressions) giving information
                    533:      about the usage of registers in this insn.  This list is set up by the
                    534:      `flow' pass; it is a null pointer until then.
                    535:      
                    536: `LOG_LINKS (I)'     
                    537:      A list (chain of `insn_list' expressions) of previous "related"
                    538:      insns: insns which store into registers values that are used for the
                    539:      first time in this insn.  (An additional constraint is that neither a
                    540:      jump nor a label may come between the related insns).  This list is
                    541:      set up by the `flow' pass; it is a null pointer until then.
                    542:      
                    543: `INSN_CODE (I)'     
                    544:      An integer that says which pattern in the machine description matches
                    545:      this insn, or -1 if the matching has not yet been attempted.
                    546:      
                    547:      Such matching is never attempted and this field is not used on an insn
                    548:      whose pattern consists of a single `use', `clobber',
                    549:      `asm', `addr_vec' or `addr_diff_vec' expression.
                    550: 
                    551: The `LOG_LINKS' field of an insn is a chain of `insn_list'
                    552: expressions.  Each of these has two operands: the first is an insn,
                    553: and the second is another `insn_list' expression (the next one in
                    554: the chain).  The last `insn_list' in the chain has a null pointer
                    555: as second operand.  The significant thing about the chain is which
                    556: insns apepar in it (as first operands of `insn_list'
                    557: expressions).  Their order is not significant.
                    558: 
                    559: The `REG_NOTES' field of an insn is a similar chain but of
                    560: `expr_list' expressions instead of `insn_list'.  The first
                    561: operand is a `reg' rtx.  Its presence in the list can have three
                    562: possible meanings, distinguished by a value that is stored in the
                    563: machine-mode field of the `expr_list' because that is a
                    564: conveniently available space, but that is not really a machine mode.
                    565: These values belong to the C type `enum reg_note' and there are
                    566: three of them:
                    567: 
                    568: `REG_DEAD'     
                    569:      The `reg' listed dies in this insn; that is to say, altering
                    570:      the value immediately after this insn would not affect the future
                    571:      behavior of the program.
                    572:      
                    573: `REG_INC'     
                    574:      The `reg' listed is incremented (or decremented; at this level
                    575:      there is no distinction) by an embedded side effect inside this insn.
                    576:      
                    577: `REG_CONST'     
                    578:      The `reg' listed has a value that could safely be replaced
                    579:      everywhere by the value that this insn copies into it.  ("Safety"
                    580:      here refers to the data flow of the program; such replacement may
                    581:      require reloading into registers for some of the insns in which
                    582:      the `reg' is replaced.)
                    583:      
                    584: `REG_WAS_0'     
                    585:      The `reg' listed contained zero before this insn.  You can rely
                    586:      on this note if it is present; its absence implies nothing.
                    587: 
                    588: (The only difference between the expression codes `insn_list' and
                    589: `expr_list' is that the first operand of an `insn_list' is
                    590: assumed to be an insn and is printed in debugging dumps as the insn's
                    591: unique id; the first operand of an `expr_list' is printed in the
                    592: ordinary way as an expression.)
                    593: 
                    594: 
                    595: File: internals  Node: Sharing, Prev: Insns, Up: RTL
                    596: 
                    597: Structure Sharing Assumptions
                    598: =============================
                    599: 
                    600: The compiler assumes that certain kinds of RTL expressions are unique;
                    601: there do not exist two distinct objects representing the same value.
                    602: In other cases, it makes an opposite assumption: that no RTL expression
                    603: object of a certain kind appears in more than one place in the
                    604: containing structure.
                    605: 
                    606: These assumptions refer to a single function; except for the RTL
                    607: objects that describe global variables and external functions,
                    608: no RTL objects are common to two functions.
                    609: 
                    610:    * Each pseudo-register has only a single `reg' object to represent it,
                    611:      and therefore only a single machine mode.
                    612:      
                    613:    * For any symbolic label, there is only one `symbol_ref' object
                    614:      referring to it.
                    615:      
                    616:    * There is only one `const_int' expression with value zero,
                    617:      and only one with value one.
                    618:      
                    619:    * There is only one `pc' expression.
                    620:      
                    621:    * There is only one `cc0' expression.
                    622:      
                    623:    * There is only one `const_double' expression with mode
                    624:      `SFmode' and value zero, and only one with mode `DFmode' and
                    625:      value zero.
                    626:      
                    627:    * No `label_ref' appears in more than one place in the RTL structure;
                    628:      in other words, it is safe to do a tree-walk of all the insns in the function
                    629:      and assume that each time a `label_ref' is seen it is distinct from all
                    630:      other `label_refs' seen.
                    631:      
                    632:    * Aside from the cases listed above, the only kind of expression
                    633:      object that may appear in more than one place is the `mem'
                    634:      object that describes a stack slot or a static variable.
                    635: 
                    636: 
                    637: File: internals  Node: Machine Desc, Prev: RTL, Up: Top, Next: Machine Macros
                    638: 
                    639: Machine Descriptions
                    640: ********************
                    641: 
                    642: A machine description has two parts: a file of instruction patterns
                    643: (`.md' file) and a C header file of macro definitions.
                    644: 
                    645: The `.md' file for a target machine contains a pattern for each
                    646: instruction that the target machine supports (or at least each instruction
                    647: that is worth telling the compiler about).  It may also contain comments.
                    648: A semicolon causes the rest of the line to be a comment, unless the semicolon
                    649: is inside a quoted string.
                    650: 
                    651: See the next chapter for information on the C header file.
                    652: 
                    653: * Menu:
                    654: 
                    655: * Patterns::            How to write instruction patterns.
                    656: * Example::             Example of an instruction pattern.
                    657: * Constraints::         When not all operands are general operands.
                    658: * Standard Names::      Names mark patterns to use for code generation.
                    659: * Dependent Patterns::  Having one pattern may make you need another.
                    660: 
                    661: 
                    662: File: internals  Node: Patterns, Prev: Machine Desc, Up: Machine Desc, Next: Example
                    663: 
                    664: Instruction Patterns
                    665: ====================
                    666: 
                    667: Each instruction pattern contains an incomplete RTL expression, with pieces
                    668: to be filled in later, operand constraints that restrict how the pieces can
                    669: be filled in, and an output pattern or C code to generate the assembler
                    670: output, all wrapped up in a `define_insn' expression.
                    671: 
                    672: Sometimes an insn can match more than one instruction pattern.  Then the
                    673: pattern that appears first in the machine description is the one used.
                    674: Therefore, more specific patterns should usually go first in the
                    675: description.
                    676: 
                    677: The `define_insn' expression contains four operands:
                    678: 
                    679:   1. An optional name.  The presence of a name indicate that this instruction
                    680:      pattern can perform a certain standard job for the RTL-generation
                    681:      pass of the compiler.  This pass knows certain names and will use
                    682:      the instruction patterns with those names, if the names are defined
                    683:      in the machine description.
                    684:      
                    685:      The absence of a name is indicated by writing an empty string
                    686:      where the name should go.  Nameless instruction patterns are never
                    687:      used for generating RTL code, but they may permit several simpler insns
                    688:      to be combined later on.
                    689:      
                    690:      Names that are not thus known and used in RTL-generation have no
                    691:      effect; they are equivalent to no name at all.
                    692:      
                    693:   2. The recognition template.  This is a vector of incomplete RTL
                    694:      expressions which show what the instruction should look like.  It is
                    695:      incomplete because it may contain `match_operand' and
                    696:      `match_dup' expressions that stand for operands of the
                    697:      instruction.
                    698:      
                    699:      If the vector has only one element, that element is what the
                    700:      instruction should look like.  If the vector has multiple elements,
                    701:      then the instruction looks like a `parallel' expression
                    702:      containing that many elements as described.
                    703:      
                    704:   3. A condition.  This is a string which contains a C expression that is
                    705:      the final test to decide whether an insn body matches this pattern.
                    706:      
                    707:      For a named pattern, the condition (if present) may not depend on
                    708:      the data in the insn being matched, but only the target-machine-type
                    709:      flags.  The compiler needs to test these conditions during
                    710:      initialization in order to learn exactly which named instructions are
                    711:      available in a particular run.
                    712:      
                    713:      For nameless patterns, the condition is applied only when matching an
                    714:      individual insn, and only after the insn has matched the pattern's
                    715:      recognition template.  The insn's operands may be found in the vector
                    716:      `operands'.
                    717:      
                    718:   4. A string that says how to output matching insns as assembler code.  In
                    719:      the simpler case, the string is an output template, much like a
                    720:      `printf' control string.  `%' in the string specifies where
                    721:      to insert the operands of the instruction; the `%' is followed by
                    722:      a single-digit operand number.
                    723:      
                    724:      `%cDIGIT' can be used to subtitute an operand that is a
                    725:      constant value without the syntax that normally indicates an immediate
                    726:      operand.
                    727:      
                    728:      `%aDIGIT' can be used to substitute an operand as if it
                    729:      were a memory reference, with the actual operand treated as the address.
                    730:      This may be useful when outputting a "load address" instruction,
                    731:      because often the assembler syntax for such an instruction requires
                    732:      you to write the operand as if it were a memory reference.
                    733:      
                    734:      The template may generate multiple assembler instructions.
                    735:      Write the text for the instructions, with `\;' between them.
                    736:      
                    737:      If the output control string starts with a `*', then it is not an
                    738:      output template but rather a piece of C program that should compute a
                    739:      template.  It should execute a `return' statement to return the
                    740:      template-string you want.  Most such templates use C string literals,
                    741:      which require doublequote characters to delimit them.  To include
                    742:      these doublequote characters in the string, prefix each one with
                    743:      `\'.
                    744:      
                    745:      The operands may be found in the array `operands', whose C
                    746:      data type is `rtx []'.
                    747:      
                    748:      It is possible to output an assembler instruction and then go on to
                    749:      output or compute more of them, using the subroutine
                    750:      `output_asm_insn'.  This receives two arguments: a
                    751:      template-string and a vector of operands.  The vector may be
                    752:      `operands', or it may be another array of `rtx' that you
                    753:      declare locally and initialize yourself.
                    754: 
                    755: The recognition template is used also, for named patterns, for
                    756: constructing insns.  Construction involves substituting specified
                    757: operands into a copy of the template.  Matching involves determining
                    758: the values that serve as the operands in the insn being matched.  Both
                    759: of these activities are controlled by two special expression types
                    760: that direct matching and substitution of the operands.
                    761: 
                    762: `(match_operand:M N TESTFN CONSTRAINT)'     
                    763:      This expression is a placeholder for operand number N of
                    764:      the insn.  When constructing an insn, operand number N
                    765:      will be substituted at this point.  When matching an insn, whatever
                    766:      appears at this position in the insn will be taken as operand
                    767:      number N; but it must satisfy TESTFN or this instruction
                    768:      pattern will not match at all.
                    769:      
                    770:      Operand numbers must be chosen consecutively counting from zero in
                    771:      each instruction pattern.  There may be only one `match_operand'
                    772:      expression in the pattern for each expression number, and they must
                    773:      appear in order of increasing expression number.
                    774:      
                    775:      TESTFN is a string that is the name of a C function that accepts
                    776:      two arguments, a machine mode and an expression.  During matching,
                    777:      the function will be called with M as the mode argument
                    778:      and the putative operand as the other argument.  If it returns zero,
                    779:      this instruction pattern fails to match.  TESTFN may be
                    780:      an empty string; then it means no test is to be done on the operand.
                    781:      
                    782:      Most often, TESTFN is `"general_operand"'.  It checks
                    783:      that the putative operand is either a constant, a register or a
                    784:      memory reference, and that it is valid for mode M.
                    785:      
                    786:      CONSTRAINT is explained later.
                    787:      
                    788: `(match_dup N)'     
                    789:      This expression is also a placeholder for operand number N.
                    790:      It is used when the operand needs to appear more than once in the
                    791:      insn.
                    792:      
                    793:      In construction, `match_dup' behaves exactly like
                    794:      MATCH_OPERAND: the operand is substituted into the insn being
                    795:      constructed.  But in matching, `match_dup' behaves differently.
                    796:      It assumes that operand number N has already been determined by
                    797:      a `match_operand' apparing earlier in the recognition template,
                    798:      and it matches only an identical-looking expression.
                    799:      
                    800: `(address (match_operand:M N "address_operand" ""))'     
                    801:      This complex of expressions is a placeholder for an operand number
                    802:      N in a "load address" instruction: an operand which specifies
                    803:      a memory location in the usual way, but for which the actual operand
                    804:      value used is the address of the location, not the contents of the
                    805:      location.
                    806:      
                    807:      `address' expressions never appear in RTL code, only in machine
                    808:      descriptions.  And they are used only in machine descriptions that do
                    809:      not use the operand constraint feature.  When operand constraints are
                    810:      in use, the letter `p' in the constraint serves this purpose.
                    811:      
                    812:      M is the machine mode of the *memory location being
                    813:      addressed*, not the machine mode of the address itself.  That mode is
                    814:      always the same on a given target machine (it is `Pmode', which
                    815:      normally is `SImode'), so there is no point in mentioning it;
                    816:      thus, no machine mode is written in the `address' expression.  If
                    817:      some day support is added for machines in which addresses of different
                    818:      kinds of objects appear differently or are used differently (such as
                    819:      the PDP-10), different formats would perhaps need different machine
                    820:      modes and these modes might be written in the `address'
                    821:      expression.
                    822: 
                    823: 
                    824: File: internals  Node: Example, Prev: Patterns, Up: Machine Desc, Next: Constraints
                    825: 
                    826: Example of `define_insn'
                    827: ========================
                    828: 
                    829: Here is an actual example of an instruction pattern, for the 68000/68020.
                    830: 
                    831:      (define_insn "tstsi"
                    832:        [(set (cc0)
                    833:        (match_operand:SI 0 "general_operand" "rm"))]
                    834:        ""
                    835:        "*
                    836:      { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
                    837:          return \"tstl %0\";
                    838:        return \"cmpl #0,%0\"; }")
                    839: 
                    840: This is an instruction that sets the condition codes based on the value of
                    841: a general operand.  It has no condition, so any insn whose RTL description
                    842: has the form shown may be handled according to this pattern.  The name
                    843: `tstsi' means "test a `SImode' value" and tells the RTL generation
                    844: pass that, when it is necessary to test such a value, an insn to do so
                    845: can be constructed using this pattern.
                    846: 
                    847: The output control string is a piece of C code which chooses which
                    848: output template to return based on the kind of operand and the specific
                    849: type of CPU for which code is being generated.
                    850: 
                    851: `"rm"' is an operand constraint.  Its meaning is explained below.
                    852: 
                    853: 
                    854: File: internals  Node: Constraints, Prev: Example, Up: Machine Desc, Next: Standard Names
                    855: 
                    856: Operand Constraints
                    857: ===================
                    858: 
                    859: Each `match_operand' in an instruction pattern can specify a
                    860: constraint for the type of operands allowed.  Constraints can say whether
                    861: an operand may be in a register, and which kinds of register; whether the
                    862: operand can be a memory reference, and which kinds of address; whether the
                    863: operand may be an immediate constant, and which possible values it may
                    864: have.  Constraints can also require two operands to match.
                    865: 
                    866: * Menu:
                    867: 
                    868: * Simple Constraints::  Basic use of constraints.
                    869: * Multi-alternative::   When an insn has two alternative constraint-patterns.
                    870: * Class Preferences::   Constraints guide which hard register to put things in.
                    871: * Modifiers::           More precise control over effects of constraints.
                    872: * No Constraints::      Describing a clean machine without constraints.
                    873: 
                    874: 
                    875: File: internals  Node: Simple Constraints, Prev: Constraints, Up: Constraints, Next: Multi-Alternative
                    876: 
                    877: Simple Constraints
                    878: ------------------
                    879: 
                    880: The simplest kind of constraint is a string full of letters, each of
                    881: which describes one kind of operand that is permitted.  Here are
                    882: the letters that are allowed:
                    883: 
                    884: `m'     
                    885:      A memory operand is allowed, with any kind of address that the machine
                    886:      supports in general.
                    887:      
                    888: `o'     
                    889:      A memory operand is allowed, but only if the address is "offsetable".
                    890:      This means that adding a small integer (actually, the width in bytes of the
                    891:      operand, as determined by its machine mode) may be added to the address
                    892:      and the result is also a valid memory address.  For example, an address
                    893:      which is constant is offsetable; so is an address that is the sum of
                    894:      a register and a constant (as long as a slightly larger constant is also
                    895:      within the range of address-offsets supported by the machine); but an
                    896:      autoincrement or autodecrement address is not offsetable.  More complicated
                    897:      indirect/indexed addresses may or may not be offsetable depending on the
                    898:      other addressing modes that the machine supports.
                    899:      
                    900: `<'     
                    901:      A memory operand with autodecrement addressing (either predecrement or
                    902:      postdecrement) is allowed.
                    903:      
                    904: `>'     
                    905:      A memory operand with autoincrement addressing (either preincrement or
                    906:      postincrement) is allowed.
                    907:      
                    908: `r'     
                    909:      A register operand is allowed provided that it is in a general register.
                    910:      
                    911: `d'     
                    912: `a'     
                    913: `f'     
                    914: `...'     
                    915:      Other letters can be defined in machine-dependent fashion to stand for
                    916:      particular classes of registers.  `d', `a' and `f' are
                    917:      defined on the 68000/68020 to stand for data, address and floating point
                    918:      registers.
                    919:      
                    920: `i'     
                    921:      An immediate integer operand (one with constant value) is allowed.
                    922:      
                    923: `I'     
                    924: `J'     
                    925: `K'     
                    926: `...'     
                    927:      Other letters in the range `I' through `M' may be defined in a
                    928:      machine-dependent fashion to permit immediate integer operands with
                    929:      explicit integer values in specified ranges.  For example, on the 68000,
                    930:      `I' is defined to stand for the range of values 1 to 8.  This is the
                    931:      range permitted as a shift count in the shift instructions.
                    932:      
                    933: `F'     
                    934:      An immediate floating operand (expression code `const_double') is
                    935:      allowed.
                    936:      
                    937: `G'     
                    938: `H'     
                    939:      `G' and `H' may be defined in a machine-dependent fashion to
                    940:      permit immediate floating operands in particular ranges of values.
                    941:      
                    942: `s'     
                    943:      An immediate integer operand whose value is not an explicit integer is
                    944:      allowed.  This might appear strange; if an insn allows a constant operand
                    945:      with a value not known at compile time, it certainly must allow any known
                    946:      value.  So why use `s' instead of `i'?  Sometimes it allows
                    947:      better code to be generated.  For example, on the 68000 in a fullword
                    948:      instruction it is possible to use an immediate operand; but if the
                    949:      immediate value is between -32 and 31, better code results from loading the
                    950:      value into a register and using the register.  This is because the load
                    951:      into the register can be done with a `moveq' instruction.  We arrange
                    952:      for this to happen by defining the letter `K' to mean "any integer
                    953:      outside the range -32 to 31", and then specifying `Ks' in the operand
                    954:      constraints.
                    955:      
                    956: `g'     
                    957:      Any register, memory or immediate integer operand is allowed, except for
                    958:      registers that are not general registers.
                    959:      
                    960: `N, a digit'     
                    961:      An operand identical to operand number N is allowed.
                    962:      If a digit is used together with letters, the digit should come last.
                    963:      
                    964: `p'     
                    965:      An operand that is a valid memory address is allowed.  This is
                    966:      for "load address" and "push address" instructions.
                    967:      
                    968:      If `p' is used in the constraint, the test-function in the
                    969:      `match_operand' must be `address_operand'.
                    970: 
                    971: In order to have valid assembler code, each operand must satisfy
                    972: its constraint.  But a failure to do so does not prevent the pattern
                    973: from applying to an insn.  Instead, it directs the compiler to modify
                    974: the code such that the constraint will be satisfied.  Usually this is
                    975: done by copying an operand into a register.
                    976: 
                    977: Contrast, therefore, the two instruction patterns that follow:
                    978: 
                    979:      (define_insn ""
                    980:        [(set (match_operand:SI 0 "general_operand" "r")
                    981:              (plus:SI (match_dup 0)
                    982:                       (match_operand:SI 1 "general_operand" "r")))]
                    983:        ""
                    984:        "...")
                    985: 
                    986: which has two operands, one of which must appear in two places, and
                    987: 
                    988:      (define_insn ""
                    989:        [(set (match_operand:SI 0 "general_operand" "r")
                    990:              (plus:SI (match_operand:SI 1 "general_operand" "0")
                    991:                       (match_operand:SI 2 "general_operand" "r")))]
                    992:        ""
                    993:        "...")
                    994: 
                    995: which has three operands, two of which are required by a constraint to be
                    996: identical.  If we are considering an insn of the form
                    997: 
                    998:      (insn N PREV NEXT
                    999:        (set (reg:SI 3)
                   1000:             (plus:SI (reg:SI 6) (reg:SI 109)))
                   1001:        ...)
                   1002: 
                   1003: the first pattern would not apply at all, because this insn does not
                   1004: contain two identical subexpressions in the right place.  The pattern would
                   1005: say, "That does not look like an add instruction; try other patterns."
                   1006: The second pattern would say, "Yes, that's an add instruction, but there
                   1007: is something wrong with it."  It would direct the reload pass of the
                   1008: compiler to generate additional insns to make the constraint true.  The
                   1009: results might look like this:
                   1010: 
                   1011:      (insn N2 PREV N
                   1012:        (set (reg:SI 3) (reg:SI 6))
                   1013:        ...)
                   1014:      
                   1015:      (insn N N2 NEXT
                   1016:        (set (reg:SI 3)
                   1017:             (plus:SI (reg:SI 3) (reg:SI 109)))
                   1018:        ...)
                   1019: 
                   1020: Because insns that don't fit the constraints are fixed up by loading
                   1021: operands into registers, every instruction pattern's constraints must
                   1022: permit the case where all the operands are in registers.  It need not
                   1023: permit all classes of registers; the compiler knows how to copy registers
                   1024: into other registers of the proper class in order to make an instruction
                   1025: valid.  But if no registers are permitted, the compiler will be stymied: it
                   1026: does not know how to save a register in memory in order to make an
                   1027: instruction valid.  Instruction patterns that reject registers can be
                   1028: made valid by attaching a condition-expression that refuses to match
                   1029: an insn at all if the crucial operand is a register.
                   1030: 
                   1031: 
                   1032: File: internals  Node: Multi-Alternative, Prev: Simple Constraints, Up: Constraints, Next: Class Preferences
                   1033: 
                   1034: Multiple Alternative Constraints
                   1035: --------------------------------
                   1036: 
                   1037: Sometimes a single instruction has multiple alternative sets of possible
                   1038: operands.  For example, on the 68000, a logical-or instruction can combine
                   1039: register or an immediate value into memory, or it can combine any kind of
                   1040: operand into a register; but it cannot combine one memory location into
                   1041: another.
                   1042: 
                   1043: These constraints are represented as multiple alternatives.  An alternative
                   1044: can be described by a series of letters for each operand.  The overall
                   1045: constraint for an operand is made from the letters for this operand
                   1046: from the first alternative, a comma, the letters for this operand from
                   1047: the second alternative, a comma, and so on until the last alternative.
                   1048: Here is how it is done for fullword logical-or on the 68000:
                   1049: 
                   1050:      (define_insn "iorsi3"
                   1051:        [(set (match_operand:SI 0 "general_operand" "=%m,d")
                   1052:        (ior:SI (match_operand:SI 1 "general_operand" "0,0")
                   1053:                (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
                   1054:        ...)
                   1055: 
                   1056: The first alternative has `m' (memory) for operand 0, `0' for
                   1057: operand 1 (meaning it must match operand 0), and `dKs' for operand 2.
                   1058: The second alternative has `d' (data register) for operand 0, `0'
                   1059: for operand 1, and `dmKs' for operand 2.  The `=' and `%' in
                   1060: the constraint for operand 0 are not part of any alternative; their meaning
                   1061: is explained in the next section.
                   1062: 
                   1063: If all the operands fit any one alternative, the instruction is valid.
                   1064: Otherwise, for each alternative, the compiler counts how many instructions
                   1065: must be added to copy the operands so that that alternative applies.
                   1066: The alternative requiring the least copying is chosen.  If two alternatives
                   1067: need the same amount of copying, the one that comes first is chosen.
                   1068: These choices can be altered with the `?' and `!' characters:
                   1069: 
                   1070: `?'     
                   1071:      Disparage slightly the alternative that the `?' appears in,
                   1072:      as a choice when no alternative applies exactly.  The compiler regards
                   1073:      this alternative as one unit more costly for each `?' that appears
                   1074:      in it.
                   1075:      
                   1076: `!'     
                   1077:      Disparage severely the alternative that the `!' appears in.
                   1078:      When operands must be copied into registers, the compiler will
                   1079:      never choose this alternative as the one to strive for.
                   1080: 
                   1081: 
                   1082: File: internals  Node: Class Preferences, Prev: Multi-Alternative, Up: Constraints, Next: Modifiers
                   1083: 
                   1084: Register Class Preferences
                   1085: --------------------------
                   1086: 
                   1087: The operand constraints have another function: they enable the compiler
                   1088: to decide which kind of hardware register a pseudo register is best
                   1089: allocated to.  The compiler examines the constraints that apply to the
                   1090: insns that use the pseudo register, looking for the machine-dependent
                   1091: letters such as `d' and `a' that specify classes of registers.
                   1092: The pseudo register is put in whichever class gets the most "votes".
                   1093: The constraint letters `g' and `r' also vote: they vote in
                   1094: favor of a general register.  The machine description says which registers
                   1095: are considered general.
                   1096: 
                   1097: Of course, on some machines all registers are equivalent, and no register
                   1098: classes are defined.  Then none of this complexity is relevant.
                   1099: 
                   1100: 
                   1101: File: internals  Node: Modifiers, Prev: Class Preferences, Up: Constraints, Next: No Constraints
                   1102: 
                   1103: Constraint Modifier Characters
                   1104: ------------------------------
                   1105: 
                   1106: `='     
                   1107:      Means that this operand is written by the instruction, but its previous
                   1108:      value is not used.
                   1109:      
                   1110: `+'     
                   1111:      Means that this operand is both read and written by the instruction.
                   1112:      
                   1113:      When the compiler fixes up the operands to satisfy the constraints,
                   1114:      it needs to know which operands are inputs to the instruction and
                   1115:      which are outputs from it.  `=' identifies an output; `+'
                   1116:      identifies an operand that is both input and output; all other operands
                   1117:      are assumed to be input only.
                   1118:      
                   1119: `%'     
                   1120:      Declares the instruction to be commutative for operands 1 and 2.
                   1121:      This means that the compiler may interchange operands 1 and 2
                   1122:      if that will make the operands fit their constraints.
                   1123:      
                   1124: `#'     
                   1125:      Says that all following characters, up to the next comma, are to be ignored
                   1126:      as a constraint.  They are significant only for choosing register preferences.
                   1127:      
                   1128: `*'     
                   1129:      Says that the following character should be ignored when choosing
                   1130:      register preferences.  `*' has no effect on the meaning of
                   1131:      the constraint as a constraint.
                   1132: 
                   1133: 
                   1134: File: internals  Node: No Constraints, Prev: Modifiers, Up: Constraints
                   1135: 
                   1136: Not Using Constraints
                   1137: ---------------------
                   1138: 
                   1139: Some machines are so clean that operand constraints are not required.  For
                   1140: example, on the Vax, an operand valid in one context is valid in any other
                   1141: context.  On such a machine, every operand constraint would be `"g"',
                   1142: excepting only operands of "load address" instructions which are
                   1143: written as if they referred to a memory location's contents but actual
                   1144: refer to its address.  They would have constraint `"p"'.
                   1145: 
                   1146: For such machines, instead of writing `"g"' and `"p"' for all
                   1147: the constraints, you can choose to write a description with empty constraints.
                   1148: Then you write `""' for the constraint in every `match_operand'.
                   1149: Address operands are identified by writing an `address' expression
                   1150: around the `match_operand', not by their constraints.
                   1151: 
                   1152: When the machine description has just empty constraints, certain parts
                   1153: of compilation are skipped, making the compiler faster.
                   1154: 
                   1155: 
                   1156: File: internals  Node: Standard Names, Prev: Constraints, Up: Machine Desc, Next: Dependent Patterns
                   1157: 
                   1158: Standard Insn Names
                   1159: ===================
                   1160: 
                   1161: Here is a table of the instruction names that are meaningful in the RTL
                   1162: generation pass of the compiler.  Giving one of these names to an
                   1163: instruction pattern tells the RTL generation pass that it can use the
                   1164: pattern in to accomplish a certain task.
                   1165: 
                   1166: `movM'     
                   1167:      Here M is a two-letter machine mode name, in lower case.  This
                   1168:      instruction pattern moves data with that machine mode from operand 1 to
                   1169:      operand 0.  For example, `movsi' moves full-word data.
                   1170:      
                   1171:      If operand 0 is a `subreg' with mode M of a register whose
                   1172:      natural mode is wider than M, the effect of this instruction is
                   1173:      to store the specified value in the part of the register that corresponds
                   1174:      to mode M.  The effect on the rest of the register is undefined.
                   1175:      
                   1176: `movstrictM'     
                   1177:      Like `movM' except that if operand 0 is a `subreg'
                   1178:      with mode M of a register whose natural mode is wider,
                   1179:      the `movstrictM' instruction is guaranteed not to alter
                   1180:      any of the register except the part which belongs to mode M.
                   1181:      
                   1182: `addM3'     
                   1183:      Add operand 2 and operand 1, storing the result in operand 0.  All operands
                   1184:      must have mode M.  This can be used even on two-address machines, by
                   1185:      means of constraints requiring operands 1 and 0 to be the same location.
                   1186:      
                   1187: `subM3'     
                   1188: `mulM3'     
                   1189: `umulM3'     
                   1190: `divM3'     
                   1191: `udivM3'     
                   1192: `modM3'     
                   1193: `umodM3'     
                   1194: `andM3'     
                   1195: `iorM3'     
                   1196: `xorM3'     
                   1197:      Similar, for other arithmetic operations.
                   1198:      
                   1199: `andcbM3'     
                   1200:      Bitwise logical-and operand 1 with the complement of operand 2
                   1201:      and store the result in operand 0.
                   1202:      
                   1203: `mulhisi3'     
                   1204:      Multiply operands 1 and 2, which have mode `HImode', and store
                   1205:      a `SImode' product in operand 0.
                   1206:      
                   1207: `mulqihi3'     
                   1208: `mulsidi3'     
                   1209:      Similar widening-multiplication instructions of other widths.
                   1210:      
                   1211: `umulqihi3'     
                   1212: `umulhisi3'     
                   1213: `umulsidi3'     
                   1214:      Similar widening-multiplication instructions that do unsigned
                   1215:      multiplication.
                   1216:      
                   1217: `divmodM4'     
                   1218:      Signed division that produces both a quotient and a remainder.
                   1219:      Operand 1 is divided by operand 2 to produce a quotient stored
                   1220:      in operand 0 and a remainder stored in operand 3.
                   1221:      
                   1222: `udivmodM4'     
                   1223:      Similar, but does unsigned division.
                   1224:      
                   1225: `divmodMN4'     
                   1226:      Like `divmodM4' except that only the dividend has mode
                   1227:      M; the divisor, quotient and remainder have mode N.
                   1228:      For example, the Vax has a `divmoddisi4' instruction
                   1229:      (but it is omitted from the machine description, because it
                   1230:      is so slow that it is faster to compute remainders by the
                   1231:      circumlocution that the compiler will use if this instruction is
                   1232:      not available).
                   1233:      
                   1234: `ashlM3'     
                   1235:      Arithmetic-shift operand 1 left by a number of bits specified by
                   1236:      operand 2, and store the result in operand 0.  Operand 2 has
                   1237:      mode `SImode', not mode M.
                   1238:      
                   1239: `ashrM3'     
                   1240: `lshlM3'     
                   1241: `lshrM3'     
                   1242: `rotlM3'     
                   1243: `rotrM3'     
                   1244:      Other shift and rotate instructions.
                   1245:      
                   1246: `negM2'     
                   1247:      Negate operand 1 and store the result in operand 0.
                   1248:      
                   1249: `absM2'     
                   1250:      Store the absolute value of operand 1 into operand 0.
                   1251:      
                   1252: `sqrtM2'     
                   1253:      Store the square root of operand 1 into operand 0.
                   1254:      
                   1255: `one_cmplM2'     
                   1256:      Store the bitwise-complement of operand 1 into operand 0.
                   1257:      
                   1258: `cmpM'     
                   1259:      Compare operand 0 and operand 1, and set the condition codes.
                   1260:      
                   1261: `tstM'     
                   1262:      Compare operand 0 against zero, and set the condition codes.
                   1263:      
                   1264: `movstrM'     
                   1265:      Block move instruction.  The addresses of the destination and source
                   1266:      strings are the first two operands, and both are in mode `Pmode'.
                   1267:      The number of bytes to move is the third operand, in mode M.
                   1268:      
                   1269: `cmpstrM'     
                   1270:      Block compare instruction, with operands like `movstrM'
                   1271:      except that the two memory blocks are compared byte by byte
                   1272:      in lexicographic order.  The effect of the instruction is to set
                   1273:      the condition codes.
                   1274:      
                   1275: `floatMN2'     
                   1276:      Convert operand 1 (valid for floating point mode M) to fixed
                   1277:      point mode N and store in operand 0 (which has mode N).
                   1278:      
                   1279: `fixMN2'     
                   1280:      Convert operand 1 (valid for fixed point mode M) to floating
                   1281:      point mode N and store in operand 0 (which has mode N).
                   1282:      
                   1283: `truncMN'     
                   1284:      Truncate operand 1 (valid for mode M) to mode N and
                   1285:      store in operand 0 (which has mode N).  Both modes must be fixed
                   1286:      point or both floating point.
                   1287:      
                   1288: `extendMN'     
                   1289:      Sign-extend operand 1 (valid for mode M) to mode N and
                   1290:      store in operand 0 (which has mode N).  Both modes must be fixed
                   1291:      point or both floating point.
                   1292:      
                   1293: `zero_extendMN'     
                   1294:      Zero-extend operand 1 (valid for mode M) to mode N and
                   1295:      store in operand 0 (which has mode N).  Both modes must be fixed
                   1296:      point.
                   1297:      
                   1298: `extv'     
                   1299:      Extract a bit-field from operand 1 (a register or memory operand),
                   1300:      where operand 2 specifies the width in bits and operand 3 the starting
                   1301:      bit, and store it in operand 0.  Operand 0 must have `Simode'.
                   1302:      Operand 1 may have mode `QImode' or `SImode'; often
                   1303:      `SImode' is allowed only for registers.  Operands 2 and 3 must be
                   1304:      valid for `SImode'.
                   1305:      
                   1306:      The RTL generation pass generates this instruction only with constants
                   1307:      for operands 2 and 3.
                   1308:      
                   1309:      The bit-field value is sign-extended to a full word integer
                   1310:      before it is stored in operand 0.
                   1311:      
                   1312: `extzv'     
                   1313:      Like `extv' except that the bit-field value is zero-extended.
                   1314:      
                   1315: `insv'     
                   1316:      Store operand 3 (which must be valid for `SImode') into a
                   1317:      bit-field in operand 0, where operand 1 specifies the width in bits
                   1318:      and operand 2 the starting bit.  Operand 0 may have mode `QImode'
                   1319:      or `SImode'; often `SImode' is allowed only for registers.
                   1320:      Operands 1 and 2 must be valid for `SImode'.
                   1321:      
                   1322:      The RTL generation pass generates this instruction only with constants
                   1323:      for operands 1 and 2.
                   1324:      
                   1325: `sCONDM'     
                   1326:      Store zero or -1 in the operand (with mode M) according to the
                   1327:      condition codes.  Value stored is -1 iff the condition COND is
                   1328:      true.  COND is the name of a comparison operation rtx code, such
                   1329:      as `eq', `lt' or `leu'.
                   1330:      
                   1331: `bCOND'     
                   1332:      Conditional branch instruction.  Operand 0 is a `label_ref'
                   1333:      that refers to the label to jump to.  Jump if the condition codes
                   1334:      meet condition COND.
                   1335:      
                   1336: `call'     
                   1337:      Subroutine call instruction.  Operand 1 is the number of arguments
                   1338:      and operand 0 is the function to call.  Operand 1 should be a `mem'
                   1339:      rtx whose address is the address of the function.
                   1340:      
                   1341: `return'     
                   1342:      Subroutine return instruction.  This instruction pattern name should be
                   1343:      defined only if a single instruction can do all the work of returning
                   1344:      from a function.
                   1345:      
                   1346: `tablejump'     
                   1347: `caseM'     
                   1348: 
                   1349: 

unix.superglobalmegacorp.com

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