Annotation of GNUtools/cc/gcc.info-14, 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: Output Statement,  Next: Constraints,  Prev: Output Template,  Up: Machine Desc
                     32: 
                     33: C Statements for Assembler Output
                     34: =================================
                     35: 
                     36:    Often a single fixed template string cannot produce correct and
                     37: efficient assembler code for all the cases that are recognized by a
                     38: single instruction pattern.  For example, the opcodes may depend on the
                     39: kinds of operands; or some unfortunate combinations of operands may
                     40: require extra machine instructions.
                     41: 
                     42:    If the output control string starts with a `@', then it is actually
                     43: a series of templates, each on a separate line.  (Blank lines and
                     44: leading spaces and tabs are ignored.)  The templates correspond to the
                     45: pattern's constraint alternatives (*note Multi-Alternative::.).  For
                     46: example, if a target machine has a two-address add instruction `addr'
                     47: to add into a register and another `addm' to add a register to memory,
                     48: you might write this pattern:
                     49: 
                     50:      (define_insn "addsi3"
                     51:        [(set (match_operand:SI 0 "general_operand" "=r,m")
                     52:              (plus:SI (match_operand:SI 1 "general_operand" "0,0")
                     53:                       (match_operand:SI 2 "general_operand" "g,r")))]
                     54:        ""
                     55:        "@
                     56:         addr %2,%0
                     57:         addm %2,%0")
                     58: 
                     59:    If the output control string starts with a `*', then it is not an
                     60: output template but rather a piece of C program that should compute a
                     61: template.  It should execute a `return' statement to return the
                     62: template-string you want.  Most such templates use C string literals,
                     63: which require doublequote characters to delimit them.  To include these
                     64: doublequote characters in the string, prefix each one with `\'.
                     65: 
                     66:    The operands may be found in the array `operands', whose C data type
                     67: is `rtx []'.
                     68: 
                     69:    It is very common to select different ways of generating assembler
                     70: code based on whether an immediate operand is within a certain range.
                     71: Be careful when doing this, because the result of `INTVAL' is an
                     72: integer on the host machine.  If the host machine has more bits in an
                     73: `int' than the target machine has in the mode in which the constant
                     74: will be used, then some of the bits you get from `INTVAL' will be
                     75: superfluous.  For proper results, you must carefully disregard the
                     76: values of those bits.
                     77: 
                     78:    It is possible to output an assembler instruction and then go on to
                     79: output or compute more of them, using the subroutine `output_asm_insn'.
                     80: This receives two arguments: a template-string and a vector of
                     81: operands.  The vector may be `operands', or it may be another array of
                     82: `rtx' that you declare locally and initialize yourself.
                     83: 
                     84:    When an insn pattern has multiple alternatives in its constraints,
                     85: often the appearance of the assembler code is determined mostly by
                     86: which alternative was matched.  When this is so, the C code can test
                     87: the variable `which_alternative', which is the ordinal number of the
                     88: alternative that was actually satisfied (0 for the first, 1 for the
                     89: second alternative, etc.).
                     90: 
                     91:    For example, suppose there are two opcodes for storing zero, `clrreg'
                     92: for registers and `clrmem' for memory locations.  Here is how a pattern
                     93: could use `which_alternative' to choose between them:
                     94: 
                     95:      (define_insn ""
                     96:        [(set (match_operand:SI 0 "general_operand" "=r,m")
                     97:              (const_int 0))]
                     98:        ""
                     99:        "*
                    100:        return (which_alternative == 0
                    101:                ? \"clrreg %0\" : \"clrmem %0\");
                    102:        ")
                    103: 
                    104:    The example above, where the assembler code to generate was *solely*
                    105: determined by the alternative, could also have been specified as
                    106: follows, having the output control string start with a `@':
                    107: 
                    108:      (define_insn ""
                    109:        [(set (match_operand:SI 0 "general_operand" "=r,m")
                    110:              (const_int 0))]
                    111:        ""
                    112:        "@
                    113:         clrreg %0
                    114:         clrmem %0")
                    115: 
                    116: 
                    117: File: gcc.info,  Node: Constraints,  Next: Standard Names,  Prev: Output Statement,  Up: Machine Desc
                    118: 
                    119: Operand Constraints
                    120: ===================
                    121: 
                    122:    Each `match_operand' in an instruction pattern can specify a
                    123: constraint for the type of operands allowed.  Constraints can say
                    124: whether an operand may be in a register, and which kinds of register;
                    125: whether the operand can be a memory reference, and which kinds of
                    126: address; whether the operand may be an immediate constant, and which
                    127: possible values it may have.  Constraints can also require two operands
                    128: to match.
                    129: 
                    130: * Menu:
                    131: 
                    132: * Simple Constraints::  Basic use of constraints.
                    133: * Multi-Alternative::   When an insn has two alternative constraint-patterns.
                    134: * Class Preferences::   Constraints guide which hard register to put things in.
                    135: * Modifiers::           More precise control over effects of constraints.
                    136: * Machine Constraints:: Existing constraints for some particular machines.
                    137: * No Constraints::      Describing a clean machine without constraints.
                    138: 
                    139: 
                    140: File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
                    141: 
                    142: Simple Constraints
                    143: ------------------
                    144: 
                    145:    The simplest kind of constraint is a string full of letters, each of
                    146: which describes one kind of operand that is permitted.  Here are the
                    147: letters that are allowed:
                    148: 
                    149: `m'
                    150:      A memory operand is allowed, with any kind of address that the
                    151:      machine supports in general.
                    152: 
                    153: `o'
                    154:      A memory operand is allowed, but only if the address is
                    155:      "offsettable".  This means that adding a small integer (actually,
                    156:      the width in bytes of the operand, as determined by its machine
                    157:      mode) may be added to the address and the result is also a valid
                    158:      memory address.
                    159: 
                    160:      For example, an address which is constant is offsettable; so is an
                    161:      address that is the sum of a register and a constant (as long as a
                    162:      slightly larger constant is also within the range of
                    163:      address-offsets supported by the machine); but an autoincrement or
                    164:      autodecrement address is not offsettable.  More complicated
                    165:      indirect/indexed addresses may or may not be offsettable depending
                    166:      on the other addressing modes that the machine supports.
                    167: 
                    168:      Note that in an output operand which can be matched by another
                    169:      operand, the constraint letter `o' is valid only when accompanied
                    170:      by both `<' (if the target machine has predecrement addressing)
                    171:      and `>' (if the target machine has preincrement addressing).
                    172: 
                    173: `V'
                    174:      A memory operand that is not offsettable.  In other words,
                    175:      anything that would fit the `m' constraint but not the `o'
                    176:      constraint.
                    177: 
                    178: `<'
                    179:      A memory operand with autodecrement addressing (either
                    180:      predecrement or postdecrement) is allowed.
                    181: 
                    182: `>'
                    183:      A memory operand with autoincrement addressing (either
                    184:      preincrement or postincrement) is allowed.
                    185: 
                    186: `r'
                    187:      A register operand is allowed provided that it is in a general
                    188:      register.
                    189: 
                    190: `d', `a', `f', ...
                    191:      Other letters can be defined in machine-dependent fashion to stand
                    192:      for particular classes of registers.  `d', `a' and `f' are defined
                    193:      on the 68000/68020 to stand for data, address and floating point
                    194:      registers.
                    195: 
                    196: `i'
                    197:      An immediate integer operand (one with constant value) is allowed.
                    198:      This includes symbolic constants whose values will be known only at
                    199:      assembly time.
                    200: 
                    201: `n'
                    202:      An immediate integer operand with a known numeric value is allowed.
                    203:      Many systems cannot support assembly-time constants for operands
                    204:      less than a word wide.  Constraints for these operands should use
                    205:      `n' rather than `i'.
                    206: 
                    207: `I', `J', `K', ... `P'
                    208:      Other letters in the range `I' through `P' may be defined in a
                    209:      machine-dependent fashion to permit immediate integer operands with
                    210:      explicit integer values in specified ranges.  For example, on the
                    211:      68000, `I' is defined to stand for the range of values 1 to 8.
                    212:      This is the range permitted as a shift count in the shift
                    213:      instructions.
                    214: 
                    215: `E'
                    216:      An immediate floating operand (expression code `const_double') is
                    217:      allowed, but only if the target floating point format is the same
                    218:      as that of the host machine (on which the compiler is running).
                    219: 
                    220: `F'
                    221:      An immediate floating operand (expression code `const_double') is
                    222:      allowed.
                    223: 
                    224: `G', `H'
                    225:      `G' and `H' may be defined in a machine-dependent fashion to
                    226:      permit immediate floating operands in particular ranges of values.
                    227: 
                    228: `s'
                    229:      An immediate integer operand whose value is not an explicit
                    230:      integer is allowed.
                    231: 
                    232:      This might appear strange; if an insn allows a constant operand
                    233:      with a value not known at compile time, it certainly must allow
                    234:      any known value.  So why use `s' instead of `i'?  Sometimes it
                    235:      allows better code to be generated.
                    236: 
                    237:      For example, on the 68000 in a fullword instruction it is possible
                    238:      to use an immediate operand; but if the immediate value is between
                    239:      -128 and 127, better code results from loading the value into a
                    240:      register and using the register.  This is because the load into
                    241:      the register can be done with a `moveq' instruction.  We arrange
                    242:      for this to happen by defining the letter `K' to mean "any integer
                    243:      outside the range -128 to 127", and then specifying `Ks' in the
                    244:      operand constraints.
                    245: 
                    246: `g'
                    247:      Any register, memory or immediate integer operand is allowed,
                    248:      except for registers that are not general registers.
                    249: 
                    250: `X'
                    251:      Any operand whatsoever is allowed, even if it does not satisfy
                    252:      `general_operand'.  This is normally used in the constraint of a
                    253:      `match_scratch' when certain alternatives will not actually
                    254:      require a scratch register.
                    255: 
                    256: `0', `1', `2', ... `9'
                    257:      An operand that matches the specified operand number is allowed.
                    258:      If a digit is used together with letters within the same
                    259:      alternative, the digit should come last.
                    260: 
                    261:      This is called a "matching constraint" and what it really means is
                    262:      that the assembler has only a single operand that fills two roles
                    263:      considered separate in the RTL insn.  For example, an add insn has
                    264:      two input operands and one output operand in the RTL, but on most
                    265:      CISC machines an add instruction really has only two operands, one
                    266:      of them an input-output operand:
                    267: 
                    268:           addl #35,r12
                    269: 
                    270:      Matching constraints are used in these circumstances.  More
                    271:      precisely, the two operands that match must include one input-only
                    272:      operand and one output-only operand.  Moreover, the digit must be a
                    273:      smaller number than the number of the operand that uses it in the
                    274:      constraint.
                    275: 
                    276:      For operands to match in a particular case usually means that they
                    277:      are identical-looking RTL expressions.  But in a few special cases
                    278:      specific kinds of dissimilarity are allowed.  For example, `*x' as
                    279:      an input operand will match `*x++' as an output operand.  For
                    280:      proper results in such cases, the output template should always
                    281:      use the output-operand's number when printing the operand.
                    282: 
                    283: `p'
                    284:      An operand that is a valid memory address is allowed.  This is for
                    285:      "load address" and "push address" instructions.
                    286: 
                    287:      `p' in the constraint must be accompanied by `address_operand' as
                    288:      the predicate in the `match_operand'.  This predicate interprets
                    289:      the mode specified in the `match_operand' as the mode of the memory
                    290:      reference for which the address would be valid.
                    291: 
                    292: `Q', `R', `S', ... `U'
                    293:      Letters in the range `Q' through `U' may be defined in a
                    294:      machine-dependent fashion to stand for arbitrary operand types.
                    295:      The machine description macro `EXTRA_CONSTRAINT' is passed the
                    296:      operand as its first argument and the constraint letter as its
                    297:      second operand.
                    298: 
                    299:      A typical use for this would be to distinguish certain types of
                    300:      memory references that affect other insn operands.
                    301: 
                    302:      Do not define these constraint letters to accept register
                    303:      references (`reg'); the reload pass does not expect this and would
                    304:      not handle it properly.
                    305: 
                    306:    In order to have valid assembler code, each operand must satisfy its
                    307: constraint.  But a failure to do so does not prevent the pattern from
                    308: applying to an insn.  Instead, it directs the compiler to modify the
                    309: code so that the constraint will be satisfied.  Usually this is done by
                    310: copying an operand into a register.
                    311: 
                    312:    Contrast, therefore, the two instruction patterns that follow:
                    313: 
                    314:      (define_insn ""
                    315:        [(set (match_operand:SI 0 "general_operand" "=r")
                    316:              (plus:SI (match_dup 0)
                    317:                       (match_operand:SI 1 "general_operand" "r")))]
                    318:        ""
                    319:        "...")
                    320: 
                    321: which has two operands, one of which must appear in two places, and
                    322: 
                    323:      (define_insn ""
                    324:        [(set (match_operand:SI 0 "general_operand" "=r")
                    325:              (plus:SI (match_operand:SI 1 "general_operand" "0")
                    326:                       (match_operand:SI 2 "general_operand" "r")))]
                    327:        ""
                    328:        "...")
                    329: 
                    330: which has three operands, two of which are required by a constraint to
                    331: be identical.  If we are considering an insn of the form
                    332: 
                    333:      (insn N PREV NEXT
                    334:        (set (reg:SI 3)
                    335:             (plus:SI (reg:SI 6) (reg:SI 109)))
                    336:        ...)
                    337: 
                    338: the first pattern would not apply at all, because this insn does not
                    339: contain two identical subexpressions in the right place.  The pattern
                    340: would say, "That does not look like an add instruction; try other
                    341: patterns." The second pattern would say, "Yes, that's an add
                    342: instruction, but there is something wrong with it."  It would direct
                    343: the reload pass of the compiler to generate additional insns to make
                    344: the constraint true.  The results might look like this:
                    345: 
                    346:      (insn N2 PREV N
                    347:        (set (reg:SI 3) (reg:SI 6))
                    348:        ...)
                    349:      
                    350:      (insn N N2 NEXT
                    351:        (set (reg:SI 3)
                    352:             (plus:SI (reg:SI 3) (reg:SI 109)))
                    353:        ...)
                    354: 
                    355:    It is up to you to make sure that each operand, in each pattern, has
                    356: constraints that can handle any RTL expression that could be present for
                    357: that operand.  (When multiple alternatives are in use, each pattern
                    358: must, for each possible combination of operand expressions, have at
                    359: least one alternative which can handle that combination of operands.)
                    360: The constraints don't need to *allow* any possible operand--when this is
                    361: the case, they do not constrain--but they must at least point the way to
                    362: reloading any possible operand so that it will fit.
                    363: 
                    364:    * If the constraint accepts whatever operands the predicate permits,
                    365:      there is no problem: reloading is never necessary for this operand.
                    366: 
                    367:      For example, an operand whose constraints permit everything except
                    368:      registers is safe provided its predicate rejects registers.
                    369: 
                    370:      An operand whose predicate accepts only constant values is safe
                    371:      provided its constraints include the letter `i'.  If any possible
                    372:      constant value is accepted, then nothing less than `i' will do; if
                    373:      the predicate is more selective, then the constraints may also be
                    374:      more selective.
                    375: 
                    376:    * Any operand expression can be reloaded by copying it into a
                    377:      register.  So if an operand's constraints allow some kind of
                    378:      register, it is certain to be safe.  It need not permit all
                    379:      classes of registers; the compiler knows how to copy a register
                    380:      into another register of the proper class in order to make an
                    381:      instruction valid.
                    382: 
                    383:    * A nonoffsettable memory reference can be reloaded by copying the
                    384:      address into a register.  So if the constraint uses the letter
                    385:      `o', all memory references are taken care of.
                    386: 
                    387:    * A constant operand can be reloaded by allocating space in memory to
                    388:      hold it as preinitialized data.  Then the memory reference can be
                    389:      used in place of the constant.  So if the constraint uses the
                    390:      letters `o' or `m', constant operands are not a problem.
                    391: 
                    392:    * If the constraint permits a constant and a pseudo register used in
                    393:      an insn was not allocated to a hard register and is equivalent to
                    394:      a constant, the register will be replaced with the constant.  If
                    395:      the predicate does not permit a constant and the insn is
                    396:      re-recognized for some reason, the compiler will crash.  Thus the
                    397:      predicate must always recognize any objects allowed by the
                    398:      constraint.
                    399: 
                    400:    If the operand's predicate can recognize registers, but the
                    401: constraint does not permit them, it can make the compiler crash.  When
                    402: this operand happens to be a register, the reload pass will be stymied,
                    403: because it does not know how to copy a register temporarily into memory.
                    404: 
                    405: 
                    406: File: gcc.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
                    407: 
                    408: Multiple Alternative Constraints
                    409: --------------------------------
                    410: 
                    411:    Sometimes a single instruction has multiple alternative sets of
                    412: possible operands.  For example, on the 68000, a logical-or instruction
                    413: can combine register or an immediate value into memory, or it can
                    414: combine any kind of operand into a register; but it cannot combine one
                    415: memory location into another.
                    416: 
                    417:    These constraints are represented as multiple alternatives.  An
                    418: alternative can be described by a series of letters for each operand.
                    419: The overall constraint for an operand is made from the letters for this
                    420: operand from the first alternative, a comma, the letters for this
                    421: operand from the second alternative, a comma, and so on until the last
                    422: alternative.  Here is how it is done for fullword logical-or on the
                    423: 68000:
                    424: 
                    425:      (define_insn "iorsi3"
                    426:        [(set (match_operand:SI 0 "general_operand" "=m,d")
                    427:              (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
                    428:                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
                    429:        ...)
                    430: 
                    431:    The first alternative has `m' (memory) for operand 0, `0' for
                    432: operand 1 (meaning it must match operand 0), and `dKs' for operand 2.
                    433: The second alternative has `d' (data register) for operand 0, `0' for
                    434: operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
                    435: constraints apply to all the alternatives; their meaning is explained
                    436: in the next section (*note Class Preferences::.).
                    437: 
                    438:    If all the operands fit any one alternative, the instruction is
                    439: valid.  Otherwise, for each alternative, the compiler counts how many
                    440: instructions must be added to copy the operands so that that
                    441: alternative applies.  The alternative requiring the least copying is
                    442: chosen.  If two alternatives need the same amount of copying, the one
                    443: that comes first is chosen.  These choices can be altered with the `?'
                    444: and `!' characters:
                    445: 
                    446: `?'
                    447:      Disparage slightly the alternative that the `?' appears in, as a
                    448:      choice when no alternative applies exactly.  The compiler regards
                    449:      this alternative as one unit more costly for each `?' that appears
                    450:      in it.
                    451: 
                    452: `!'
                    453:      Disparage severely the alternative that the `!' appears in.  This
                    454:      alternative can still be used if it fits without reloading, but if
                    455:      reloading is needed, some other alternative will be used.
                    456: 
                    457:    When an insn pattern has multiple alternatives in its constraints,
                    458: often the appearance of the assembler code is determined mostly by which
                    459: alternative was matched.  When this is so, the C code for writing the
                    460: assembler code can use the variable `which_alternative', which is the
                    461: ordinal number of the alternative that was actually satisfied (0 for
                    462: the first, 1 for the second alternative, etc.).  *Note Output
                    463: Statement::.
                    464: 
                    465: 
                    466: File: gcc.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
                    467: 
                    468: Register Class Preferences
                    469: --------------------------
                    470: 
                    471:    The operand constraints have another function: they enable the
                    472: compiler to decide which kind of hardware register a pseudo register is
                    473: best allocated to.  The compiler examines the constraints that apply to
                    474: the insns that use the pseudo register, looking for the
                    475: machine-dependent letters such as `d' and `a' that specify classes of
                    476: registers.  The pseudo register is put in whichever class gets the most
                    477: "votes".  The constraint letters `g' and `r' also vote: they vote in
                    478: favor of a general register.  The machine description says which
                    479: registers are considered general.
                    480: 
                    481:    Of course, on some machines all registers are equivalent, and no
                    482: register classes are defined.  Then none of this complexity is relevant.
                    483: 
                    484: 
                    485: File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints
                    486: 
                    487: Constraint Modifier Characters
                    488: ------------------------------
                    489: 
                    490: `='
                    491:      Means that this operand is write-only for this instruction: the
                    492:      previous value is discarded and replaced by output data.
                    493: 
                    494: `+'
                    495:      Means that this operand is both read and written by the
                    496:      instruction.
                    497: 
                    498:      When the compiler fixes up the operands to satisfy the constraints,
                    499:      it needs to know which operands are inputs to the instruction and
                    500:      which are outputs from it.  `=' identifies an output; `+'
                    501:      identifies an operand that is both input and output; all other
                    502:      operands are assumed to be input only.
                    503: 
                    504: `&'
                    505:      Means (in a particular alternative) that this operand is written
                    506:      before the instruction is finished using the input operands.
                    507:      Therefore, this operand may not lie in a register that is used as
                    508:      an input operand or as part of any memory address.
                    509: 
                    510:      `&' applies only to the alternative in which it is written.  In
                    511:      constraints with multiple alternatives, sometimes one alternative
                    512:      requires `&' while others do not.  See, for example, the `movdf'
                    513:      insn of the 68000.
                    514: 
                    515:      `&' does not obviate the need to write `='.
                    516: 
                    517: `%'
                    518:      Declares the instruction to be commutative for this operand and the
                    519:      following operand.  This means that the compiler may interchange
                    520:      the two operands if that is the cheapest way to make all operands
                    521:      fit the constraints.  This is often used in patterns for addition
                    522:      instructions that really have only two operands: the result must
                    523:      go in one of the arguments.  Here for example, is how the 68000
                    524:      halfword-add instruction is defined:
                    525: 
                    526:           (define_insn "addhi3"
                    527:             [(set (match_operand:HI 0 "general_operand" "=m,r")
                    528:                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
                    529:                         (match_operand:HI 2 "general_operand" "di,g")))]
                    530:             ...)
                    531: 
                    532: `#'
                    533:      Says that all following characters, up to the next comma, are to be
                    534:      ignored as a constraint.  They are significant only for choosing
                    535:      register preferences.
                    536: 
                    537: `*'
                    538:      Says that the following character should be ignored when choosing
                    539:      register preferences.  `*' has no effect on the meaning of the
                    540:      constraint as a constraint, and no effect on reloading.
                    541: 
                    542:      Here is an example: the 68000 has an instruction to sign-extend a
                    543:      halfword in a data register, and can also sign-extend a value by
                    544:      copying it into an address register.  While either kind of
                    545:      register is acceptable, the constraints on an address-register
                    546:      destination are less strict, so it is best if register allocation
                    547:      makes an address register its goal.  Therefore, `*' is used so
                    548:      that the `d' constraint letter (for data register) is ignored when
                    549:      computing register preferences.
                    550: 
                    551:           (define_insn "extendhisi2"
                    552:             [(set (match_operand:SI 0 "general_operand" "=*d,a")
                    553:                   (sign_extend:SI
                    554:                    (match_operand:HI 1 "general_operand" "0,g")))]
                    555:             ...)
                    556: 
                    557: 
                    558: File: gcc.info,  Node: Machine Constraints,  Next: No Constraints,  Prev: Modifiers,  Up: Constraints
                    559: 
                    560: Constraints for Particular Machines
                    561: -----------------------------------
                    562: 
                    563:    Whenever possible, you should use the general-purpose constraint
                    564: letters in `asm' arguments, since they will convey meaning more readily
                    565: to people reading your code.  Failing that, use the constraint letters
                    566: that usually have very similar meanings across architectures.  The most
                    567: commonly used constraints are `m' and `r' (for memory and
                    568: general-purpose registers respectively; *note Simple Constraints::.),
                    569: and `I', usually the letter indicating the most common
                    570: immediate-constant format.
                    571: 
                    572:    For each machine architecture, the `config/MACHINE.h' file defines
                    573: additional constraints.  These constraints are used by the compiler
                    574: itself for instruction generation, as well as for `asm' statements;
                    575: therefore, some of the constraints are not particularly interesting for
                    576: `asm'.  The constraints are defined through these macros:
                    577: 
                    578: `REG_CLASS_FROM_LETTER'
                    579:      Register class constraints (usually lower case).
                    580: 
                    581: `CONST_OK_FOR_LETTER_P'
                    582:      Immediate constant constraints, for non-floating point constants of
                    583:      word size or smaller precision (usually upper case).
                    584: 
                    585: `CONST_DOUBLE_OK_FOR_LETTER_P'
                    586:      Immediate constant constraints, for all floating point constants
                    587:      and for constants of greater than word size precision (usually
                    588:      upper case).
                    589: 
                    590: `EXTRA_CONSTRAINT'
                    591:      Special cases of registers or memory.  This macro is not required,
                    592:      and is only defined for some machines.
                    593: 
                    594:    Inspecting these macro definitions in the compiler source for your
                    595: machine is the best way to be certain you have the right constraints.
                    596: However, here is a summary of the machine-dependent constraints
                    597: available on some particular machines.
                    598: 
                    599: *AMD 29000 family--`a29k.h'*
                    600:     `l'
                    601:           Local register 0
                    602: 
                    603:     `b'
                    604:           Byte Pointer (`BP') register
                    605: 
                    606:     `q'
                    607:           `Q' register
                    608: 
                    609:     `h'
                    610:           Special purpose register
                    611: 
                    612:     `A'
                    613:           First accumulator register
                    614: 
                    615:     `a'
                    616:           Other accumulator register
                    617: 
                    618:     `f'
                    619:           Floating point register
                    620: 
                    621:     `I'
                    622:           Constant greater than 0, less than 0x100
                    623: 
                    624:     `J'
                    625:           Constant greater than 0, less than 0x10000
                    626: 
                    627:     `K'
                    628:           Constant whose high 24 bits are on (1)
                    629: 
                    630:     `L'
                    631:           16 bit constant whose high 8 bits are on (1)
                    632: 
                    633:     `M'
                    634:           32 bit constant whose high 16 bits are on (1)
                    635: 
                    636:     `N'
                    637:           32 bit negative constant that fits in 8 bits
                    638: 
                    639:     `O'
                    640:           The constant 0x80000000 or, on the 29050, any 32 bit constant
                    641:           whose low 16 bits are 0.
                    642: 
                    643:     `P'
                    644:           16 bit negative constant that fits in 8 bits
                    645: 
                    646:     `G'
                    647:     `H'
                    648:           A floating point constant (in `asm' statements, use the
                    649:           machine independent `E' or `F' instead)
                    650: 
                    651: *IBM RS6000--`rs6000.h'*
                    652:     `b'
                    653:           Address base register
                    654: 
                    655:     `f'
                    656:           Floating point register
                    657: 
                    658:     `h'
                    659:           `MQ', `CTR', or `LINK' register
                    660: 
                    661:     `q'
                    662:           `MQ' register
                    663: 
                    664:     `c'
                    665:           `CTR' register
                    666: 
                    667:     `l'
                    668:           `LINK' register
                    669: 
                    670:     `x'
                    671:           `CR' register (condition register) number 0
                    672: 
                    673:     `y'
                    674:           `CR' register (condition register)
                    675: 
                    676:     `I'
                    677:           Signed 16 bit constant
                    678: 
                    679:     `J'
                    680:           Constant whose low 16 bits are 0
                    681: 
                    682:     `K'
                    683:           Constant whose high 16 bits are 0
                    684: 
                    685:     `L'
                    686:           Constant suitable as a mask operand
                    687: 
                    688:     `M'
                    689:           Constant larger than 31
                    690: 
                    691:     `N'
                    692:           Exact power of 2
                    693: 
                    694:     `O'
                    695:           Zero
                    696: 
                    697:     `P'
                    698:           Constant whose negation is a signed 16 bit constant
                    699: 
                    700:     `G'
                    701:           Floating point constant that can be loaded into a register
                    702:           with one instruction per word
                    703: 
                    704:     `Q'
                    705:           Memory operand that is an offset from a register (`m' is
                    706:           preferable for `asm' statements)
                    707: 
                    708: *Intel 386--`i386.h'*
                    709:     `q'
                    710:           `a', `b', `c', or `d' register
                    711: 
                    712:     `f'
                    713:           Floating point register
                    714: 
                    715:     `t'
                    716:           First (top of stack) floating point register
                    717: 
                    718:     `u'
                    719:           Second floating point register
                    720: 
                    721:     `a'
                    722:           `a' register
                    723: 
                    724:     `b'
                    725:           `b' register
                    726: 
                    727:     `c'
                    728:           `c' register
                    729: 
                    730:     `d'
                    731:           `d' register
                    732: 
                    733:     `D'
                    734:           `di' register
                    735: 
                    736:     `S'
                    737:           `si' register
                    738: 
                    739:     `I'
                    740:           Constant in range 0 to 31 (for 32 bit shifts)
                    741: 
                    742:     `J'
                    743:           Constant in range 0 to 63 (for 64 bit shifts)
                    744: 
                    745:     `K'
                    746:           `0xff'
                    747: 
                    748:     `L'
                    749:           `0xffff'
                    750: 
                    751:     `M'
                    752:           0, 1, 2, or 3 (shifts for `lea' instruction)
                    753: 
                    754:     `G'
                    755:           Standard 80387 floating point constant
                    756: 
                    757: *Intel 960--`i960.h'*
                    758:     `f'
                    759:           Floating point register (`fp0' to `fp3')
                    760: 
                    761:     `l'
                    762:           Local register (`r0' to `r15')
                    763: 
                    764:     `b'
                    765:           Global register (`g0' to `g15')
                    766: 
                    767:     `d'
                    768:           Any local or global register
                    769: 
                    770:     `I'
                    771:           Integers from 0 to 31
                    772: 
                    773:     `J'
                    774:           0
                    775: 
                    776:     `K'
                    777:           Integers from -31 to 0
                    778: 
                    779:     `G'
                    780:           Floating point 0
                    781: 
                    782:     `H'
                    783:           Floating point 1
                    784: 
                    785: *MIPS--`mips.h'*
                    786:     `d'
                    787:           General-purpose integer register
                    788: 
                    789:     `f'
                    790:           Floating-point register (if available)
                    791: 
                    792:     `h'
                    793:           `Hi' register
                    794: 
                    795:     `l'
                    796:           `Lo' register
                    797: 
                    798:     `x'
                    799:           `Hi' or `Lo' register
                    800: 
                    801:     `y'
                    802:           General-purpose integer register
                    803: 
                    804:     `z'
                    805:           Floating-point status register
                    806: 
                    807:     `I'
                    808:           Signed 16 bit constant (for arithmetic instructions)
                    809: 
                    810:     `J'
                    811:           Zero
                    812: 
                    813:     `K'
                    814:           Zero-extended 16-bit constant (for logic instructions)
                    815: 
                    816:     `L'
                    817:           Constant with low 16 bits zero (can be loaded with `lui')
                    818: 
                    819:     `M'
                    820:           32 bit constant which requires two instructions to load (a
                    821:           constant which is not `I', `K', or `L')
                    822: 
                    823:     `N'
                    824:           Negative 16 bit constant
                    825: 
                    826:     `O'
                    827:           Exact power of two
                    828: 
                    829:     `P'
                    830:           Positive 16 bit constant
                    831: 
                    832:     `G'
                    833:           Floating point zero
                    834: 
                    835:     `Q'
                    836:           Memory reference that can be loaded with more than one
                    837:           instruction (`m' is preferable for `asm' statements)
                    838: 
                    839:     `R'
                    840:           Memory reference that can be loaded with one instruction (`m'
                    841:           is preferable for `asm' statements)
                    842: 
                    843:     `S'
                    844:           Memory reference in external OSF/rose PIC format (`m' is
                    845:           preferable for `asm' statements)
                    846: 
                    847: *Motorola 680x0--`m68k.h'*
                    848:     `a'
                    849:           Address register
                    850: 
                    851:     `d'
                    852:           Data register
                    853: 
                    854:     `f'
                    855:           68881 floating-point register, if available
                    856: 
                    857:     `x'
                    858:           Sun FPA (floating-point) register, if available
                    859: 
                    860:     `y'
                    861:           First 16 Sun FPA registers, if available
                    862: 
                    863:     `I'
                    864:           Integer in the range 1 to 8
                    865: 
                    866:     `J'
                    867:           16 bit signed number
                    868: 
                    869:     `K'
                    870:           Signed number whose magnitude is greater than 0x80
                    871: 
                    872:     `L'
                    873:           Integer in the range -8 to -1
                    874: 
                    875:     `G'
                    876:           Floating point constant that is not a 68881 constant
                    877: 
                    878:     `H'
                    879:           Floating point constant that can be used by Sun FPA
                    880: 
                    881: *SPARC--`sparc.h'*
                    882:     `f'
                    883:           Floating-point register
                    884: 
                    885:     `I'
                    886:           Signed 13 bit constant
                    887: 
                    888:     `J'
                    889:           Zero
                    890: 
                    891:     `K'
                    892:           32 bit constant with the low 12 bits clear (a constant that
                    893:           can be loaded with the `sethi' instruction)
                    894: 
                    895:     `G'
                    896:           Floating-point zero
                    897: 
                    898:     `H'
                    899:           Signed 13 bit constant, sign-extended to 32 or 64 bits
                    900: 
                    901:     `Q'
                    902:           Memory reference that can be loaded with one instruction
                    903:           (`m' is more appropriate for `asm' statements)
                    904: 
                    905:     `S'
                    906:           Constant, or memory address
                    907: 
                    908:     `T'
                    909:           Memory address aligned to an 8-byte boundary
                    910: 
                    911:     `U'
                    912:           Even register
                    913: 
                    914: 
                    915: File: gcc.info,  Node: No Constraints,  Prev: Machine Constraints,  Up: Constraints
                    916: 
                    917: Not Using Constraints
                    918: ---------------------
                    919: 
                    920:    Some machines are so clean that operand constraints are not
                    921: required.  For example, on the Vax, an operand valid in one context is
                    922: valid in any other context.  On such a machine, every operand
                    923: constraint would be `g', excepting only operands of "load address"
                    924: instructions which are written as if they referred to a memory
                    925: location's contents but actual refer to its address.  They would have
                    926: constraint `p'.
                    927: 
                    928:    For such machines, instead of writing `g' and `p' for all the
                    929: constraints, you can choose to write a description with empty
                    930: constraints.  Then you write `""' for the constraint in every
                    931: `match_operand'.  Address operands are identified by writing an
                    932: `address' expression around the `match_operand', not by their
                    933: constraints.
                    934: 
                    935:    When the machine description has just empty constraints, certain
                    936: parts of compilation are skipped, making the compiler faster.  However,
                    937: few machines actually do not need constraints; all machine descriptions
                    938: now in existence use constraints.
                    939: 

unix.superglobalmegacorp.com

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