Annotation of gcc/internals-5, revision 1.1

1.1     ! root        1: Info file internals, produced by Makeinfo, -*- Text -*-
        !             2: from input file internals.texinfo.
        !             3: 
        !             4: 
        !             5: 
        !             6: This file documents the internals of the GNU compiler.
        !             7: 
        !             8: Copyright (C) 1988 Free Software Foundation, Inc.
        !             9: 
        !            10: Permission is granted to make and distribute verbatim copies of
        !            11: this manual provided the copyright notice and this permission notice
        !            12: are preserved on all copies.
        !            13: 
        !            14: Permission is granted to copy and distribute modified versions of this
        !            15: manual under the conditions for verbatim copying, provided also that the
        !            16: section entitled ``GNU CC General Public License'' is included exactly as
        !            17: in the original, and provided that the entire resulting derived work is
        !            18: distributed under the terms of a permission notice identical to this one.
        !            19: 
        !            20: Permission is granted to copy and distribute translations of this manual
        !            21: into another language, under the above conditions for modified versions,
        !            22: except that the section entitled ``GNU CC General Public License'' and
        !            23: this permission notice may be included in translations approved by the
        !            24: Free Software Foundation instead of in the original English.
        !            25: 
        !            26: 
        !            27: 
        !            28: 
        !            29: 
        !            30: 
        !            31: File: internals,  Node: Peephole Definitions,  Next: Expander Definitions,  Prev: Jump Patterns,  Up: Machine Desc
        !            32: 
        !            33: Defining Machine-Specific Peephole Optimizers
        !            34: =============================================
        !            35: 
        !            36: In addition to instruction patterns the `md' file may contain definitions
        !            37: of machine-specific peephole optimizations.
        !            38: 
        !            39: The combiner does not notice certain peephole optimizations when the data
        !            40: flow in the program does not suggest that it should try them.  For example,
        !            41: sometimes two consecutive insns related in purpose can be combined even
        !            42: though the second one does not appear to use a register computed in the
        !            43: first one.  A machine-specific peephole optimizer can detect such
        !            44: opportunities.
        !            45: 
        !            46: A definition looks like this:
        !            47: 
        !            48:      (define_peephole
        !            49:        [INSN-PATTERN-1
        !            50:         INSN-PATTERN-2
        !            51:         ...]
        !            52:        "CONDITION"
        !            53:        "TEMPLATE")
        !            54: 
        !            55: 
        !            56: In this skeleton, INSN-PATTERN-1 and so on are patterns to match
        !            57: consecutive instructions.  The optimization applies to a sequence of
        !            58: instructions when INSN-PATTERN-1 matches the first one, INSN-PATTERN-2
        !            59: matches the next, and so on.
        !            60: 
        !            61: INSN-PATTERN-1 and so on look *almost* like the second operand of
        !            62: `define_insn'.  There is one important difference: this pattern is an RTX,
        !            63: not a vector.  If the `define_insn' pattern would be a vector of one
        !            64: element, the INSN-PATTERN should be just that element, no vector.  If the
        !            65: `define_insn' pattern would have multiple elements then the INSN-PATTERN
        !            66: must place the vector inside an explicit `parallel' RTX.
        !            67: 
        !            68: The operands of the instructions are matched with `match_operands' and
        !            69: `match_dup', as usual).  What is not usual is that the operand numbers
        !            70: apply to all the instruction patterns in the definition.  So, you can check
        !            71: for identical operands in two instructions by using `match_operand' in one
        !            72: instruction and `match_dup' in the other.
        !            73: 
        !            74: The operand constraints used in `match_operand' patterns do not have any
        !            75: direct effect on the applicability of the optimization, but they will be
        !            76: validated afterward, so write constraints that are sure to fit whenever the
        !            77: optimization is applied.  It is safe to use `"g"' for each operand.
        !            78: 
        !            79: Once a sequence of instructions matches the patterns, the CONDITION is
        !            80: checked.  This is a C expression which makes the final decision whether to
        !            81: perform the optimization (do so if the expression is nonzero).  If
        !            82: CONDITION is omitted (in other words, the string is empty) then the
        !            83: optimization is applied to every sequence of instructions that matches the
        !            84: patterns.
        !            85: 
        !            86: The defined peephole optimizations are applied after register allocation is
        !            87: complete.  Therefore, the optimizer can check which operands have ended up
        !            88: in which kinds of registers, just by looking at the operands.
        !            89: 
        !            90: The way to refer to the operands in CONDITION is to write `operands[I]' for
        !            91: operand number I (as matched by `(match_operand I ...)').  Use the variable
        !            92: `insn' to refer to the last of the insns being matched; use `PREV_INSN' to
        !            93: find the preceding insns (but be careful to skip over any `note' insns that
        !            94: intervene).
        !            95: 
        !            96: When optimizing computations with intermediate results, you can use
        !            97: CONDITION to match only when the intermediate results are not used
        !            98: elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where INSN is
        !            99: the insn in which you expect the value to be used for the last time (from
        !           100: the value of `insn', together with use of `PREV_INSN'), and OP is the
        !           101: intermediate value (from `operands[I]').
        !           102: 
        !           103: Applying the optimization means replacing the sequence of instructions with
        !           104: one new instruction.  The TEMPLATE controls ultimate output of assembler
        !           105: code for this combined instruction.  It works exactly like the template of
        !           106: a `define_insn'.  Operand numbers in this template are the same ones used
        !           107: in matching the original sequence of instructions.
        !           108: 
        !           109: The result of a defined peephole optimizer does not need to match any of
        !           110: the instruction patterns, and it does not have an opportunity to match
        !           111: them.  The peephole optimizer definition itself serves as the instruction
        !           112: pattern to control how the instruction is output.
        !           113: 
        !           114: Defined peephole optimizers are run in the last jump optimization pass, so
        !           115: the instructions they produce are never combined or rearranged
        !           116: automatically in any way.
        !           117: 
        !           118: Here is an example, taken from the 68000 machine description:
        !           119: 
        !           120:      (define_peephole
        !           121:        [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
        !           122:         (set (match_operand:DF 0 "register_operand" "f")
        !           123:              (match_operand:DF 1 "register_operand" "ad"))]
        !           124:        "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
        !           125:        "*
        !           126:      {
        !           127:        rtx xoperands[2];
        !           128:        xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
        !           129:      #ifdef MOTOROLA
        !           130:        output_asm_insn (\"move.l %1,(sp)\", xoperands);
        !           131:        output_asm_insn (\"move.l %1,-(sp)\", operands);
        !           132:        return \"fmove.d (sp)+,%0\";
        !           133:      #else
        !           134:        output_asm_insn (\"movel %1,sp@\", xoperands);
        !           135:        output_asm_insn (\"movel %1,sp@-\", operands);
        !           136:        return \"fmoved sp@+,%0\";
        !           137:      #endif
        !           138:      }
        !           139:      ")
        !           140: 
        !           141: 
        !           142: The effect of this optimization is to change
        !           143: 
        !           144:      jbsr _foobar
        !           145:      addql #4,sp
        !           146:      movel d1,sp@-
        !           147:      movel d0,sp@-
        !           148:      fmoved sp@+,fp0
        !           149: 
        !           150: 
        !           151: into
        !           152: 
        !           153:      jbsr _foobar
        !           154:      movel d1,sp@
        !           155:      movel d0,sp@-
        !           156:      fmoved sp@+,fp0
        !           157: 
        !           158: 
        !           159: 
        !           160: File: internals,  Node: Expander Definitions,  Prev: Peephole Definitions,  Up: Machine Desc
        !           161: 
        !           162: Defining RTL Sequences for Code Generation
        !           163: ==========================================
        !           164: 
        !           165: On some target machines, some standard pattern names for RTL generation
        !           166: cannot be handled with single insn, but a sequence of RTL insns can
        !           167: represent them.  For these target machines, you can write a `define_expand'
        !           168: to specify how to generate the sequence of RTL.
        !           169: 
        !           170: A `define_expand' is an RTL expression that looks almost like a
        !           171: `define_insn'; but, unlike the latter, a `define_expand' is used only for
        !           172: RTL generation and it can produce more than one RTL insn.
        !           173: 
        !           174: A `define_expand' RTX has four operands:
        !           175: 
        !           176:    * The name.  Each `define_expand' must have a name, since the only use
        !           177:      for it is to refer to it by name.
        !           178: 
        !           179:    * The RTL template.  This is just like the RTL template for a
        !           180:      `define_peephole' in that it is a vector of RTL expressions each being
        !           181:      one insn.
        !           182: 
        !           183:    * The condition, a string containing a C expression.  This expression is
        !           184:      used to express how the availability of this pattern depends on
        !           185:      subclasses of target machine, selected by command-line options when
        !           186:      GNU CC is run.  This is just like the condition of a `define_insn'
        !           187:      that has a standard name.
        !           188: 
        !           189:    * The preparation statements, a string containing zero or more C
        !           190:      statements which are to be executed before RTL code is generated from
        !           191:      the RTL template.
        !           192: 
        !           193:      Usually these statements prepare temporary registers for use as
        !           194:      internal operands in the RTL template, but they can also generate RTL
        !           195:      insns directly by calling routines such as `emit_insn', etc.  Any such
        !           196:      insns precede the ones that come from the RTL template.
        !           197: 
        !           198: The RTL template, in addition to controlling generation of RTL insns, also
        !           199: describes the operands that need to be specified when this pattern is used.
        !           200:  In particular, it gives a predicate for each operand.
        !           201: 
        !           202: A true operand, which need to be specified in order to generate RTL from
        !           203: the pattern, should be described with a `match_operand' in its first
        !           204: occurrence in the RTL template.  This enters information on the operand's
        !           205: predicate into the tables that record such things.  GNU CC uses the
        !           206: information to preload the operand into a register if that is required for
        !           207: valid RTL code.  If the operand is referred to more than once, subsequent
        !           208: references should use `match_dup'.
        !           209: 
        !           210: The RTL template may also refer to internal ``operands'' which are
        !           211: temporary registers or labels used only within the sequence made by the
        !           212: `define_expand'.  Internal operands are substituted into the RTL template
        !           213: with `match_dup', never with `match_operand'.  The values of the internal
        !           214: operands are not passed in as arguments by the compiler when it requests
        !           215: use of this pattern.  Instead, they are computed within the pattern, in the
        !           216: preparation statements.  These statements compute the values and store them
        !           217: into the appropriate elements of `operands' so that `match_dup' can find
        !           218: them.
        !           219: 
        !           220: There are two special macros defined for use in the preparation statements:
        !           221: `DONE' and `FAIL'.  Use them with a following semicolon, as a statement.
        !           222: 
        !           223: `DONE'
        !           224:      Use the `DONE' macro to end RTL generation for the pattern.  The only
        !           225:      RTL insns resulting from the pattern on this occasion will be those
        !           226:      already emitted by explicit calls to `emit_insn' within the
        !           227:      preparation statements; the RTL template will not be generated.
        !           228: 
        !           229: `FAIL'
        !           230:      Make the pattern fail on this occasion.  When a pattern fails, it
        !           231:      means that the pattern was not truly available.  The calling routines
        !           232:      in the compiler will try other strategies for code generation using
        !           233:      other patterns.
        !           234: 
        !           235:      Failure is currently supported only for binary operations (addition,
        !           236:      multiplication, shifting, etc.).
        !           237: 
        !           238:      Do not emit any insns explicitly with `emit_insn' before failing.
        !           239: 
        !           240: Here is an example, the definition of left-shift for the SPUR chip:
        !           241: 
        !           242:      (define_expand "ashlsi3"
        !           243:        [(set (match_operand:SI 0 "register_operand" "")
        !           244:              (ashift:SI
        !           245:                (match_operand:SI 1 "register_operand" "")
        !           246:                (match_operand:SI 2 "nonmemory_operand" "")))]
        !           247:        ""
        !           248:        "
        !           249:      {
        !           250:        if (GET_CODE (operands[2]) != CONST_INT
        !           251:            || (unsigned) INTVAL (operands[2]) > 3)
        !           252:          FAIL;
        !           253:      }")
        !           254: 
        !           255: 
        !           256: This example uses `define_expand' so that it can generate an RTL insn for
        !           257: shifting when the shift-count is in the supported range of 0 to 3 but fail
        !           258: in other cases where machine insns aren't available.  When it fails, the
        !           259: compiler tries another strategy using different patterns (such as, a
        !           260: library call).
        !           261: 
        !           262: If the compiler were able to handle nontrivial condition-strings in
        !           263: patterns with names, then there would be possible to use a `define_insn' in
        !           264: that case.  Here is another case (zero-extension on the 68000) which makes
        !           265: more use of the power of `define_expand':
        !           266: 
        !           267:      (define_expand "zero_extendhisi2"
        !           268:        [(set (match_operand:SI 0 "general_operand" "")
        !           269:              (const_int 0))
        !           270:         (set (strict_low_part 
        !           271:                (subreg:HI
        !           272:                  (match_operand:SI 0 "general_operand" "")
        !           273:                  0))
        !           274:              (match_operand:HI 1 "general_operand" ""))]
        !           275:        ""
        !           276:        "operands[1] = make_safe_from (operands[1], operands[0]);")
        !           277: 
        !           278: 
        !           279: Here two RTL insns are generated, one to clear the entire output operand
        !           280: and the other to copy the input operand into its low half.  This sequence
        !           281: is incorrect if the input operand refers to [the old value of] the output
        !           282: operand, so the preparation statement makes sure this isn't so.  The
        !           283: function `make_safe_from' copies the `operands[1]' into a temporary
        !           284: register if it refers to `operands[0]'.  It does this by emitting another
        !           285: RTL insn.
        !           286: 
        !           287: Finally, a third example shows the use of an internal operand. 
        !           288: Zero-extension on the SPUR chip is done by `and'-ing the result against a
        !           289: halfword mask.  But this mask cannot be represented by a `const_int'
        !           290: because the constant value is too large to be legitimate on this machine. 
        !           291: So it must be copied into a register with `force_reg' and then the register
        !           292: used in the `and'.
        !           293: 
        !           294:      (define_expand "zero_extendhisi2"
        !           295:        [(set (match_operand:SI 0 "register_operand" "")
        !           296:              (and:SI (subreg:SI
        !           297:                        (match_operand:HI 1 "register_operand" "")
        !           298:                        0)
        !           299:                      (match_dup 2)))]
        !           300:        ""
        !           301:        "operands[2]
        !           302:           = force_reg (SImode, gen_rtx (CONST_INT,
        !           303:                                         VOIDmode, 65535)); ")
        !           304: 
        !           305: 
        !           306: 
        !           307: File: internals,  Node: Machine Macros,  Next: Config,  Prev: Machine Desc,  Up: Top
        !           308: 
        !           309: Machine Description Macros
        !           310: **************************
        !           311: 
        !           312: The other half of the machine description is a C header file conventionally
        !           313: given the name `tm-MACHINE.h'.  The file `tm.h' should be a link to it. 
        !           314: The header file `config.h' includes `tm.h' and most compiler source files
        !           315: include `config.h'.
        !           316: 
        !           317: 
        !           318: * Menu:
        !           319: 
        !           320: * Run-time Target::     Defining -m options like -m68000 and -m68020.
        !           321: * Storage Layout::      Defining sizes and alignments of data types.
        !           322: * Registers::           Naming and describing the hardware registers.
        !           323: * Register Classes::    Defining the classes of hardware registers.
        !           324: * Stack Layout::        Defining which way the stack grows and by how much.
        !           325: * Library Names::       Specifying names of subroutines to call automatically.
        !           326: * Addressing Modes::    Defining addressing modes valid for memory operands.
        !           327: * Condition Code::      Defining how insns update the condition code.
        !           328: * Assembler Format::    Defining how to write insns and pseudo-ops to output.
        !           329: * Misc::                Everything else.
        !           330: 
        !           331: 
        !           332: 
        !           333: File: internals,  Node: Run-time Target,  Next: Storage Layout,  Prev: Machine Macros,  Up: Machine Macros
        !           334: 
        !           335: Run-time Target Specification
        !           336: =============================
        !           337: 
        !           338: `CPP_PREDEFINES'
        !           339:      Define this to be a string constant containing `-D' options to define
        !           340:      the predefined macros that identify this machine and system.
        !           341: 
        !           342:      For example, on the Sun, one can use the value
        !           343: 
        !           344:           "-Dmc68000 -Dsun -Dunix"
        !           345: 
        !           346: 
        !           347: `extern int target_flags;'
        !           348:      This declaration should be present.
        !           349: 
        !           350: `TARGET_...'
        !           351:      This series of macros is to allow compiler command arguments to enable
        !           352:      or disable the use of optional features of the target machine.  For
        !           353:      example, one machine description serves both the 68000 and the 68020;
        !           354:      a command argument tells the compiler whether it should use 68020-only
        !           355:      instructions or not.  This command argument works by means of a macro
        !           356:      `TARGET_68020' that tests a bit in `target_flags'.
        !           357: 
        !           358:      Define a macro `TARGET_FEATURENAME' for each such option.  Its
        !           359:      definition should test a bit in `target_flags'; for example:
        !           360: 
        !           361:           #define TARGET_68020 (target_flags & 1)
        !           362: 
        !           363: 
        !           364:      One place where these macros are used is in the condition-expressions
        !           365:      of instruction patterns.  Note how `TARGET_68020' appears frequently
        !           366:      in the 68000 machine description file, `m68k.md'.  Another place they
        !           367:      are used is in the definitions of the other macros in the
        !           368:      `tm-MACHINE.h' file.
        !           369: 
        !           370: `TARGET_SWITCHES'
        !           371:      This macro defines names of command options to set and clear bits in
        !           372:      `target_flags'.  Its definition is an initializer with a subgrouping
        !           373:      for each command option.
        !           374: 
        !           375:      Each subgrouping contains a string constant, that defines the option
        !           376:      name, and a number, which contains the bits to set in `target_flags'. 
        !           377:      A negative number says to clear bits instead; the negative of the
        !           378:      number is which bits to clear.  The actual option name is made by
        !           379:      appending `-m' to the specified name.
        !           380: 
        !           381:      One of the subgroupings should have a null string.  The number in this
        !           382:      grouping is the default value for `target_flags'.  Any target options
        !           383:      act starting with that value.
        !           384: 
        !           385:      Here is an example which defines `-m68000' and `-m68020' with opposite
        !           386:      meanings, and picks the latter as the default:
        !           387: 
        !           388:           #define TARGET_SWITCHES \
        !           389:             { { "68020", 1},      \
        !           390:               { "68000", -1},     \
        !           391:               { "", 1}}
        !           392: 
        !           393: 
        !           394: Sometimes certain combinations of command options do not make sense on a
        !           395: particular target machine.  You can define a macro `OVERRIDE_OPTIONS' to
        !           396: take account of this.  This macro, if defined, is executed once just after
        !           397: all the command options have been parsed.
        !           398: 
        !           399: 
        !           400: File: internals,  Node: Storage Layout,  Next: Registers,  Prev: Run-time Target,  Up: Machine Macros
        !           401: 
        !           402: Storage Layout
        !           403: ==============
        !           404: 
        !           405: Note that the definitions of the macros in this table which are sizes or
        !           406: alignments measured in bits do not need to be constant.  They can be C
        !           407: expressions that refer to static variables, such as the `target_flags'. 
        !           408: *note Run-time Target::.
        !           409: 
        !           410: `BITS_BIG_ENDIAN'
        !           411:      Define this macro if the most significant bit in a byte has the lowest
        !           412:      number.  This means that bit-field instructions count from the most
        !           413:      significant bit.  If the machine has no bit-field instructions, this
        !           414:      macro is irrelevant.
        !           415: 
        !           416: `BYTES_BIG_ENDIAN'
        !           417:      Define this macro if the most significant byte in a word has the
        !           418:      lowest number.
        !           419: 
        !           420: `WORDS_BIG_ENDIAN'
        !           421:      Define this macro if, in a multiword object, the most significant word
        !           422:      has the lowest number.
        !           423: 
        !           424: `BITS_PER_UNIT'
        !           425:      Number of bits in an addressable storage unit (byte); normally 8.
        !           426: 
        !           427: `BITS_PER_WORD'
        !           428:      Number of bits in a word; normally 32.
        !           429: 
        !           430: `UNITS_PER_WORD'
        !           431:      Number of storage units in a word; normally 4.
        !           432: 
        !           433: `POINTER_SIZE'
        !           434:      Width of a pointer, in bits.
        !           435: 
        !           436: `PARM_BOUNDARY'
        !           437:      Alignment required for function parameters on the stack, in bits.
        !           438: 
        !           439: `STACK_BOUNDARY'
        !           440:      Define this macro if you wish to preserve a certain alignment for the
        !           441:      stack pointer at all times.  The definition is a C expression for the
        !           442:      desired alignment (measured in bits).
        !           443: 
        !           444: `FUNCTION_BOUNDARY'
        !           445:      Alignment required for a function entry point, in bits.
        !           446: 
        !           447: `BIGGEST_ALIGNMENT'
        !           448:      Biggest alignment that any data type can require on this machine, in
        !           449:      bits.
        !           450: 
        !           451: `EMPTY_FIELD_ALIGNMENT'
        !           452:      Alignment in bits to be given to a structure bit field that follows an
        !           453:      empty field such as `int : 0;'.
        !           454: 
        !           455: `STRUCTURE_SIZE_BOUNDARY'
        !           456:      Number of bits which any structure or union's size must be a multiple
        !           457:      of.  Each structure or union's size is rounded up to a multiple of this.
        !           458: 
        !           459:      If you do not define this macro, the default is the same as
        !           460:      `BITS_PER_UNIT'.
        !           461: 
        !           462: `STRICT_ALIGNMENT'
        !           463:      Define this if instructions will fail to work if given data not on the
        !           464:      nominal alignment.  If instructions will merely go slower in that
        !           465:      case, do not define this macro.
        !           466: 
        !           467: 
        !           468: File: internals,  Node: Registers,  Next: Register Classes,  Prev: Storage Layout,  Up: Machine Macros
        !           469: 
        !           470: Register Usage
        !           471: ==============
        !           472: 
        !           473: `FIRST_PSEUDO_REGISTER'
        !           474:      Number of hardware registers known to the compiler.  They receive
        !           475:      numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo
        !           476:      register's number really is assigned the number `FIRST_PSEUDO_REGISTER'.
        !           477: 
        !           478: `FIXED_REGISTERS'
        !           479:      An initializer that says which registers are used for fixed purposes
        !           480:      all throughout the compiled code and are therefore not available for
        !           481:      general allocation.  These would include the stack pointer, the frame
        !           482:      pointer, the program counter on machines where that is considered one
        !           483:      of the addressable registers, and any other numbered register with a
        !           484:      standard use.
        !           485: 
        !           486:      This information is expressed as a sequence of numbers, separated by
        !           487:      commas and surrounded by braces.  The Nth number is 1 if register N is
        !           488:      fixed, 0 otherwise.
        !           489: 
        !           490:      The table initialized from this macro, and the table initialized by
        !           491:      the following one, may be overridden at run time either automatically,
        !           492:      by the actions of the macro `CONDITIONAL_REGISTER_USAGE', or by the
        !           493:      user with the command options `-ffixed-REG', `-fcall-used-REG' and
        !           494:      `-fcall-saved-REG'.
        !           495: 
        !           496: `CALL_USED_REGISTERS'
        !           497:      Like `FIXED_REGISTERS' but has 1 for each register that is clobbered
        !           498:      (in general) by function calls as well as for fixed registers.  This
        !           499:      macro therefore identifies the registers that are not available for
        !           500:      general allocation of values that must live across function calls.
        !           501: 
        !           502:      If a register has 0 in `CALL_USED_REGISTERS', the compiler
        !           503:      automatically saves it on function entry and restores it on function
        !           504:      exit, if the register is used within the function.
        !           505: 
        !           506: `CONDITIONAL_REGISTER_USAGE'
        !           507:      Zero or more C statements that may conditionally modify two variables
        !           508:      `fixed_regs' and `call_used_regs' (both of type `char []') after they
        !           509:      have been initialized from the two preceding macros.
        !           510: 
        !           511:      This is necessary in case the fixed or call-clobbered registers depend
        !           512:      on target flags.
        !           513: 
        !           514:      You need not define this macro if it has no work to do.
        !           515: 
        !           516: `HARD_REGNO_REGS (REGNO, MODE)'
        !           517:      A C expression for the number of consecutive hard registers, starting
        !           518:      at register number REGNO, required to hold a value of mode MODE.
        !           519: 
        !           520:      On a machine where all registers are exactly one word, a suitable
        !           521:      definition of this macro is
        !           522: 
        !           523:           #define HARD_REGNO_NREGS(REGNO, MODE)            \
        !           524:              ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
        !           525:               / UNITS_PER_WORD))
        !           526: 
        !           527: 
        !           528: `HARD_REGNO_MODE_OK (REGNO, MODE)'
        !           529:      A C expression that is nonzero if it is permissible to store a value
        !           530:      of mode MODE in hard register number REGNO (or in several registers
        !           531:      starting with that one).  For a machine where all registers are
        !           532:      equivalent, a suitable definition is
        !           533: 
        !           534:           #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
        !           535: 
        !           536: 
        !           537:      It is not necessary for this macro to check for fixed register numbers
        !           538:      because the allocation mechanism considers them to be always occupied.
        !           539: 
        !           540:      Many machines have special registers for floating point arithmetic. 
        !           541:      Often people assume that floating point machine modes are allowed only
        !           542:      in floating point registers.  This is not true.  Any registers that
        !           543:      can hold integers can safely *hold* a floating point machine mode,
        !           544:      whether or not floating arithmetic can be done on it in those registers.
        !           545: 
        !           546:      The true significance of special floating registers is rather than
        !           547:      non-floating-point machine modes *may not* go in those registers. 
        !           548:      This is true if the floating registers normalize any value stored in
        !           549:      them, because storing a non-floating value there would garble it.  If
        !           550:      the floating registers do not automatically normalize, if you can
        !           551:      store any bit pattern in one and retrieve it unchanged without a trap,
        !           552:      then any machine mode may go in a floating register and this macro
        !           553:      should say so.
        !           554: 
        !           555:      Sometimes there are floating registers that are especially slow to
        !           556:      access, so that it is better to store a value in a stack frame than in
        !           557:      such a register if floating point arithmetic is not being done.  As
        !           558:      long as the floating registers are not in class `GENERAL_REGS', they
        !           559:      will not be used unless some insn's constraint asks for one.
        !           560: 
        !           561:      It is obligatory to support floating point `move' instructions into
        !           562:      and out of general registers, because unions and structures (which
        !           563:      have modes `SImode' or `DImode') can be in those registers and they
        !           564:      may have floating point members.
        !           565: 
        !           566: `MODES_TIEABLE_P (MODE1, MODE2)'
        !           567:      A C expression that is nonzero if it is desirable to choose register
        !           568:      allocation so as to avoid move instructions between a value of mode
        !           569:      MODE1 and a value of mode MODE2.
        !           570: 
        !           571:      If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, MODE2)'
        !           572:      are ever different for any R, then `MODES_TIEABLE_P (MODE1, MODE2)'
        !           573:      must be zero.
        !           574: 
        !           575: `PC_REGNUM'
        !           576:      If the program counter has a register number, define this as that
        !           577:      register number.  Otherwise, do not define it.
        !           578: 
        !           579: `STACK_POINTER_REGNUM'
        !           580:      The register number of the stack pointer register, which must also be
        !           581:      a fixed register according to `FIXED_REGISTERS'.  On many machines,
        !           582:      the hardware determines which register this is.
        !           583: 
        !           584: `FRAME_POINTER_REGNUM'
        !           585:      The register number of the frame pointer register, which is used to
        !           586:      access automatic variables in the stack frame.  On some machines, the
        !           587:      hardware determines which register this is.  On other machines, you
        !           588:      can choose any register you wish for this purpose.
        !           589: 
        !           590: `FRAME_POINTER_REQUIRED'
        !           591:      A C expression which is nonzero if a function must have and use a
        !           592:      frame pointer.  This expression is evaluated in the reload pass, in
        !           593:      the function `reload', and it can in principle examine the current
        !           594:      function and decide according to the facts, but on most machines the
        !           595:      constant 0 or the constant 1 suffices.  Use 0 when the machine allows
        !           596:      code to be generated with no frame pointer, and doing so saves some
        !           597:      time or space.  Use 1 when there is no possible advantage to avoiding
        !           598:      a frame pointer.
        !           599: 
        !           600:      In certain cases, the compiler does not know how to do without a frame
        !           601:      pointer.  The compiler recognizes those cases and automatically gives
        !           602:      the function a frame pointer regardless of what
        !           603:      `FRAME_POINTER_REQUIRED' says.  You don't need to worry about them.
        !           604: 
        !           605:      In a function that does not require a frame pointer, the frame pointer
        !           606:      register can be allocated for ordinary usage, provided it is not
        !           607:      marked as a fixed register.  See `FIXED_REGISTERS' for more information.
        !           608: 
        !           609: `ARG_POINTER_REGNUM'
        !           610:      The register number of the arg pointer register, which is used to
        !           611:      access the function's argument list.  On some machines, this is the
        !           612:      same as the frame pointer register.  On some machines, the hardware
        !           613:      determines which register this is.  On other machines, you can choose
        !           614:      any register you wish for this purpose.  It must in any case be a
        !           615:      fixed register according to `FIXED_REGISTERS'.
        !           616: 
        !           617: `STATIC_CHAIN_REGNUM'
        !           618:      The register number used for passing a function's static chain
        !           619:      pointer.  This is needed for languages such as Pascal and Algol where
        !           620:      functions defined within other functions can access the local
        !           621:      variables of the outer functions; it is not currently used because C
        !           622:      does not provide this feature.
        !           623: 
        !           624:      The static chain register need not be a fixed register.
        !           625: 
        !           626: `STRUCT_VALUE_REGNUM'
        !           627:      When a function's value's mode is `BLKmode', the value is not returned
        !           628:      according to `FUNCTION_VALUE'.  Instead, the caller passes the address
        !           629:      of a block of memory in which the value should be stored. 
        !           630:      `STRUCT_VALUE_REGNUM' is the register in which this address is passed.
        !           631: 
        !           632: 
        !           633: File: internals,  Node: Register Classes,  Next: Stack Layout,  Prev: Registers,  Up: Machine Macros
        !           634: 
        !           635: Register Classes
        !           636: ================
        !           637: 
        !           638: On many machines, the numbered registers are not all equivalent.  For
        !           639: example, certain registers may not be allowed for indexed addressing;
        !           640: certain registers may not be allowed in some instructions.  These machine
        !           641: restrictions are described to the compiler using "register classes".
        !           642: 
        !           643: You define a number of register classes, giving each one a name and saying
        !           644: which of the registers belong to it.  Then you can specify register classes
        !           645: that are allowed as operands to particular instruction patterns.
        !           646: 
        !           647: In general, each register will belong to several classes.  In fact, one
        !           648: class must be named `ALL_REGS' and contain all the registers.  Another
        !           649: class must be named `NO_REGS' and contain no registers.  Often the union of
        !           650: two classes will be another class; however, this is not required.
        !           651: 
        !           652: One of the classes must be named `GENERAL_REGS'.  There is nothing terribly
        !           653: special about the name, but the operand constraint letters `r' and `g'
        !           654: specify this class.  If `GENERAL_REGS' is the same as `ALL_REGS', just
        !           655: define it as a macro which expands to `ALL_REGS'.
        !           656: 
        !           657: The way classes other than `GENERAL_REGS' are specified in operand
        !           658: constraints is through machine-dependent operand constraint letters.  You
        !           659: can define such letters to correspond to various classes, then use them in
        !           660: operand constraints.
        !           661: 
        !           662: You should define a class for the union of two classes whenever some
        !           663: instruction allows both classes.  For example, if an instruction allows
        !           664: either a floating-point (coprocessor) register or a general register for a
        !           665: certain operand, you should define a class `FLOAT_OR_GENERAL_REGS' which
        !           666: includes both of them.  Otherwise you will get suboptimal code.
        !           667: 
        !           668: You must also specify certain redundant information about the register
        !           669: classes: for each class, which classes contain it and which ones are
        !           670: contained in it; for each pair of classes, the largest class contained in
        !           671: their union.
        !           672: 
        !           673: `enum reg_class'
        !           674:      An enumeral type that must be defined with all the register class
        !           675:      names as enumeral values.  `NO_REGS' must be first.  `ALL_REGS' must
        !           676:      be the last register class, followed by one more enumeral value,
        !           677:      `LIM_REG_CLASSES', which is not a register class but rather tells how
        !           678:      many classes there are.
        !           679: 
        !           680:      Each register class has a number, which is the value of casting the
        !           681:      class name to type `int'.  The number serves as an index in many of
        !           682:      the tables described below.
        !           683: 
        !           684: `REG_CLASS_NAMES'
        !           685:      An initializer containing the names of the register classes as C
        !           686:      string constants.  These names are used in writing some of the
        !           687:      debugging dumps.
        !           688: 
        !           689: `REG_CLASS_CONTENTS'
        !           690:      An initializer containing the contents of the register classes, as
        !           691:      integers which are bit masks.  The Nth integer specifies the contents
        !           692:      of class N.  The way the integer MASK is interpreted is that register
        !           693:      R is in the class if `MASK & (1 << R)' is 1.
        !           694: 
        !           695:      When the machine has more than 32 registers, an integer does not
        !           696:      suffice.  Then the integers are replaced by sub-initializers, braced
        !           697:      groupings containing several integers.  Each sub-initializer must be
        !           698:      suitable as an initializer for the type `HARD_REG_SET' which is
        !           699:      defined in `hard-reg-set.h'.
        !           700: 
        !           701: `REGNO_REG_CLASS (REGNO)'
        !           702:      A C expression whose value is a register class containing hard
        !           703:      regiSTER REGNO.  In general there is more that one such class; choose
        !           704:      a class which is "minimal", meaning that no smaller class also
        !           705:      contains the register.
        !           706: 
        !           707: `INDEX_REG_CLASS'
        !           708:      A macro whose definition is the name of the class to which a valid
        !           709:      index register must belong.
        !           710: 
        !           711: `REG_CLASS_FROM_LETTER (CHAR)'
        !           712:      A C expression which defines the machine-dependent operand constraint
        !           713:      letters for register classes.  If CHAR is such a letter, the value
        !           714:      should be the register class corresponding to it.  Otherwise, the
        !           715:      value should be `NO_REGS'.
        !           716: 
        !           717: `REGNO_OK_FOR_BASE_P (NUM)'
        !           718:      A C expression which is nonzero if register number NUM is suitable for
        !           719:      use as a base register in operand addresses.  It may be either a
        !           720:      suitable hard register or a pseudo register that has been allocated
        !           721:      such a hard register.
        !           722: 
        !           723: `REGNO_OK_FOR_INDEX_P (NUM)'
        !           724:      A C expression which is nonzero if register number NUM is suitable for
        !           725:      use as an index register in operand addresses.  It may be either a
        !           726:      suitable hard register or a pseudo register that has been allocated
        !           727:      such a hard register.
        !           728: 
        !           729:      The difference between an index register and a base register is that
        !           730:      the index register may be scaled.  If an address involves the sum of
        !           731:      two registers, neither one of them scaled, then either one may be
        !           732:      labeled the ``base'' and the other the ``index''; but whichever
        !           733:      labeling is used must fit the machine's constraints of which registers
        !           734:      may serve in each capacity.  The compiler will try both labelings,
        !           735:      looking for one that is valid, and reload one or both registers only
        !           736:      if neither labeling works.
        !           737: 
        !           738: `PREFERRED_RELOAD_CLASS (X, CLASS)'
        !           739:      A C expression that places additional restrictions on the register
        !           740:      class to use when it is necessary to copy value X into a register in
        !           741:      class CLASS.  The value is a register class; perhaps CLASS, or perhaps
        !           742:      another, smaller class.  CLASS is always safe as a value.  In fact,
        !           743:      the definition
        !           744: 
        !           745:           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
        !           746: 
        !           747: 
        !           748:      is always safe.  However, sometimes returning a more restrictive class
        !           749:      makes better code.  For example, on the 68000, when X is an integer
        !           750:      constant that is in range for a `moveq' instruction, the value of this
        !           751:      macro is always `DATA_REGS' as long as CLASS includes the data
        !           752:      registers.  Requiring a data register guarantees that a `moveq' will
        !           753:      be used.
        !           754: 
        !           755: `CLASS_MAX_NREGS (CLASS, MODE)'
        !           756:      A C expression for the maximum number of consecutive registers of
        !           757:      cLASS CLASS needed to hold a value of mode MODE.
        !           758: 
        !           759:      This is closely related to the macro `HARD_REGNO_NREGS'.  In fact, the
        !           760:      value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be the
        !           761:      maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO values
        !           762:      in the class CLASS.
        !           763: 
        !           764:      This macro helps control the handling of multiple-word values in the
        !           765:      reload pass.
        !           766: 
        !           767: Two other special macros describe which constants fit which constraint
        !           768: letters.
        !           769: 
        !           770: `CONST_OK_FOR_LETTER_P (VALUE, C)'
        !           771:      A C expression that defines the machine-dependent operand constraint
        !           772:      letters that specify particular ranges of integer values.  If C is one
        !           773:      of those letters, the expression should check that VALUE, an integer,
        !           774:      is in the appropriate range and return 1 if so, 0 otherwise.  If C is
        !           775:      not one of those letters, the value should be 0 regardless of VALUE.
        !           776: 
        !           777: `CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)'
        !           778:      A C expression that defines the machine-dependent operand constraint
        !           779:      letters that specify particular ranges of floating values.  If C is
        !           780:      one of those letters, the expression should check that VALUE, an RTX
        !           781:      of code `const_double', is in the appropriate range and return 1 if
        !           782:      so, 0 otherwise.  If C is not one of those letters, the value should
        !           783:      be 0 regardless of VALUE.
        !           784: 
        !           785: 
        !           786: File: internals,  Node: Stack Layout,  Next: Library Names,  Prev: Register Classes,  Up: Machine Macros
        !           787: 
        !           788: Describing Stack Layout
        !           789: =======================
        !           790: 
        !           791: `STACK_GROWS_DOWNWARD'
        !           792:      Define this macro if pushing a word onto the stack moves the stack
        !           793:      pointer to a smaller address.
        !           794: 
        !           795:      When we say, ``define this macro if ...,'' it means that the compiler
        !           796:      checks this macro only with `#ifdef' so the precise definition used
        !           797:      does not matter.
        !           798: 
        !           799: `FRAME_GROWS_DOWNWARD'
        !           800:      Define this macro if the addresses of local variable slots are at
        !           801:      negative offsets from the frame pointer.
        !           802: 
        !           803: `STARTING_FRAME_OFFSET'
        !           804:      Offset from the frame pointer to the first local variable slot to be
        !           805:      allocated.
        !           806: 
        !           807:      If `FRAME_GROWS_DOWNWARD', the next slot's offset is found by
        !           808:      subtracting the length of the first slot from `STARTING_FRAME_OFFSET'.
        !           809:       Otherwise, it is found by adding the length of the first slot to the
        !           810:      value `STARTING_FRAME_OFFSET'.
        !           811: 
        !           812: `PUSH_ROUNDING (NPUSHED)'
        !           813:      A C expression that is the number of bytes actually pushed onto the
        !           814:      stack when an instruction attempts to push NPUSHED bytes.
        !           815: 
        !           816:      If the target machine does not have a push instruction, do not define
        !           817:      this macro.  That directs GNU CC to use an alternate strategy: to
        !           818:      allocate the entire argument block and then store the arguments into it.
        !           819: 
        !           820:      On some machines, the definition
        !           821: 
        !           822:           #define PUSH_ROUNDING(BYTES) (BYTES)
        !           823: 
        !           824: 
        !           825:      will suffice.  But on other machines, instructions that appear to push
        !           826:      one byte actually push two bytes in an attempt to maintain alignment. 
        !           827:      Then the definition should be
        !           828: 
        !           829:           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
        !           830: 
        !           831: 
        !           832: `FIRST_PARM_OFFSET'
        !           833:      Offset from the argument pointer register to the first argument's
        !           834:      address.
        !           835: 
        !           836: `RETURN_POPS_ARGS (FUNTYPE)'
        !           837:      A C expression that should be 1 if a function pops its own arguments
        !           838:      on returning, or 0 if the function pops no arguments and the caller
        !           839:      must therefore pop them all after the function returns.
        !           840: 
        !           841:      FUNTYPE is a C variable whose value is a tree node that describes the
        !           842:      function in question.  Normally it is a node of type `FUNCTION_TYPE'
        !           843:      that describes the data type of the function.  From this it is
        !           844:      possible to obtain the data types of the value and arguments (if known).
        !           845: 
        !           846:      When a call to a library function is being considered, FUNTYPE will
        !           847:      contain an identifier node for the library function.  Thus, if you
        !           848:      need to distinguish among various library functions, you can do so by
        !           849:      their names.  Note that ``library function'' in this context means a
        !           850:      function used to perform arithmetic, whose name is known specially in
        !           851:      the compiler and was not mentioned in the C code being compiled.
        !           852: 
        !           853:      On the Vax, all functions always pop their arguments, so the
        !           854:      definition of this macro is 1.  On the 68000, using the standard
        !           855:      calling convention, no functions pop their arguments, so the value of
        !           856:      the macro is always 0 in this case.  But an alternative calling
        !           857:      convention is available in which functions that take a fixed number of
        !           858:      arguments pop them but other functions (such as `printf') pop nothing
        !           859:      (the caller pops all).  When this convention is in use, FUNTYPE is
        !           860:      examined to determine whether a function takes a fixed number of
        !           861:      arguments.
        !           862: 
        !           863: `FUNCTION_VALUE (VALTYPE, FUNC)'
        !           864:      A C expression to create an RTX representing the place where a
        !           865:      function returns a value of data type VALTYPE.  VALTYPE is a tree node
        !           866:      representing a data type.  Write `TYPE_MODE (VALTYPE)' to get the
        !           867:      machine mode used to represent that type.  On many machines, only the
        !           868:      mode is relevant.  (Actually, on most machines, scalar values are
        !           869:      returned in the same place regardless of mode).
        !           870: 
        !           871:      If the precise function being called is known, FUNC is a tree node
        !           872:      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
        !           873:      makes it possible to use a different value-returning convention for
        !           874:      specific functions when all their calls are known.
        !           875: 
        !           876: `FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)'
        !           877:      Define this macro if the target machine has ``register windows'' so
        !           878:      that the register in which a function returns its value is not the
        !           879:      same as the one in which the caller sees the value.
        !           880: 
        !           881:      For such machines, `FUNCTION_VALUE' computes the register in which the
        !           882:      caller will see the value, and `FUNCTION_OUTGOING_VALUE' should be
        !           883:      defined in a similar fashion to tell the function where to put the
        !           884:      value.
        !           885: 
        !           886:      If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE' serves
        !           887:      both purposes.
        !           888: 
        !           889: `LIBCALL_VALUE (MODE)'
        !           890:      A C expression to create an RTX representing the place where a library
        !           891:      function returns a value of mode MODE.  If the precise function being
        !           892:      called is known, FUNC is a tree node (`FUNCTION_DECL') for it;
        !           893:      otherwise, FUNC is a null pointer.  This makes it possible to use a
        !           894:      different value-returning convention for specific functions when all
        !           895:      their calls are known.
        !           896: 
        !           897:      Note that ``library function'' in this context means a compiler
        !           898:      support routine, used to perform arithmetic, whose name is known
        !           899:      specially by the compiler and was not mentioned in the C code being
        !           900:      compiled.
        !           901: 
        !           902: `FUNCTION_VALUE_REGNO_P (REGNO)'
        !           903:      A C expression that is nonzero if REGNO is the number of a hard
        !           904:      register in which function values are sometimes returned.
        !           905: 
        !           906:      A register whose use for returning values is limited to serving as the
        !           907:      second of a pair (for a value of type `double', say) need not be
        !           908:      recognized by this macro.  So for most machines, this definition
        !           909:      suffices:
        !           910: 
        !           911:           #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
        !           912: 
        !           913: 
        !           914: `FUNCTION_ARG (CUM, MODE, TYPE, NAMED)'
        !           915:      A C expression that controls whether a function argument is passed in
        !           916:      a register, and which register.
        !           917: 
        !           918:      The arguments are CUM, which summarizes all the previous arguments;
        !           919:      MODE, the machine mode of the argument; TYPE, the data type of the
        !           920:      argument as a tree node or 0 if that is not known (which happens for C
        !           921:      support library functions); and NAMED, which is 1 for an ordinary
        !           922:      argument and 0 for nameless arguments that correspond to `...' in the
        !           923:      called function's prototype.
        !           924: 
        !           925:      The value of the expression should either be a `reg' RTX for the hard
        !           926:      register in which to pass the argument, or zero to pass the argument
        !           927:      on the stack.
        !           928: 
        !           929:      For the Vax and 68000, where normally all arguments are pushed, zero
        !           930:      suffices as a definition.
        !           931: 
        !           932: `FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)'
        !           933:      Define this macro if the target machine has ``register windows'', so
        !           934:      that the register in which a function sees an arguments is not
        !           935:      necessarily the same as the one in which the caller passed the argument.
        !           936: 
        !           937:      For such machines, `FUNCTION_ARG' computes the register in which the
        !           938:      caller passes the value, and `FUNCTION_INCOMING_ARG' should be defined
        !           939:      in a similar fashion to tell the function being called where the
        !           940:      arguments will arrive.
        !           941: 
        !           942:      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves both
        !           943:      purposes.
        !           944: 
        !           945: `FUNCTION_ARG_PARTIAL_NREGS (CUM, MODE, TYPE, NAMED)'
        !           946:      A C expression for the number of words, at the beginning of an
        !           947:      argument, must be put in registers.  The value must be zero for
        !           948:      arguments that are passed entirely in registers or that are entirely
        !           949:      pushed on the stack.
        !           950: 
        !           951:      On some machines, certain arguments must be passed partially in
        !           952:      registers and partially in memory.  On these machines, typically the
        !           953:      first N words of arguments are passed in registers, and the rest on
        !           954:      the stack.  If a multi-word argument (a `double' or a structure)
        !           955:      crosses that boundary, its first few words must be passed in registers
        !           956:      and the rest must be pushed.  This macro tells the compiler when this
        !           957:      occurs, and how many of the words should go in registers.
        !           958: 
        !           959:      `FUNCTION_ARG' for these arguments should return the first register to
        !           960:      be used by the caller for this argument; likewise
        !           961:      `FUNCTION_INCOMING_ARG', for the called function.
        !           962: 
        !           963: `CUMULATIVE_ARGS'
        !           964:      A C type for declaring a variable that is used as the first argument
        !           965:      of `FUNCTION_ARG' and other related values.  For some target machines,
        !           966:      the type `int' suffices and can hold the number of bytes of argument
        !           967:      so far.
        !           968: 
        !           969: `INIT_CUMULATIVE_ARGS (CUM)'
        !           970:      A C statement (sans semicolon) for initializing the variable CUM for
        !           971:      the state at the beginning of the argument list.  The variable has
        !           972:      type `CUMULATIVE_ARGS'.
        !           973: 
        !           974: `FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)'
        !           975:      Update the summarizer variable CUM to advance past an argument in the
        !           976:      argument list.  The values MODE, TYPE and NAMED describe that
        !           977:      argument.  Once this is done, the variable CUM is suitable for
        !           978:      analyzing the *following* argument with `FUNCTION_ARG', etc.
        !           979: 
        !           980: `FUNCTION_ARG_REGNO_P (REGNO)'
        !           981:      A C expression that is nonzero if REGNO is the number of a hard
        !           982:      register in which function arguments are sometimes passed.  This does
        !           983:      *not* include implicit arguments such as the static chain and the
        !           984:      structure-value address.  On many machines, no registers can be used
        !           985:      for this purpose since all function arguments are pushed on the stack.
        !           986: 
        !           987: `FUNCTION_PROLOGUE (FILE, SIZE)'
        !           988:      A C compound statement that outputs the assembler code for entry to a
        !           989:      function.  The prologue is responsible for setting up the stack frame,
        !           990:      initializing the frame pointer register, saving registers that must be
        !           991:      saved, and allocating SIZE additional bytes of storage for the local
        !           992:      variables.  SIZE is an integer.  FILE is a stdio stream to which the
        !           993:      assembler code should be output.
        !           994: 
        !           995:      The label for the beginning of the function need not be output by this
        !           996:      macro.  That has already been done when the macro is run.
        !           997: 
        !           998:      To determine which registers to save, the macro can refer to the array
        !           999:      `regs_ever_live': element R is nonzero if hard register R is used
        !          1000:      anywhere within the function.  This implies the function prologue
        !          1001:      should save register R, but not if it is one of the call-used registers.
        !          1002: 
        !          1003:      On machines where functions may or may not have frame-pointers, the
        !          1004:      function entry code must vary accordingly; it must set up the frame
        !          1005:      pointer if one is wanted, and not otherwise.  To determine whether a
        !          1006:      frame pointer is in wanted, the macro can refer to the variable
        !          1007:      `frame_pointer_needed'.  The variable's value will be 1 at run time in
        !          1008:      a function that needs a frame pointer.
        !          1009: 
        !          1010: `FUNCTION_PROFILER (FILE, LABELNO)'
        !          1011:      A C statement or compound statement to output to FILE some assembler
        !          1012:      code to call the profiling subroutine `mcount'.  Before calling, the
        !          1013:      assembler code must load the address of a counter variable into a
        !          1014:      register where `mcount' expects to find the address.  The name of this
        !          1015:      variable is `LP' followed by the number LABELNO, so you would generate
        !          1016:      the name using `LP%d' in a `fprintf'.
        !          1017: 
        !          1018:      The details of how the address should be passed to `mcount' are
        !          1019:      determined by your operating system environment, not by GNU CC.  To
        !          1020:      figure them out, compile a small program for profiling using the
        !          1021:      system's installed C compiler and look at the assembler code that
        !          1022:      results.
        !          1023: 
        !          1024: `EXIT_IGNORES_STACK'
        !          1025:      Define this macro as a C expression that is nonzero if the return
        !          1026:      instruction or the function epilogue ignores the value of the stack
        !          1027:      pointer; in other words, if it is safe to delete an instruction to
        !          1028:      adjust the stack pointer before a return from the function.
        !          1029: 
        !          1030:      Note that this macro's value is relevant only for for which frame
        !          1031:      pointers are maintained.  It is never possible to delete a final stack
        !          1032:      adjustment in a function that has no frame pointer, and the compiler
        !          1033:      knows this regardless of `EXIT_IGNORES_STACK'.
        !          1034: 
        !          1035: `FUNCTION_EPILOGUE (FILE, SIZE)'
        !          1036:      A C compound statement that outputs the assembler code for exit from a
        !          1037:      function.  The epilogue is responsible for restoring the saved
        !          1038:      registers and stack pointer to their values when the function was
        !          1039:      called, and returning control to the caller.  This macro takes the
        !          1040:      same arguments as the macro `FUNCTION_PROLOGUE', and the registers to
        !          1041:      restore are determined from `regs_ever_live' and `CALL_USED_REGISTERS'
        !          1042:      in the same way.
        !          1043: 
        !          1044:      On some machines, there is a single instruction that does all the work
        !          1045:      of returning from the function.  On these machines, give that
        !          1046:      instruction the name `return' and do not define the macro
        !          1047:      `FUNCTION_EPILOGUE' at all.
        !          1048: 
        !          1049:      On machines where functions may or may not have frame-pointers, the
        !          1050:      function exit code must vary accordingly.  Sometimes the code for
        !          1051:      these two cases is completely different.  To determine whether a frame
        !          1052:      pointer is in wanted, the macro can refer to the variable
        !          1053:      `frame_pointer_needed'.  The variable's value will be 1 at run time in
        !          1054:      a function that needs a frame pointer.
        !          1055: 
        !          1056:      On some machines, some functions pop their arguments on exit while
        !          1057:      others leave that for the caller to do.  For example, the 68020 when
        !          1058:      given `-mrtd' pops arguments in functions that take a fixed number of
        !          1059:      arguments.
        !          1060: 
        !          1061:      Your definition of the macro `RETURN_POPS_ARGS' decides which
        !          1062:      functions pop their own arguments.  `FUNCTION_EPILOGUE' needs to know
        !          1063:      what was decided.  The variable `current_function_pops_args' is
        !          1064:      nonzero if the function should pop its own arguments.  If so, use the
        !          1065:      variable `current_function_args_size' as the number of bytes to pop.
        !          1066: 
        !          1067: `FIX_FRAME_POINTER_ADDRESS (ADDR, DEPTH)'
        !          1068:      A C compound statement to alter a memory address that uses the frame
        !          1069:      pointer register so that it uses the stack pointer register instead. 
        !          1070:      This must be done in the instructions that load parameter values into
        !          1071:      registers, when the reload pass determines that a frame pointer is not
        !          1072:      necessary for the function.  ADDR will be a C variable name, and the
        !          1073:      updated address should be stored in that variable.  DEPTH will be the
        !          1074:      current depth of stack temporaries (number of bytes of arguments
        !          1075:      currently pushed).  The change in offset between a
        !          1076:      frame-pointer-relative address and a stack-pointer-relative address
        !          1077:      must include DEPTH.
        !          1078: 
        !          1079:      Even if your machine description specifies there will always be a
        !          1080:      frame pointer in the frame pointer register, you must still define
        !          1081:      `FIX_FRAME_POINTER_ADDRESS', but the definition will never be executed
        !          1082:      at run time, so it may be empty.
        !          1083: 
        !          1084: 
        !          1085: File: internals,  Node: Library Names,  Next: Addressing Modes,  Prev: Stack Layout,  Up: Machine Macros
        !          1086: 
        !          1087: Library Subroutine Names
        !          1088: ========================
        !          1089: 
        !          1090: `UDIVSI3_LIBCALL'
        !          1091:      A C string constant giving the name of the function to call for
        !          1092:      division of a full-word by a full-word.  If you do not define this
        !          1093:      macro, the default name is used, which is `_udivsi3', a function
        !          1094:      defined in `gnulib'.
        !          1095: 
        !          1096: `UMODSI3_LIBCALL'
        !          1097:      A C string constant giving the name of the function to call for the
        !          1098:      remainder in division of a full-word by a full-word.  If you do not
        !          1099:      define this macro, the default name is used, which is `_umodsi3', a
        !          1100:      function defined in `gnulib'.
        !          1101: 
        !          1102: `TARGET_MEM_FUNCTIONS'
        !          1103:      Define this macro if GNU CC should generate calls to the System V (and
        !          1104:      ANSI C) library functions `memcpy' and `memset' rather than the BSD
        !          1105:      functions `bcopy' and `bzero'.
        !          1106: 
        !          1107: 
        !          1108: File: internals,  Node: Addressing Modes,  Next: Misc,  Prev: Library Names,  Up: Machine Macros
        !          1109: 
        !          1110: Addressing Modes
        !          1111: ================
        !          1112: 
        !          1113: `HAVE_POST_INCREMENT'
        !          1114:      Define this macro if the machine supports post-increment addressing.
        !          1115: 
        !          1116: `HAVE_PRE_INCREMENT'
        !          1117: `HAVE_POST_DECREMENT'
        !          1118: `HAVE_PRE_DECREMENT'
        !          1119:      Similar for other kinds of addressing.
        !          1120: 
        !          1121: `CONSTANT_ADDRESS_P (X)'
        !          1122:      A C expression that is 1 if the RTX X is a constant whose value is an
        !          1123:      integer.  This includes integers whose values are not explicitly
        !          1124:      known, such as `symbol_ref' and `label_ref' expressions and `const'
        !          1125:      arithmetic expressions.
        !          1126: 
        !          1127:      On most machines, this can be defined as `CONSTANT_P (X)', but a few
        !          1128:      machines are more restrictive in which constant addresses are supported.
        !          1129: 
        !          1130: `MAX_REGS_PER_ADDRESS'
        !          1131:      A number, the maximum number of registers that can appear in a valid
        !          1132:      memory address.
        !          1133: 
        !          1134: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)'
        !          1135:      A C compound statement with a conditional `goto LABEL;' executed if X
        !          1136:      (an RTX) is a legitimate memory address on the target machine for a
        !          1137:      memory operand of mode MODE.
        !          1138: 
        !          1139:      It usually pays to define several simpler macros to serve as
        !          1140:      subroutines for this one.  Otherwise it may be too complicated to
        !          1141:      understand.
        !          1142: 
        !          1143:      This macro must exist in two variants: a strict variant and a
        !          1144:      non-strict one.  The strict variant is used in the reload pass.  It
        !          1145:      must be defined so that any pseudo-register that has not been
        !          1146:      allocated a hard register is considered a memory reference.  In
        !          1147:      contexts where some kind of register is required, a pseudo-register
        !          1148:      with no hard register must be rejected.
        !          1149: 
        !          1150:      The non-strict variant is used in other passes.  It must be defined to
        !          1151:      accept all pseudo-registers in every context where some kind of
        !          1152:      register is required.
        !          1153: 
        !          1154:      Compiler source files that want to use the strict variant of this
        !          1155:      macro define the macro `REG_OK_STRICT'.  You should use an `#ifdef
        !          1156:      REG_OK_STRICT' conditional to define the strict variant in that case
        !          1157:      and the non-strict variant otherwise.
        !          1158: 
        !          1159:      Typically among the subroutines used to define
        !          1160:      `GO_IF_LEGITIMATE_ADDRESS' are subroutines to check for acceptable
        !          1161:      registers for various purposes (one for base registers, one for index
        !          1162:      registers, and so on).  Then only these subroutine macros need have
        !          1163:      two variants; the higher levels of macros may be the same whether
        !          1164:      strict or not.
        !          1165: 
        !          1166: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)'
        !          1167:      A C compound statement that attempts to replace X with a valid memory
        !          1168:      address for an operand of mode MODE.  WIN will be a C statement label
        !          1169:      elsewhere in the code; the macro definition may use
        !          1170: 
        !          1171:           GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
        !          1172: 
        !          1173: 
        !          1174:      to avoid further processing if the address has become legitimate.
        !          1175: 
        !          1176:      X will always be the result of a call to `break_out_memory_refs', and
        !          1177:      OLDX will be the operand that was given to that function to produce X.
        !          1178: 
        !          1179:      The code generated by this macro should not alter the substructure of
        !          1180:      X.  If it transforms X into a more legitimate form, it should assign X
        !          1181:      (which will always be a C variable) a new value.
        !          1182: 
        !          1183:      It is not necessary for this macro to come up with a legitimate
        !          1184:      address.  The compiler has standard ways of doing so in all cases.  In
        !          1185:      fact, it is safe for this macro to do nothing.  But often a
        !          1186:      machine-dependent strategy can generate better code.
        !          1187: 
        !          1188: `GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)'
        !          1189:      A C statement or compound statement with a conditional `goto LABEL;'
        !          1190:      executed if memory address X (an RTX) can have different meanings
        !          1191:      depending on the machine mode of the memory reference it is used for.
        !          1192: 
        !          1193:      Autoincrement and autodecrement addresses typically have
        !          1194:      mode-dependent effects because the amount of the increment or
        !          1195:      decrement is the size of the operand being addressed.  Some machines
        !          1196:      have other mode-dependent addresses.  Many RISC machines have no
        !          1197:      mode-dependent addresses.
        !          1198: 
        !          1199:      You may assume that ADDR is a valid address for the machine.
        !          1200: 
        !          1201: `LEGITIMATE_CONSTANT_P (X)'
        !          1202:      A C expression that is nonzero if X is a legitimate constant for an
        !          1203:      immediate operand on the target machine.  You can assume that either X
        !          1204:      is a `const_double' or it satisfies `CONSTANT_P', so you need not
        !          1205:      check these things.  In fact, `1' is a suitable definition for this
        !          1206:      macro on machines where any `const_double' is valid and anything
        !          1207:      `CONSTANT_P' is valid.
        !          1208: 
        !          1209: 

unix.superglobalmegacorp.com

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