Annotation of gcc/gcc.info-5, revision 1.1.1.1

1.1       root        1: Info file gcc.info, produced by Makeinfo, -*- Text -*- from input
                      2: file gcc.texinfo.
                      3: 
                      4: This file documents the use and the internals of the GNU compiler.
                      5: 
                      6: Copyright (C) 1988 Free Software Foundation, Inc.
                      7: 
                      8: Permission is granted to make and distribute verbatim copies of this
                      9: manual provided the copyright notice and this permission notice are
                     10: preserved on all copies.
                     11: 
                     12: Permission is granted to copy and distribute modified versions of
                     13: this manual under the conditions for verbatim copying, provided also
                     14: that the section entitled ``GNU CC General Public License'' is
                     15: included exactly as in the original, and provided that the entire
                     16: resulting derived work is distributed under the terms of a permission
                     17: notice identical to this one.
                     18: 
                     19: Permission is granted to copy and distribute translations of this
                     20: manual into another language, under the above conditions for modified
                     21: versions, except that the section entitled ``GNU CC General Public
                     22: License'' and this permission notice may be included in translations
                     23: approved by the Free Software Foundation instead of in the original
                     24: English.
                     25: 
                     26:  
                     27: 
                     28: File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Prev: Constraints,  Up: Constraints
                     29: 
                     30: Simple Constraints
                     31: ------------------
                     32: 
                     33: The simplest kind of constraint is a string full of letters, each of
                     34: which describes one kind of operand that is permitted.  Here are the
                     35: letters that are allowed:
                     36: 
                     37: `m'
                     38:      A memory operand is allowed, with any kind of address that the
                     39:      machine supports in general.
                     40: 
                     41: `o'
                     42:      A memory operand is allowed, but only if the address is
                     43:      "offsetable".  This means that adding a small integer (actually,
                     44:      the width in bytes of the operand, as determined by its machine
                     45:      mode) may be added to the address and the result is also a valid
                     46:      memory address.
                     47: 
                     48:      For example, an address which is constant is offsetable; so is
                     49:      an address that is the sum of a register and a constant (as long
                     50:      as a slightly larger constant is also within the range of
                     51:      address-offsets supported by the machine); but an autoincrement
                     52:      or autodecrement address is not offsetable.  More complicated
                     53:      indirect/indexed addresses may or may not be offsetable
                     54:      depending on the other addressing modes that the machine supports.
                     55: 
                     56:      Note that in an output operand which can be matched by another
                     57:      operand, the constraint letter `o' is valid only when
                     58:      accompanied by both `<' (if the target machine has predecrement
                     59:      addressing) and `>' (if the target machine has preincrement
                     60:      addressing).
                     61: 
                     62:      When the constraint letter `o' is used, the reload pass may
                     63:      generate instructions which copy a nonoffsetable address into an
                     64:      index register.  The idea is that the register can be used as a
                     65:      replacement offsetable address.  But this method requires that
                     66:      there be patterns to copy any kind of address into a register. 
                     67:      Auto-increment and auto-decrement addresses are an exception;
                     68:      there need not be an instruction that can copy such an address
                     69:      into a register, because reload handles these cases specially.
                     70: 
                     71:      Most older machine designs have ``load address'' instructions
                     72:      which do just what is needed here.  Some RISC machines do not
                     73:      advertise such instructions, but the possible addresses on these
                     74:      machines are very limited, so it is easy to fake them.
                     75: 
                     76: `<'
                     77:      A memory operand with autodecrement addressing (either
                     78:      predecrement or postdecrement) is allowed.
                     79: 
                     80: `>'
                     81:      A memory operand with autoincrement addressing (either
                     82:      preincrement or postincrement) is allowed.
                     83: 
                     84: `r'
                     85:      A register operand is allowed provided that it is in a general
                     86:      register.
                     87: 
                     88: `d', `a', `f', ...
                     89:       Other letters can be defined in machine-dependent fashion to
                     90:      stand for particular classes of registers.  `d', `a' and `f' are
                     91:      defined on the 68000/68020 to stand for data, address and
                     92:      floating point registers.
                     93: 
                     94: `i'
                     95:      An immediate integer operand (one with constant value) is allowed.
                     96:      This includes symbolic constants whose values will be known only
                     97:      at assembly time.
                     98: 
                     99: `n'
                    100:      An immediate integer operand with a known numeric value is
                    101:      allowed.  Many systems cannot support assembly-time constants
                    102:      for operands less than a word wide.  Constraints for these
                    103:      operands should use `n' rather than `i'.
                    104: 
                    105: `I', `J', `K', ...
                    106:       Other letters in the range `I' through `M' may be defined in a
                    107:      machine-dependent fashion to permit immediate integer operands
                    108:      with explicit integer values in specified ranges.  For example,
                    109:      on the 68000, `I' is defined to stand for the range of values 1
                    110:      to 8.  This is the range permitted as a shift count in the shift
                    111:      instructions.
                    112: 
                    113: `F'
                    114:      An immediate floating operand (expression code `const_double')
                    115:      is allowed.
                    116: 
                    117: `G', `H'
                    118:      `G' and `H' may be defined in a machine-dependent fashion to
                    119:      permit immediate floating operands in particular ranges of values.
                    120: 
                    121: `s'
                    122:      An immediate integer operand whose value is not an explicit
                    123:      integer is allowed.
                    124: 
                    125:      This might appear strange; if an insn allows a constant operand
                    126:      with a value not known at compile time, it certainly must allow
                    127:      any known value.  So why use `s' instead of `i'?  Sometimes it
                    128:      allows better code to be generated.
                    129: 
                    130:      For example, on the 68000 in a fullword instruction it is
                    131:      possible to use an immediate operand; but if the immediate value
                    132:      is between -32 and 31, better code results from loading the
                    133:      value into a register and using the register.  This is because
                    134:      the load into the register can be done with a `moveq'
                    135:      instruction.  We arrange for this to happen by defining the
                    136:      letter `K' to mean ``any integer outside the range -32 to 31'',
                    137:      and then specifying `Ks' in the operand constraints.
                    138: 
                    139: `g'
                    140:      Any register, memory or immediate integer operand is allowed,
                    141:      except for registers that are not general registers.
                    142: 
                    143: `N' (a digit)
                    144:      An operand that matches operand number N is allowed.  If a digit
                    145:      is used together with letters, the digit should come last.
                    146: 
                    147:      This is called a "matching constraint" and what it really means
                    148:      is that the assembler has only a single operand that fills two
                    149:      roles considered separate in the RTL insn.  For example, an add
                    150:      insn has two input operands and one output operand in the RTL,
                    151:      but on most machines an add instruction really has only two
                    152:      operands, one of them an input-output operand.
                    153: 
                    154:      Matching constraints work only in circumstances like that add
                    155:      insn.  More precisely, the matching constraint must appear in an
                    156:      input-only operand and the operand that it matches must be an
                    157:      output-only operand with a lower number.
                    158: 
                    159:      For operands to match in a particular case usually means that
                    160:      they are identical-looking RTL expressions.  But in a few
                    161:      special cases specific kinds of dissimilarity are allowed.  For
                    162:      example, `*x' as an input operand will match `*x++' as an output
                    163:      operand.  For proper results in such cases, the output template
                    164:      should always use the output-operand's number when printing the
                    165:      operand.
                    166: 
                    167: `p'
                    168:      An operand that is a valid memory address is allowed.  This is
                    169:      for ``load address'' and ``push address'' instructions.
                    170: 
                    171:      If `p' is used in the constraint, the test-function in the
                    172:      `match_operand' must be `address_operand'.
                    173: 
                    174: In order to have valid assembler code, each operand must satisfy its
                    175: constraint.  But a failure to do so does not prevent the pattern from
                    176: applying to an insn.  Instead, it directs the compiler to modify the
                    177: code so that the constraint will be satisfied.  Usually this is done
                    178: by copying an operand into a register.
                    179: 
                    180: Contrast, therefore, the two instruction patterns that follow:
                    181: 
                    182:      (define_insn ""
                    183:        [(set (match_operand:SI 0 "general_operand" "r")
                    184:              (plus:SI (match_dup 0)
                    185:                       (match_operand:SI 1 "general_operand" "r")))]
                    186:        ""
                    187:        "...")
                    188: 
                    189: which has two operands, one of which must appear in two places, and
                    190: 
                    191:      (define_insn ""
                    192:        [(set (match_operand:SI 0 "general_operand" "r")
                    193:              (plus:SI (match_operand:SI 1 "general_operand" "0")
                    194:                       (match_operand:SI 2 "general_operand" "r")))]
                    195:        ""
                    196:        "...")
                    197: 
                    198: which has three operands, two of which are required by a constraint
                    199: to be identical.  If we are considering an insn of the form
                    200: 
                    201:      (insn N PREV NEXT
                    202:        (set (reg:SI 3)
                    203:             (plus:SI (reg:SI 6) (reg:SI 109)))
                    204:        ...)
                    205: 
                    206: the first pattern would not apply at all, because this insn does not
                    207: contain two identical subexpressions in the right place.  The pattern
                    208: would say, ``That does not look like an add instruction; try other
                    209: patterns.'' The second pattern would say, ``Yes, that's an add
                    210: instruction, but there is something wrong with it.''  It would direct
                    211: the reload pass of the compiler to generate additional insns to make
                    212: the constraint true.  The results might look like this:
                    213: 
                    214:      (insn N2 PREV N
                    215:        (set (reg:SI 3) (reg:SI 6))
                    216:        ...)
                    217:      
                    218:      (insn N N2 NEXT
                    219:        (set (reg:SI 3)
                    220:             (plus:SI (reg:SI 3) (reg:SI 109)))
                    221:        ...)
                    222: 
                    223: It is up to you to make sure that each operand, in each pattern, has
                    224: constraints that can handle any RTL expression that could be present
                    225: for that operand.  (When multiple alternatives are in use, each
                    226: pattern must, for each possible combination of operand expressions,
                    227: have at least one alternative which can handle that combination of
                    228: operands.)  The constraints don't need to *allow* any possible
                    229: operand--when this is the case, they do not constrain--but they must
                    230: at least point the way to reloading any possible operand so that it
                    231: will fit.
                    232: 
                    233:    * If the constraint accepts whatever operands the predicate
                    234:      permits, there is no problem: reloading is never necessary for
                    235:      this operand.
                    236: 
                    237:      For example, an operand whose constraints permit everything
                    238:      except registers is safe provided its predicate rejects registers.
                    239: 
                    240:      An operand whose predicate accepts only constant values is safe
                    241:      provided its constraints include the letter `i'.  If any
                    242:      possible constant value is accepted, then nothing less than `i'
                    243:      will do; if the predicate is more selective, than the
                    244:      constraints may also be more selective.
                    245: 
                    246:    * Any operand expression can be reloaded by copying it into a
                    247:      register.  So if an operand's constraints allow some kind of
                    248:      register, it is certain to be safe.  It need not permit all
                    249:      classes of registers; the compiler knows how to copy a register
                    250:      into another register of the proper class in order to make an
                    251:      instruction valid.
                    252: 
                    253:    * A nonoffsetable memory reference can be reloaded by copying the
                    254:      address into a register.  So if the constraint uses the letter
                    255:      `o', all memory references are taken care of.
                    256: 
                    257:    * A constant operand can be reloaded by storing it in memory; it
                    258:      then becomes an offsetable memory reference.  So if the
                    259:      constraint uses the letters `o' or `m', constant operands are
                    260:      not a problem.
                    261: 
                    262: If the operand's predicate can recognize registers, but the
                    263: constraint does not permit them, it can make the compiler crash. 
                    264: When this operand happens to be a register, the reload pass will be
                    265: stymied, because it does not know how to copy a register temporarily
                    266: into memory.
                    267: 
                    268: 
                    269: 
                    270: File: gcc.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
                    271: 
                    272: Multiple Alternative Constraints
                    273: --------------------------------
                    274: 
                    275: Sometimes a single instruction has multiple alternative sets of
                    276: possible operands.  For example, on the 68000, a logical-or
                    277: instruction can combine register or an immediate value into memory,
                    278: or it can combine any kind of operand into a register; but it cannot
                    279: combine one memory location into another.
                    280: 
                    281: These constraints are represented as multiple alternatives.  An
                    282: alternative can be described by a series of letters for each operand.
                    283: The overall constraint for an operand is made from the letters for
                    284: this operand from the first alternative, a comma, the letters for
                    285: this operand from the second alternative, a comma, and so on until
                    286: the last alternative.  Here is how it is done for fullword logical-or
                    287: on the 68000:
                    288: 
                    289:      (define_insn "iorsi3"
                    290:        [(set (match_operand:SI 0 "general_operand" "=%m,d")
                    291:              (ior:SI (match_operand:SI 1 "general_operand" "0,0")
                    292:                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
                    293:        ...)
                    294: 
                    295: The first alternative has `m' (memory) for operand 0, `0' for operand
                    296: 1 (meaning it must match operand 0), and `dKs' for operand 2.  The
                    297: second alternative has `d' (data register) for operand 0, `0' for
                    298: operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
                    299: constraint for operand 0 are not part of any alternative; their
                    300: meaning is explained in the next section.
                    301: 
                    302: If all the operands fit any one alternative, the instruction is valid.
                    303: Otherwise, for each alternative, the compiler counts how many
                    304: instructions must be added to copy the operands so that that
                    305: alternative applies.  The alternative requiring the least copying is
                    306: chosen.  If two alternatives need the same amount of copying, the one
                    307: that comes first is chosen.  These choices can be altered with the
                    308: `?' and `!' characters:
                    309: 
                    310: `?'
                    311:      Disparage slightly the alternative that the `?' appears in, as a
                    312:      choice when no alternative applies exactly.  The compiler
                    313:      regards this alternative as one unit more costly for each `?'
                    314:      that appears in it.
                    315: 
                    316: `!'
                    317:      Disparage severely the alternative that the `!' appears in. 
                    318:      When operands must be copied into registers, the compiler will
                    319:      never choose this alternative as the one to strive for.
                    320: 
                    321: When an insn pattern has multiple alternatives in its constraints,
                    322: often the appearance of the assembler code determined mostly by which
                    323: alternative was matched.  When this is so, the C code for writing the
                    324: assembler code can use the variable `which_alternative', which is the
                    325: ordinal number of the alternative that was actually satisfied (0 for
                    326: the first, 1 for the second alternative, etc.).  For example:
                    327: 
                    328:      (define_insn ""
                    329:        [(set (match_operand:SI 0 "general_operand" "r,m")
                    330:              (const_int 0))]
                    331:        ""
                    332:        "*
                    333:        return (which_alternative == 0
                    334:                ? \"clrreg %0\" : \"clrmem %0\");
                    335:        ")
                    336: 
                    337: 
                    338: 
                    339: File: gcc.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
                    340: 
                    341: Register Class Preferences
                    342: --------------------------
                    343: 
                    344: The operand constraints have another function: they enable the
                    345: compiler to decide which kind of hardware register a pseudo register
                    346: is best allocated to.  The compiler examines the constraints that
                    347: apply to the insns that use the pseudo register, looking for the
                    348: machine-dependent letters such as `d' and `a' that specify classes of
                    349: registers.  The pseudo register is put in whichever class gets the
                    350: most ``votes''.  The constraint letters `g' and `r' also vote: they
                    351: vote in favor of a general register.  The machine description says
                    352: which registers are considered general.
                    353: 
                    354: Of course, on some machines all registers are equivalent, and no
                    355: register classes are defined.  Then none of this complexity is
                    356: relevant.
                    357: 
                    358: 
                    359: 
                    360: File: gcc.info,  Node: Modifiers,  Next: No Constraints,  Prev: Class Preferences,  Up: Constraints
                    361: 
                    362: Constraint Modifier Characters
                    363: ------------------------------
                    364: 
                    365: `='
                    366:      Means that this operand is write-only for this instruction: the
                    367:      previous value is discarded and replaced by output data.
                    368: 
                    369: `+'
                    370:      Means that this operand is both read and written by the
                    371:      instruction.
                    372: 
                    373:      When the compiler fixes up the operands to satisfy the
                    374:      constraints, it needs to know which operands are inputs to the
                    375:      instruction and which are outputs from it.  `=' identifies an
                    376:      output; `+' identifies an operand that is both input and output;
                    377:      all other operands are assumed to be input only.
                    378: 
                    379: `&'
                    380:      Means (in a particular alternative) that this operand is written
                    381:      before the instruction is finished using the input operands. 
                    382:      Therefore, this operand may not lie in a register that is used
                    383:      as an input operand or as part of any memory address.
                    384: 
                    385:      `&' applies only to the alternative in which it is written.  In
                    386:      constraints with multiple alternatives, sometimes one
                    387:      alternative requires `&' while others do not.  See, for example,
                    388:      the `movdf' insn of the 68000.
                    389: 
                    390:      `&' does not obviate the need to write `='.
                    391: 
                    392: `%'
                    393:      Declares the instruction to be commutative for this operand and
                    394:      the following operand.  This means that the compiler may
                    395:      interchange the two operands if that is the cheapest way to make
                    396:      all operands fit the constraints.  This is often used in
                    397:      patterns for addition instructions that really have only two
                    398:      operands: the result must go in one of the arguments.  Here for
                    399:      example, is how the 68000 halfword-add instruction is defined:
                    400: 
                    401:           (define_insn "addhi3"
                    402:             [(set (match_operand:HI 0 "general_operand" "=m,r")
                    403:                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
                    404:                         (match_operand:HI 2 "general_operand" "di,g")))]
                    405:             ...)
                    406: 
                    407:      Note that in previous versions of GNU CC the `%' constraint
                    408:      modifier always applied to operands 1 and 2 regardless of which
                    409:      operand it was written in.  The usual custom was to write it in
                    410:      operand 0.  Now it must be in operand 1 if the operands to be
                    411:      exchanged are 1 and 2.
                    412: 
                    413: `#'
                    414:      Says that all following characters, up to the next comma, are to
                    415:      be ignored as a constraint.  They are significant only for
                    416:      choosing register preferences.
                    417: 
                    418: `*'
                    419:      Says that the following character should be ignored when
                    420:      choosing register preferences.  `*' has no effect on the meaning
                    421:      of the constraint as a constraint.
                    422: 
                    423:      Here is an example: the 68000 has an instruction to sign-extend
                    424:      a halfword in a data register, and can also sign-extend a value
                    425:      by copying it into an address register.  While either kind of
                    426:      register is acceptable, the constraints on an address-register
                    427:      destination are less strict, so it is best if register
                    428:      allocation makes an address register its goal.  Therefore, `*'
                    429:      is used so that the `d' constraint letter (for data register) is
                    430:      ignored when computing register preferences.
                    431: 
                    432:           (define_insn "extendhisi2"
                    433:             [(set (match_operand:SI 0 "general_operand" "=*d,a")
                    434:                   (sign_extend:SI
                    435:                    (match_operand:HI 1 "general_operand" "0,g")))]
                    436:             ...)
                    437: 
                    438: 
                    439: 
                    440: File: gcc.info,  Node: No Constraints,  Prev: Modifiers,  Up: Constraints
                    441: 
                    442: Not Using Constraints
                    443: ---------------------
                    444: 
                    445: Some machines are so clean that operand constraints are not required.
                    446: For example, on the Vax, an operand valid in one context is valid in
                    447: any other context.  On such a machine, every operand constraint would
                    448: be `g', excepting only operands of ``load address'' instructions
                    449: which are written as if they referred to a memory location's contents
                    450: but actual refer to its address.  They would have constraint `p'.
                    451: 
                    452: For such machines, instead of writing `g' and `p' for all the
                    453: constraints, you can choose to write a description with empty
                    454: constraints.  Then you write `""' for the constraint in every
                    455: `match_operand'.  Address operands are identified by writing an
                    456: `address' expression around the `match_operand', not by their
                    457: constraints.
                    458: 
                    459: When the machine description has just empty constraints, certain
                    460: parts of compilation are skipped, making the compiler faster.
                    461: 
                    462: 
                    463: 
                    464: File: gcc.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
                    465: 
                    466: Standard Names for Patterns Used in Generation
                    467: ==============================================
                    468: 
                    469: Here is a table of the instruction names that are meaningful in the
                    470: RTL generation pass of the compiler.  Giving one of these names to an
                    471: instruction pattern tells the RTL generation pass that it can use the
                    472: pattern in to accomplish a certain task.
                    473: 
                    474: `movM'
                    475:      Here M is a two-letter machine mode name, in lower case.  This
                    476:      instruction pattern moves data with that machine mode from
                    477:      operand 1 to operand 0.  For example, `movsi' moves full-word
                    478:      data.
                    479: 
                    480:      If operand 0 is a `subreg' with mode M of a register whose
                    481:      natural mode is wider than M, the effect of this instruction is
                    482:      to store the specified value in the part of the register that
                    483:      corresponds to mode M.  The effect on the rest of the register
                    484:      is undefined.
                    485: 
                    486:      This class of patterns is special in several ways.  First of
                    487:      all, each of these names *must* be defined, because there is no
                    488:      other way to copy a datum from one place to another.
                    489: 
                    490:      Second, these patterns are not used solely in the RTL generation
                    491:      pass.  Even the reload pass can generate move insns to copy
                    492:      values from stack slots into temporary registers.  When it does
                    493:      so, one of the operands is a hard register and the other is an
                    494:      operand that can have a reload.
                    495: 
                    496:      Therefore, when given such a pair of operands, the pattern must
                    497:      generate RTL which needs no temporary registers--no registers
                    498:      other than the operands.  For example, if you support the
                    499:      pattern with a `define_expand', then in such a case you mustn't
                    500:      call `force_reg' or any other such function which might generate
                    501:      new pseudo registers.
                    502: 
                    503:      This requirement exists even for subword modes on a RISC machine
                    504:      where fetching those modes from memory normally requires several
                    505:      insns and some temporary registers.  Look in `spur.md' to see
                    506:      how the requirement is satisfied.
                    507: 
                    508:      The variety of operands that have reloads depends on the rest of
                    509:      the machine description, but typically on a RISC machine these
                    510:      can only be pseudo registers that did not get hard registers,
                    511:      while on other machines explicit memory references will get
                    512:      optional reloads.
                    513: 
                    514:      In addition, the constraints must allow any hard register to be
                    515:      moved to any other hard register (provided that
                    516:      `HARD_REGNO_MODE_OK' permits mode M in each of the registers).
                    517: 
                    518: `movstrictM'
                    519:      Like `movM' except that if operand 0 is a `subreg' with mode M
                    520:      of a register whose natural mode is wider, the `movstrictM'
                    521:      instruction is guaranteed not to alter any of the register
                    522:      except the part which belongs to mode M.
                    523: 
                    524: `addM3'
                    525:      Add operand 2 and operand 1, storing the result in operand 0. 
                    526:      All operands must have mode M.  This can be used even on
                    527:      two-address machines, by means of constraints requiring operands
                    528:      1 and 0 to be the same location.
                    529: 
                    530: `subM3', `mulM3', `umulM3', `divM3', `udivM3', `modM3', `umodM3', `andM3', `iorM3', `xorM3'
                    531:      Similar, for other arithmetic operations.
                    532: 
                    533:      There are special considerations for register classes for
                    534:      logical-and instructions, affecting also the macro
                    535:      `PREFERRED_RELOAD_CLASS'.  They apply not only to the patterns
                    536:      with these standard names, but to any patterns that will match
                    537:      such an instruction.  *Note Register Classes::.
                    538: 
                    539: `mulhisi3'
                    540:      Multiply operands 1 and 2, which have mode `HImode', and store a
                    541:      `SImode' product in operand 0.
                    542: 
                    543: `mulqihi3', `mulsidi3'
                    544:      Similar widening-multiplication instructions of other widths.
                    545: 
                    546: `umulqihi3', `umulhisi3', `umulsidi3'
                    547:      Similar widening-multiplication instructions that do unsigned
                    548:      multiplication.
                    549: 
                    550: `divmodM4'
                    551:      Signed division that produces both a quotient and a remainder. 
                    552:      Operand 1 is divided by operand 2 to produce a quotient stored
                    553:      in operand 0 and a remainder stored in operand 3.
                    554: 
                    555: `udivmodM4'
                    556:      Similar, but does unsigned division.
                    557: 
                    558: `divmodMN4'
                    559:      Like `divmodM4' except that only the dividend has mode M; the
                    560:      divisor, quotient and remainder have mode N.  For example, the
                    561:      Vax has a `divmoddisi4' instruction (but it is omitted from the
                    562:      machine description, because it is so slow that it is faster to
                    563:      compute remainders by the circumlocution that the compiler will
                    564:      use if this instruction is not available).
                    565: 
                    566: `ashlM3'
                    567:      Arithmetic-shift operand 1 left by a number of bits specified by
                    568:      operand 2, and store the result in operand 0.  Operand 2 has
                    569:      mode `SImode', not mode M.
                    570: 
                    571: `ashrM3', `lshlM3', `lshrM3', `rotlM3', `rotrM3'
                    572:      Other shift and rotate instructions.
                    573: 
                    574:      Logical and arithmetic left shift are the same.  Machines that
                    575:      do not allow negative shift counts often have only one
                    576:      instruction for shifting left.  On such machines, you should
                    577:      define a pattern named `ashlM3' and leave `lshlM3' undefined.
                    578: 
                    579:      There are special considerations for register classes for shift
                    580:      instructions, affecting also the macro `PREFERRED_RELOAD_CLASS'.
                    581:      They apply not only to the patterns with these standard names,
                    582:      but to any patterns that will match such an instruction.  *Note
                    583:      Register Classes::.
                    584: 
                    585: `negM2'
                    586:      Negate operand 1 and store the result in operand 0.
                    587: 
                    588: `absM2'
                    589:      Store the absolute value of operand 1 into operand 0.
                    590: 
                    591: `sqrtM2'
                    592:      Store the square root of operand 1 into operand 0.
                    593: 
                    594: `ffsM2'
                    595:      Store into operand 0 one plus the index of the least significant
                    596:      1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
                    597:      mode of operand 0; operand 1's mode is specified by the
                    598:      instruction pattern, and the compiler will convert the operand
                    599:      to that mode before generating the instruction.
                    600: 
                    601: `one_cmplM2'
                    602:      Store the bitwise-complement of operand 1 into operand 0.
                    603: 
                    604: `cmpM'
                    605:      Compare operand 0 and operand 1, and set the condition codes. 
                    606:      The RTL pattern should look like this:
                    607: 
                    608:           (set (cc0) (minus (match_operand:M 0 ...)
                    609:                             (match_operand:M 1 ...)))
                    610: 
                    611:      Each such definition in the machine description, for integer
                    612:      mode M, must have a corresponding `tstM' pattern, because
                    613:      optimization can simplify the compare into a test when operand 1
                    614:      is zero.
                    615: 
                    616: `tstM'
                    617:      Compare operand 0 against zero, and set the condition codes. 
                    618:      The RTL pattern should look like this:
                    619: 
                    620:           (set (cc0) (match_operand:M 0 ...))
                    621: 
                    622: `movstrM'
                    623:      Block move instruction.  The addresses of the destination and
                    624:      source strings are the first two operands, and both are in mode
                    625:      `Pmode'.  The number of bytes to move is the third operand, in
                    626:      mode M.
                    627: 
                    628: `cmpstrM'
                    629:      Block compare instruction, with operands like `movstrM' except
                    630:      that the two memory blocks are compared byte by byte in
                    631:      lexicographic order.  The effect of the instruction is to set
                    632:      the condition codes.
                    633: 
                    634: `floatMN2'
                    635:      Convert operand 1 (valid for fixed point mode M) to floating
                    636:      point mode N and store in operand 0 (which has mode N).
                    637: 
                    638: `fixMN2'
                    639:      Convert operand 1 (valid for floating point mode M) to fixed
                    640:      point mode N as a signed number and store in operand 0 (which
                    641:      has mode N).  This instruction's result is defined only when the
                    642:      value of operand 1 is an integer.
                    643: 
                    644: `fixunsMN2'
                    645:      Convert operand 1 (valid for floating point mode M) to fixed
                    646:      point mode N as an unsigned number and store in operand 0 (which
                    647:      has mode N).  This instruction's result is defined only when the
                    648:      value of operand 1 is an integer.
                    649: 
                    650: `ftruncM2'
                    651:      Convert operand 1 (valid for floating point mode M) to an
                    652:      integer value, still represented in floating point mode M, and
                    653:      store it in operand 0 (valid for floating point mode M).
                    654: 
                    655: `fix_truncMN2'
                    656:      Like `fixMN2' but works for any floating point value of mode M
                    657:      by converting the value to an integer.
                    658: 
                    659: `fixuns_truncMN2'
                    660:      Like `fixunsMN2' but works for any floating point value of mode
                    661:      M by converting the value to an integer.
                    662: 
                    663: `truncMN'
                    664:      Truncate operand 1 (valid for mode M) to mode N and store in
                    665:      operand 0 (which has mode N).  Both modes must be fixed point or
                    666:      both floating point.
                    667: 
                    668: `extendMN'
                    669:      Sign-extend operand 1 (valid for mode M) to mode N and store in
                    670:      operand 0 (which has mode N).  Both modes must be fixed point or
                    671:      both floating point.
                    672: 
                    673: `zero_extendMN'
                    674:      Zero-extend operand 1 (valid for mode M) to mode N and store in
                    675:      operand 0 (which has mode N).  Both modes must be fixed point.
                    676: 
                    677: `extv'
                    678:      Extract a bit-field from operand 1 (a register or memory
                    679:      operand), where operand 2 specifies the width in bits and
                    680:      operand 3 the starting bit, and store it in operand 0.  Operand
                    681:      0 must have `Simode'.  Operand 1 may have mode `QImode' or
                    682:      `SImode'; often `SImode' is allowed only for registers. 
                    683:      Operands 2 and 3 must be valid for `SImode'.
                    684: 
                    685:      The RTL generation pass generates this instruction only with
                    686:      constants for operands 2 and 3.
                    687: 
                    688:      The bit-field value is sign-extended to a full word integer
                    689:      before it is stored in operand 0.
                    690: 
                    691: `extzv'
                    692:      Like `extv' except that the bit-field value is zero-extended.
                    693: 
                    694: `insv'
                    695:      Store operand 3 (which must be valid for `SImode') into a
                    696:      bit-field in operand 0, where operand 1 specifies the width in
                    697:      bits and operand 2 the starting bit.  Operand 0 may have mode
                    698:      `QImode' or `SImode'; often `SImode' is allowed only for
                    699:      registers.  Operands 1 and 2 must be valid for `SImode'.
                    700: 
                    701:      The RTL generation pass generates this instruction only with
                    702:      constants for operands 1 and 2.
                    703: 
                    704: `sCOND'
                    705:      Store zero or nonzero in the operand according to the condition
                    706:      codes.  Value stored is nonzero iff the condition COND is true. 
                    707:      COND is the name of a comparison operation expression code, such
                    708:      as `eq', `lt' or `leu'.
                    709: 
                    710:      You specify the mode that the operand must have when you write
                    711:      the `match_operand' expression.  The compiler automatically sees
                    712:      which mode you have used and supplies an operand of that mode.
                    713: 
                    714:      The value stored for a true condition must have 1 as its low bit.
                    715:      Otherwise the instruction is not suitable and must be omitted
                    716:      from the machine description.  You must tell the compiler
                    717:      exactly which value is stored by defining the macro
                    718:      `STORE_FLAG_VALUE'.
                    719: 
                    720: `bCOND'
                    721:      Conditional branch instruction.  Operand 0 is a `label_ref' that
                    722:      refers to the label to jump to.  Jump if the condition codes
                    723:      meet condition COND.
                    724: 
                    725: `call'
                    726:      Subroutine call instruction returning no value.  Operand 0 is
                    727:      the function to call; operand 1 is the number of bytes of
                    728:      arguments pushed (in mode `SImode', except it is normally a
                    729:      `const_int'); operand 2 is the number of registers used as
                    730:      operands.
                    731: 
                    732:      On most machines, operand 2 is not actually stored into the RTL
                    733:      pattern.  It is supplied for the sake of some RISC machines
                    734:      which need to put this information into the assembler code; they
                    735:      can put it in the RTL instead of operand 1.
                    736: 
                    737:      Operand 0 should be a `mem' RTX whose address is the address of
                    738:      the function.
                    739: 
                    740: `call_value'
                    741:      Subroutine call instruction returning a value.  Operand 0 is the
                    742:      hard register in which the value is returned.  There are three
                    743:      more operands, the same as the three operands of the `call'
                    744:      instruction (but with numbers increased by one).
                    745: 
                    746:      Subroutines that return `BLKmode' objects use the `call' insn.
                    747: 
                    748: `return'
                    749:      Subroutine return instruction.  This instruction pattern name
                    750:      should be defined only if a single instruction can do all the
                    751:      work of returning from a function.
                    752: 
                    753: `casesi'
                    754:      Instruction to jump through a dispatch table, including bounds
                    755:      checking.  This instruction takes five operands:
                    756: 
                    757:        1. The index to dispatch on, which has mode `SImode'.
                    758: 
                    759:        2. The lower bound for indices in the table, an integer
                    760:           constant.
                    761: 
                    762:        3. The upper bound for indices in the table, an integer
                    763:           constant.
                    764: 
                    765:        4. A label to jump to if the index has a value outside the
                    766:           bounds.  (If the machine-description macro
                    767:           `CASE_DROPS_THROUGH' is defined, then an out-of-bounds
                    768:           index drops through to the code following the jump table
                    769:           instead of jumping to this label.  In that case, this label
                    770:           is not actually used by the `casesi' instruction, but it is
                    771:           always provided as an operand.)
                    772: 
                    773:        5. A label that precedes the table itself.
                    774: 
                    775:      The table is a `addr_vec' or `addr_diff_vec' inside of a
                    776:      `jump_insn'.  The number of elements in the table is one plus
                    777:      the difference between the upper bound and the lower bound.
                    778: 
                    779: `tablejump'
                    780:      Instruction to jump to a variable address.  This is a low-level
                    781:      capability which can be used to implement a dispatch table when
                    782:      there is no `casesi' pattern.
                    783: 
                    784:      This pattern requires two operands: the address or offset, and a
                    785:      label which should immediately precede the jump table.  If the
                    786:      macro `CASE_VECTOR_PC_RELATIVE' is defined then the first
                    787:      operand is an absolute address to jump to; otherwise, it is an
                    788:      offset which counts from the address of the table.
                    789: 
                    790:      The `tablejump' insn is always the last insn before the jump
                    791:      table it uses.  Its assembler code normally has no need to use
                    792:      the second operand, but you should incorporate it in the RTL
                    793:      pattern so that the jump optimizer will not delete the table as
                    794:      unreachable code.
                    795: 
                    796: 
                    797: 
                    798: File: gcc.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
                    799: 
                    800: When the Order of Patterns Matters
                    801: ==================================
                    802: 
                    803: Sometimes an insn can match more than one instruction pattern.  Then
                    804: the pattern that appears first in the machine description is the one
                    805: used.  Therefore, more specific patterns (patterns that will match
                    806: fewer things) and faster instructions (those that will produce better
                    807: code when they do match) should usually go first in the description.
                    808: 
                    809: In some cases the effect of ordering the patterns can be used to hide
                    810: a pattern when it is not valid.  For example, the 68000 has an
                    811: instruction for converting a fullword to floating point and another
                    812: for converting a byte to floating point.  An instruction converting
                    813: an integer to floating point could match either one.  We put the
                    814: pattern to convert the fullword first to make sure that one will be
                    815: used rather than the other.  (Otherwise a large integer might be
                    816: generated as a single-byte immediate quantity, which would not work.)
                    817: Instead of using this pattern ordering it would be possible to make
                    818: the pattern for convert-a-byte smart enough to deal properly with any
                    819: constant value.
                    820: 
                    821: 
                    822: 
                    823: File: gcc.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
                    824: 
                    825: Interdependence of Patterns
                    826: ===========================
                    827: 
                    828: Every machine description must have a named pattern for each of the
                    829: conditional branch names `bCOND'.  The recognition template must
                    830: always have the form
                    831: 
                    832:      (set (pc)
                    833:           (if_then_else (COND (cc0) (const_int 0))
                    834:                         (label_ref (match_operand 0 "" ""))
                    835:                         (pc)))
                    836: 
                    837: In addition, every machine description must have an anonymous pattern
                    838: for each of the possible reverse-conditional branches.  These
                    839: patterns look like
                    840: 
                    841:      (set (pc)
                    842:           (if_then_else (COND (cc0) (const_int 0))
                    843:                         (pc)
                    844:                         (label_ref (match_operand 0 "" ""))))
                    845: 
                    846: They are necessary because jump optimization can turn
                    847: direct-conditional branches into reverse-conditional branches.
                    848: 
                    849: The compiler does more with RTL than just create it from patterns and
                    850: recognize the patterns: it can perform arithmetic expression codes
                    851: when constant values for their operands can be determined.  As a
                    852: result, sometimes having one pattern can require other patterns.  For
                    853: example, the Vax has no `and' instruction, but it has `and not'
                    854: instructions.  Here is the definition of one of them:
                    855: 
                    856:      (define_insn "andcbsi2"
                    857:        [(set (match_operand:SI 0 "general_operand" "")
                    858:              (and:SI (match_dup 0)
                    859:                      (not:SI (match_operand:SI
                    860:                                1 "general_operand" ""))))]
                    861:        ""
                    862:        "bicl2 %1,%0")
                    863: 
                    864: If operand 1 is an explicit integer constant, an instruction
                    865: constructed using that pattern can be simplified into an `and' like
                    866: this:
                    867: 
                    868:      (set (reg:SI 41)
                    869:           (and:SI (reg:SI 41)
                    870:                   (const_int 0xffff7fff)))
                    871: 
                    872: (where the integer constant is the one's complement of what appeared
                    873: in the original instruction).
                    874: 
                    875: To avoid a fatal error, the compiler must have a pattern that
                    876: recognizes such an instruction.  Here is what is used:
                    877: 
                    878:      (define_insn ""
                    879:        [(set (match_operand:SI 0 "general_operand" "")
                    880:              (and:SI (match_dup 0)
                    881:                      (match_operand:SI 1 "general_operand" "")))]
                    882:        "GET_CODE (operands[1]) == CONST_INT"
                    883:        "*
                    884:      { operands[1]
                    885:          = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[1]));
                    886:        return \"bicl2 %1,%0\";
                    887:      }")
                    888: 
                    889: Whereas a pattern to match a general `and' instruction is impossible
                    890: to support on the Vax, this pattern is possible because it matches
                    891: only a constant second argument: a special case that can be output as
                    892: an `and not' instruction.
                    893: 
                    894: A ``compare'' instruction whose RTL looks like this:
                    895: 
                    896:      (set (cc0) (minus OPERAND (const_int 0)))
                    897: 
                    898: may be simplified by optimization into a ``test'' like this:
                    899: 
                    900:      (set (cc0) OPERAND)
                    901: 
                    902: So in the machine description, each ``compare'' pattern for an
                    903: integer mode must have a corresponding ``test'' pattern that will
                    904: match the result of such simplification.
                    905: 
                    906: In some cases machines support instructions identical except for the
                    907: machine mode of one or more operands.  For example, there may be
                    908: ``sign-extend halfword'' and ``sign-extend byte'' instructions whose
                    909: patterns are
                    910: 
                    911:      (set (match_operand:SI 0 ...)
                    912:           (extend:SI (match_operand:HI 1 ...)))
                    913:      
                    914:      (set (match_operand:SI 0 ...)
                    915:           (extend:SI (match_operand:QI 1 ...)))
                    916: 
                    917: Constant integers do not specify a machine mode, so an instruction to
                    918: extend a constant value could match either pattern.  The pattern it
                    919: actually will match is the one that appears first in the file.  For
                    920: correct results, this must be the one for the widest possible mode
                    921: (`HImode', here).  If the pattern matches the `QImode' instruction,
                    922: the results will be incorrect if the constant value does not actually
                    923: fit that mode.
                    924: 
                    925: Such instructions to extend constants are rarely generated because
                    926: they are optimized away, but they do occasionally happen in
                    927: nonoptimized compilations.
                    928: 
                    929: When an instruction has the constraint letter `o', the reload pass
                    930: may generate instructions which copy a nonoffsetable address into an
                    931: index register.  The idea is that the register can be used as a
                    932: replacement offsetable address.  In order for these generated
                    933: instructions to work, there must be patterns to copy any kind of
                    934: valid address into a register.
                    935: 
                    936: Most older machine designs have ``load address'' instructions which
                    937: do just what is needed here.  Some RISC machines do not advertise
                    938: such instructions, but the possible addresses on these machines are
                    939: very limited, so it is easy to fake them.
                    940: 
                    941: Auto-increment and auto-decrement addresses are an exception; there
                    942: need not be an instruction that can copy such an address into a
                    943: register, because reload handles these cases in a different manner.
                    944: 
                    945: 
                    946: 
                    947: File: gcc.info,  Node: Jump Patterns,  Next: Peephole Definitions,  Prev: Dependent Patterns,  Up: Machine Desc
                    948: 
                    949: Defining Jump Instruction Patterns
                    950: ==================================
                    951: 
                    952: GNU CC assumes that the machine has a condition code.  A comparison
                    953: insn sets the condition code, recording the results of both signed
                    954: and unsigned comparison of the given operands.  A separate branch
                    955: insn tests the condition code and branches or not according its
                    956: value.  The branch insns come in distinct signed and unsigned
                    957: flavors.  Many common machines, such as the Vax, the 68000 and the
                    958: 32000, work this way.
                    959: 
                    960: Some machines have distinct signed and unsigned compare instructions,
                    961: and only one set of conditional branch instructions.  The easiest way
                    962: to handle these machines is to treat them just like the others until
                    963: the final stage where assembly code is written.  At this time, when
                    964: outputting code for the compare instruction, peek ahead at the
                    965: following branch using `NEXT_INSN (insn)'.  (The variable `insn'
                    966: refers to the insn being output, in the output-writing code in an
                    967: instruction pattern.)  If the RTL says that is an unsigned branch,
                    968: output an unsigned compare; otherwise output a signed compare.  When
                    969: the branch itself is output, you can treat signed and unsigned
                    970: branches identically.
                    971: 
                    972: The reason you can do this is that GNU CC always generates a pair of
                    973: consecutive RTL insns, one to set the condition code and one to test
                    974: it, and keeps the pair inviolate until the end.
                    975: 
                    976: To go with this technique, you must define the machine-description
                    977: macro `NOTICE_UPDATE_CC' to do `CC_STATUS_INIT'; in other words, no
                    978: compare instruction is superfluous.
                    979: 
                    980: Some machines have compare-and-branch instructions and no condition
                    981: code.  A similar technique works for them.  When it is time to
                    982: ``output'' a compare instruction, record its operands in two static
                    983: variables.  When outputting the branch-on-condition-code instruction
                    984: that follows, actually output a compare-and-branch instruction that
                    985: uses the remembered operands.
                    986: 
                    987: It also works to define patterns for compare-and-branch instructions.
                    988: In optimizing compilation, the pair of compare and branch
                    989: instructions will be combined accoprding to these patterns.  But this
                    990: does not happen if optimization is not requested.  So you must use
                    991: one of the solutions above in addition to any special patterns you
                    992: define.
                    993: 
                    994: 
                    995: 
                    996: File: gcc.info,  Node: Peephole Definitions,  Next: Expander Definitions,  Prev: Jump Patterns,  Up: Machine Desc
                    997: 
                    998: Defining Machine-Specific Peephole Optimizers
                    999: =============================================
                   1000: 
                   1001: In addition to instruction patterns the `md' file may contain
                   1002: definitions of machine-specific peephole optimizations.
                   1003: 
                   1004: The combiner does not notice certain peephole optimizations when the
                   1005: data flow in the program does not suggest that it should try them. 
                   1006: For example, sometimes two consecutive insns related in purpose can
                   1007: be combined even though the second one does not appear to use a
                   1008: register computed in the first one.  A machine-specific peephole
                   1009: optimizer can detect such opportunities.
                   1010: 
                   1011: A definition looks like this:
                   1012: 
                   1013:      (define_peephole
                   1014:        [INSN-PATTERN-1
                   1015:         INSN-PATTERN-2
                   1016:         ...]
                   1017:        "CONDITION"
                   1018:        "TEMPLATE"
                   1019:        "MACHINE-SPECIFIC INFO")
                   1020: 
                   1021: The last string operand may be omitted if you are not using any
                   1022: machine-specific information in this machine description.  If
                   1023: present, it must obey the same rules as in a `define_insn'.
                   1024: 
                   1025: In this skeleton, INSN-PATTERN-1 and so on are patterns to match
                   1026: consecutive instructions.  The optimization applies to a sequence of
                   1027: instructions when INSN-PATTERN-1 matches the first one,
                   1028: INSN-PATTERN-2 matches the next, and so on.
                   1029: 
                   1030: INSN-PATTERN-1 and so on look *almost* like the second operand of
                   1031: `define_insn'.  There is one important difference: this pattern is an
                   1032: RTX, not a vector.  If the `define_insn' pattern would be a vector of
                   1033: one element, the INSN-PATTERN should be just that element, no vector.
                   1034: If the `define_insn' pattern would have multiple elements then the
                   1035: INSN-PATTERN must place the vector inside an explicit `parallel' RTX.
                   1036: 
                   1037: The operands of the instructions are matched with `match_operands'
                   1038: and `match_dup', as usual).  What is not usual is that the operand
                   1039: numbers apply to all the instruction patterns in the definition.  So,
                   1040: you can check for identical operands in two instructions by using
                   1041: `match_operand' in one instruction and `match_dup' in the other.
                   1042: 
                   1043: The operand constraints used in `match_operand' patterns do not have
                   1044: any direct effect on the applicability of the optimization, but they
                   1045: will be validated afterward, so write constraints that are sure to
                   1046: fit whenever the optimization is applied.  It is safe to use `"g"'
                   1047: for each operand.
                   1048: 
                   1049: Once a sequence of instructions matches the patterns, the CONDITION
                   1050: is checked.  This is a C expression which makes the final decision
                   1051: whether to perform the optimization (do so if the expression is
                   1052: nonzero).  If CONDITION is omitted (in other words, the string is
                   1053: empty) then the optimization is applied to every sequence of
                   1054: instructions that matches the patterns.
                   1055: 
                   1056: The defined peephole optimizations are applied after register
                   1057: allocation is complete.  Therefore, the optimizer can check which
                   1058: operands have ended up in which kinds of registers, just by looking
                   1059: at the operands.
                   1060: 
                   1061: The way to refer to the operands in CONDITION is to write
                   1062: `operands[I]' for operand number I (as matched by `(match_operand I
                   1063: ...)').  Use the variable `insn' to refer to the last of the insns
                   1064: being matched; use `PREV_INSN' to find the preceding insns (but be
                   1065: careful to skip over any `note' insns that intervene).
                   1066: 
                   1067: When optimizing computations with intermediate results, you can use
                   1068: CONDITION to match only when the intermediate results are not used
                   1069: elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where
                   1070: INSN is the insn in which you expect the value to be used for the
                   1071: last time (from the value of `insn', together with use of
                   1072: `PREV_INSN'), and OP is the intermediate value (from `operands[I]').
                   1073: 
                   1074: Applying the optimization means replacing the sequence of
                   1075: instructions with one new instruction.  The TEMPLATE controls
                   1076: ultimate output of assembler code for this combined instruction.  It
                   1077: works exactly like the template of a `define_insn'.  Operand numbers
                   1078: in this template are the same ones used in matching the original
                   1079: sequence of instructions.
                   1080: 
                   1081: The result of a defined peephole optimizer does not need to match any
                   1082: of the instruction patterns, and it does not have an opportunity to
                   1083: match them.  The peephole optimizer definition itself serves as the
                   1084: instruction pattern to control how the instruction is output.
                   1085: 
                   1086: Defined peephole optimizers are run in the last jump optimization
                   1087: pass, so the instructions they produce are never combined or
                   1088: rearranged automatically in any way.
                   1089: 
                   1090: Here is an example, taken from the 68000 machine description:
                   1091: 
                   1092:      (define_peephole
                   1093:        [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
                   1094:         (set (match_operand:DF 0 "register_operand" "f")
                   1095:              (match_operand:DF 1 "register_operand" "ad"))]
                   1096:        "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
                   1097:        "*
                   1098:      {
                   1099:        rtx xoperands[2];
                   1100:        xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                   1101:      #ifdef MOTOROLA
                   1102:        output_asm_insn (\"move.l %1,(sp)\", xoperands);
                   1103:        output_asm_insn (\"move.l %1,-(sp)\", operands);
                   1104:        return \"fmove.d (sp)+,%0\";
                   1105:      #else
                   1106:        output_asm_insn (\"movel %1,sp@\", xoperands);
                   1107:        output_asm_insn (\"movel %1,sp@-\", operands);
                   1108:        return \"fmoved sp@+,%0\";
                   1109:      #endif
                   1110:      }
                   1111:      ")
                   1112: 
                   1113: The effect of this optimization is to change
                   1114: 
                   1115:      jbsr _foobar
                   1116:      addql #4,sp
                   1117:      movel d1,sp@-
                   1118:      movel d0,sp@-
                   1119:      fmoved sp@+,fp0
                   1120: 
                   1121: into
                   1122: 
                   1123:      jbsr _foobar
                   1124:      movel d1,sp@
                   1125:      movel d0,sp@-
                   1126:      fmoved sp@+,fp0
                   1127: 
                   1128: 

unix.superglobalmegacorp.com

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