Annotation of researchv10dc/cmd/gcc/internals-5, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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