Annotation of gcc/gcc.info-19, revision 1.1.1.4

1.1.1.4 ! root        1: This is Info file gcc.info, produced by Makeinfo-1.55 from the input
1.1       root        2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
1.1.1.2   root        6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
1.1.1.4 ! root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation,
        !            10: Inc.
1.1       root       11: 
                     12:    Permission is granted to make and distribute verbatim copies of this
                     13: manual provided the copyright notice and this permission notice are
                     14: preserved on all copies.
                     15: 
                     16:    Permission is granted to copy and distribute modified versions of
                     17: this manual under the conditions for verbatim copying, provided also
1.1.1.4 ! root       18: that the sections entitled "GNU General Public License," "Funding for
        !            19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
        !            20: included exactly as in the original, and provided that the entire
        !            21: resulting derived work is distributed under the terms of a permission
        !            22: notice identical to this one.
1.1       root       23: 
                     24:    Permission is granted to copy and distribute translations of this
                     25: manual into another language, under the above conditions for modified
                     26: versions, except that the sections entitled "GNU General Public
1.1.1.4 ! root       27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
        !            28: `Look And Feel'", and this permission notice, may be included in
        !            29: translations approved by the Free Software Foundation instead of in the
        !            30: original English.
1.1       root       31: 
                     32: 
1.1.1.4 ! root       33: File: gcc.info,  Node: Obsolete Register Macros,  Prev: Stack Registers,  Up: Registers
1.1.1.2   root       34: 
1.1.1.4 ! root       35: Obsolete Macros for Controlling Register Usage
        !            36: ----------------------------------------------
1.1.1.2   root       37: 
1.1.1.4 ! root       38:    These features do not work very well.  They exist because they used
        !            39: to be required to generate correct code for the 80387 coprocessor of the
        !            40: 80386.  They are no longer used by that machine description and may be
        !            41: removed in a later version of the compiler.  Don't use them!
        !            42: 
        !            43: `OVERLAPPING_REGNO_P (REGNO)'
        !            44:      If defined, this is a C expression whose value is nonzero if hard
        !            45:      register number REGNO is an overlapping register.  This means a
        !            46:      hard register which overlaps a hard register with a different
        !            47:      number.  (Such overlap is undesirable, but occasionally it allows
        !            48:      a machine to be supported which otherwise could not be.)  This
        !            49:      macro must return nonzero for *all* the registers which overlap
        !            50:      each other.  GNU CC can use an overlapping register only in
        !            51:      certain limited ways.  It can be used for allocation within a
        !            52:      basic block, and may be spilled for reloading; that is all.
        !            53: 
        !            54:      If this macro is not defined, it means that none of the hard
        !            55:      registers overlap each other.  This is the usual situation.
        !            56: 
        !            57: `INSN_CLOBBERS_REGNO_P (INSN, REGNO)'
        !            58:      If defined, this is a C expression whose value should be nonzero if
        !            59:      the insn INSN has the effect of mysteriously clobbering the
        !            60:      contents of hard register number REGNO.  By "mysterious" we mean
        !            61:      that the insn's RTL expression doesn't describe such an effect.
        !            62: 
        !            63:      If this macro is not defined, it means that no insn clobbers
        !            64:      registers mysteriously.  This is the usual situation; all else
        !            65:      being equal, it is best for the RTL expression to show all the
        !            66:      activity.
        !            67: 
        !            68: `PRESERVE_DEATH_INFO_REGNO_P (REGNO)'
        !            69:      If defined, this is a C expression whose value is nonzero if
        !            70:      accurate `REG_DEAD' notes are needed for hard register number REGNO
        !            71:      at the time of outputting the assembler code.  When this is so, a
        !            72:      few optimizations that take place after register allocation and
        !            73:      could invalidate the death notes are not done when this register is
        !            74:      involved.
        !            75: 
        !            76:      You would arrange to preserve death info for a register when some
        !            77:      of the code in the machine description which is executed to write
        !            78:      the assembler code looks at the death notes.  This is necessary
        !            79:      only when the actual hardware feature which GNU CC thinks of as a
        !            80:      register is not actually a register of the usual sort.  (It might,
        !            81:      for example, be a hardware stack.)
1.1.1.3   root       82: 
1.1.1.4 ! root       83:      If this macro is not defined, it means that no death notes need to
        !            84:      be preserved.  This is the usual situation.
1.1.1.2   root       85: 
                     86: 
1.1.1.4 ! root       87: File: gcc.info,  Node: Register Classes,  Next: Stack and Calling,  Prev: Registers,  Up: Target Macros
1.1.1.2   root       88: 
1.1.1.4 ! root       89: Register Classes
        !            90: ================
1.1.1.2   root       91: 
1.1.1.4 ! root       92:    On many machines, the numbered registers are not all equivalent.
        !            93: For example, certain registers may not be allowed for indexed
        !            94: addressing; certain registers may not be allowed in some instructions.
        !            95: These machine restrictions are described to the compiler using
        !            96: "register classes".
        !            97: 
        !            98:    You define a number of register classes, giving each one a name and
        !            99: saying which of the registers belong to it.  Then you can specify
        !           100: register classes that are allowed as operands to particular instruction
        !           101: patterns.
        !           102: 
        !           103:    In general, each register will belong to several classes.  In fact,
        !           104: one class must be named `ALL_REGS' and contain all the registers.
        !           105: Another class must be named `NO_REGS' and contain no registers.  Often
        !           106: the union of two classes will be another class; however, this is not
        !           107: required.
        !           108: 
        !           109:    One of the classes must be named `GENERAL_REGS'.  There is nothing
        !           110: terribly special about the name, but the operand constraint letters `r'
        !           111: and `g' specify this class.  If `GENERAL_REGS' is the same as
        !           112: `ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
        !           113: 
        !           114:    Order the classes so that if class X is contained in class Y then X
        !           115: has a lower class number than Y.
        !           116: 
        !           117:    The way classes other than `GENERAL_REGS' are specified in operand
        !           118: constraints is through machine-dependent operand constraint letters.
        !           119: You can define such letters to correspond to various classes, then use
        !           120: them in operand constraints.
        !           121: 
        !           122:    You should define a class for the union of two classes whenever some
        !           123: instruction allows both classes.  For example, if an instruction allows
        !           124: either a floating point (coprocessor) register or a general register
        !           125: for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
        !           126: which includes both of them.  Otherwise you will get suboptimal code.
        !           127: 
        !           128:    You must also specify certain redundant information about the
        !           129: register classes: for each class, which classes contain it and which
        !           130: ones are contained in it; for each pair of classes, the largest class
        !           131: contained in their union.
        !           132: 
        !           133:    When a value occupying several consecutive registers is expected in a
        !           134: certain class, all the registers used must belong to that class.
        !           135: Therefore, register classes cannot be used to enforce a requirement for
        !           136: a register pair to start with an even-numbered register.  The way to
        !           137: specify this requirement is with `HARD_REGNO_MODE_OK'.
        !           138: 
        !           139:    Register classes used for input-operands of bitwise-and or shift
        !           140: instructions have a special requirement: each such class must have, for
        !           141: each fixed-point machine mode, a subclass whose registers can transfer
        !           142: that mode to or from memory.  For example, on some machines, the
        !           143: operations for single-byte values (`QImode') are limited to certain
        !           144: registers.  When this is so, each register class that is used in a
        !           145: bitwise-and or shift instruction must have a subclass consisting of
        !           146: registers from which single-byte values can be loaded or stored.  This
        !           147: is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
        !           148: return.
        !           149: 
        !           150: `enum reg_class'
        !           151:      An enumeral type that must be defined with all the register class
        !           152:      names as enumeral values.  `NO_REGS' must be first.  `ALL_REGS'
        !           153:      must be the last register class, followed by one more enumeral
        !           154:      value, `LIM_REG_CLASSES', which is not a register class but rather
        !           155:      tells how many classes there are.
        !           156: 
        !           157:      Each register class has a number, which is the value of casting
        !           158:      the class name to type `int'.  The number serves as an index in
        !           159:      many of the tables described below.
        !           160: 
        !           161: `N_REG_CLASSES'
        !           162:      The number of distinct register classes, defined as follows:
        !           163: 
        !           164:           #define N_REG_CLASSES (int) LIM_REG_CLASSES
        !           165: 
        !           166: `REG_CLASS_NAMES'
        !           167:      An initializer containing the names of the register classes as C
        !           168:      string constants.  These names are used in writing some of the
        !           169:      debugging dumps.
        !           170: 
        !           171: `REG_CLASS_CONTENTS'
        !           172:      An initializer containing the contents of the register classes, as
        !           173:      integers which are bit masks.  The Nth integer specifies the
        !           174:      contents of class N.  The way the integer MASK is interpreted is
        !           175:      that register R is in the class if `MASK & (1 << R)' is 1.
        !           176: 
        !           177:      When the machine has more than 32 registers, an integer does not
        !           178:      suffice.  Then the integers are replaced by sub-initializers,
        !           179:      braced groupings containing several integers.  Each
        !           180:      sub-initializer must be suitable as an initializer for the type
        !           181:      `HARD_REG_SET' which is defined in `hard-reg-set.h'.
        !           182: 
        !           183: `REGNO_REG_CLASS (REGNO)'
        !           184:      A C expression whose value is a register class containing hard
        !           185:      register REGNO.  In general there is more than one such class;
        !           186:      choose a class which is "minimal", meaning that no smaller class
        !           187:      also contains the register.
        !           188: 
        !           189: `BASE_REG_CLASS'
        !           190:      A macro whose definition is the name of the class to which a valid
        !           191:      base register must belong.  A base register is one used in an
        !           192:      address which is the register value plus a displacement.
        !           193: 
        !           194: `INDEX_REG_CLASS'
        !           195:      A macro whose definition is the name of the class to which a valid
        !           196:      index register must belong.  An index register is one used in an
        !           197:      address where its value is either multiplied by a scale factor or
        !           198:      added to another register (as well as added to a displacement).
        !           199: 
        !           200: `REG_CLASS_FROM_LETTER (CHAR)'
        !           201:      A C expression which defines the machine-dependent operand
        !           202:      constraint letters for register classes.  If CHAR is such a
        !           203:      letter, the value should be the register class corresponding to
        !           204:      it.  Otherwise, the value should be `NO_REGS'.  The register
        !           205:      letter `r', corresponding to class `GENERAL_REGS', will not be
        !           206:      passed to this macro; you do not need to handle it.
        !           207: 
        !           208: `REGNO_OK_FOR_BASE_P (NUM)'
        !           209:      A C expression which is nonzero if register number NUM is suitable
        !           210:      for use as a base register in operand addresses.  It may be either
        !           211:      a suitable hard register or a pseudo register that has been
        !           212:      allocated such a hard register.
        !           213: 
        !           214: `REGNO_OK_FOR_INDEX_P (NUM)'
        !           215:      A C expression which is nonzero if register number NUM is suitable
        !           216:      for use as an index register in operand addresses.  It may be
        !           217:      either a suitable hard register or a pseudo register that has been
        !           218:      allocated such a hard register.
1.1.1.2   root      219: 
1.1.1.4 ! root      220:      The difference between an index register and a base register is
        !           221:      that the index register may be scaled.  If an address involves the
        !           222:      sum of two registers, neither one of them scaled, then either one
        !           223:      may be labeled the "base" and the other the "index"; but whichever
        !           224:      labeling is used must fit the machine's constraints of which
        !           225:      registers may serve in each capacity.  The compiler will try both
        !           226:      labelings, looking for one that is valid, and will reload one or
        !           227:      both registers only if neither labeling works.
1.1.1.2   root      228: 
1.1.1.4 ! root      229: `PREFERRED_RELOAD_CLASS (X, CLASS)'
        !           230:      A C expression that places additional restrictions on the register
        !           231:      class to use when it is necessary to copy value X into a register
        !           232:      in class CLASS.  The value is a register class; perhaps CLASS, or
        !           233:      perhaps another, smaller class.  On many machines, the following
        !           234:      definition is safe:
        !           235: 
        !           236:           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
        !           237: 
        !           238:      Sometimes returning a more restrictive class makes better code.
        !           239:      For example, on the 68000, when X is an integer constant that is
        !           240:      in range for a `moveq' instruction, the value of this macro is
        !           241:      always `DATA_REGS' as long as CLASS includes the data registers.
        !           242:      Requiring a data register guarantees that a `moveq' will be used.
        !           243: 
        !           244:      If X is a `const_double', by returning `NO_REGS' you can force X
        !           245:      into a memory constant.  This is useful on certain machines where
        !           246:      immediate floating values cannot be loaded into certain kinds of
        !           247:      registers.
1.1.1.2   root      248: 
1.1.1.4 ! root      249: `PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS)'
        !           250:      Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of
        !           251:      input reloads.  If you don't define this macro, the default is to
        !           252:      use CLASS, unchanged.
        !           253: 
        !           254: `LIMIT_RELOAD_CLASS (MODE, CLASS)'
        !           255:      A C expression that places additional restrictions on the register
        !           256:      class to use when it is necessary to be able to hold a value of
        !           257:      mode MODE in a reload register for which class CLASS would
        !           258:      ordinarily be used.
        !           259: 
        !           260:      Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
        !           261:      there are certain modes that simply can't go in certain reload
        !           262:      classes.
        !           263: 
        !           264:      The value is a register class; perhaps CLASS, or perhaps another,
        !           265:      smaller class.
        !           266: 
        !           267:      Don't define this macro unless the target machine has limitations
        !           268:      which require the macro to do something nontrivial.
        !           269: 
        !           270: `SECONDARY_RELOAD_CLASS (CLASS, MODE, X)'
        !           271: `SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)'
        !           272: `SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)'
        !           273:      Many machines have some registers that cannot be copied directly
        !           274:      to or from memory or even from other types of registers.  An
        !           275:      example is the `MQ' register, which on most machines, can only be
        !           276:      copied to or from general registers, but not memory.  Some
        !           277:      machines allow copying all registers to and from memory, but
        !           278:      require a scratch register for stores to some memory locations
        !           279:      (e.g., those with symbolic address on the RT, and those with
        !           280:      certain symbolic address on the Sparc when compiling PIC).  In
        !           281:      some cases, both an intermediate and a scratch register are
        !           282:      required.
        !           283: 
        !           284:      You should define these macros to indicate to the reload phase
        !           285:      that it may need to allocate at least one register for a reload in
        !           286:      addition to the register to contain the data.  Specifically, if
        !           287:      copying X to a register CLASS in MODE requires an intermediate
        !           288:      register, you should define `SECONDARY_INPUT_RELOAD_CLASS' to
        !           289:      return the largest register class all of whose registers can be
        !           290:      used as intermediate registers or scratch registers.
        !           291: 
        !           292:      If copying a register CLASS in MODE to X requires an intermediate
        !           293:      or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' should be
        !           294:      defined to return the largest register class required.  If the
        !           295:      requirements for input and output reloads are the same, the macro
        !           296:      `SECONDARY_RELOAD_CLASS' should be used instead of defining both
        !           297:      macros identically.
        !           298: 
        !           299:      The values returned by these macros are often `GENERAL_REGS'.
        !           300:      Return `NO_REGS' if no spare register is needed; i.e., if X can be
        !           301:      directly copied to or from a register of CLASS in MODE without
        !           302:      requiring a scratch register.  Do not define this macro if it
        !           303:      would always return `NO_REGS'.
        !           304: 
        !           305:      If a scratch register is required (either with or without an
        !           306:      intermediate register), you should define patterns for
        !           307:      `reload_inM' or `reload_outM', as required (*note Standard
        !           308:      Names::..  These patterns, which will normally be implemented with
        !           309:      a `define_expand', should be similar to the `movM' patterns,
        !           310:      except that operand 2 is the scratch register.
        !           311: 
        !           312:      Define constraints for the reload register and scratch register
        !           313:      that contain a single register class.  If the original reload
        !           314:      register (whose class is CLASS) can meet the constraint given in
        !           315:      the pattern, the value returned by these macros is used for the
        !           316:      class of the scratch register.  Otherwise, two additional reload
        !           317:      registers are required.  Their classes are obtained from the
        !           318:      constraints in the insn pattern.
        !           319: 
        !           320:      X might be a pseudo-register or a `subreg' of a pseudo-register,
        !           321:      which could either be in a hard register or in memory.  Use
        !           322:      `true_regnum' to find out; it will return -1 if the pseudo is in
        !           323:      memory and the hard register number if it is in a register.
        !           324: 
        !           325:      These macros should not be used in the case where a particular
        !           326:      class of registers can only be copied to memory and not to another
        !           327:      class of registers.  In that case, secondary reload registers are
        !           328:      not needed and would not be helpful.  Instead, a stack location
        !           329:      must be used to perform the copy and the `movM' pattern should use
        !           330:      memory as a intermediate storage.  This case often occurs between
        !           331:      floating-point and general registers.
        !           332: 
        !           333: `SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)'
        !           334:      Certain machines have the property that some registers cannot be
        !           335:      copied to some other registers without using memory.  Define this
        !           336:      macro on those machines to be a C expression that is non-zero if
        !           337:      objects of mode M in registers of CLASS1 can only be copied to
        !           338:      registers of class CLASS2 by storing a register of CLASS1 into
        !           339:      memory and loading that memory location into a register of CLASS2.
        !           340: 
        !           341:      Do not define this macro if its value would always be zero.
        !           342: 
        !           343: `SECONDARY_MEMORY_NEEDED_RTX (MODE)'
        !           344:      Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
        !           345:      allocates a stack slot for a memory location needed for register
        !           346:      copies.  If this macro is defined, the compiler instead uses the
        !           347:      memory location defined by this macro.
        !           348: 
        !           349:      Do not define this macro if you do not define
        !           350:      `SECONDARY_MEMORY_NEEDED'.
        !           351: 
        !           352: `SECONDARY_MEMORY_NEEDED_MODE (MODE)'
        !           353:      When the compiler needs a secondary memory location to copy
        !           354:      between two registers of mode MODE, it normally allocates
        !           355:      sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
        !           356:      performs the store and load operations in a mode that many bits
        !           357:      wide and whose class is the same as that of MODE.
        !           358: 
        !           359:      This is right thing to do on most machines because it ensures that
        !           360:      all bits of the register are copied and prevents accesses to the
        !           361:      registers in a narrower mode, which some machines prohibit for
        !           362:      floating-point registers.
        !           363: 
        !           364:      However, this default behavior is not correct on some machines,
        !           365:      such as the DEC Alpha, that store short integers in floating-point
        !           366:      registers differently than in integer registers.  On those
        !           367:      machines, the default widening will not work correctly and you
        !           368:      must define this macro to suppress that widening in some cases.
        !           369:      See the file `alpha.h' for details.
        !           370: 
        !           371:      Do not define this macro if you do not define
        !           372:      `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
        !           373:      `BITS_PER_WORD' bits wide is correct for your machine.
        !           374: 
        !           375: `SMALL_REGISTER_CLASSES'
        !           376:      Normally the compiler avoids choosing registers that have been
        !           377:      explicitly mentioned in the rtl as spill registers (these
        !           378:      registers are normally those used to pass parameters and return
        !           379:      values).  However, some machines have so few registers of certain
        !           380:      classes that there would not be enough registers to use as spill
        !           381:      registers if this were done.
        !           382: 
        !           383:      Define `SMALL_REGISTER_CLASSES' on these machines.  When it is
        !           384:      defined, the compiler allows registers explicitly used in the rtl
        !           385:      to be used as spill registers but avoids extending the lifetime of
        !           386:      these registers.
        !           387: 
        !           388:      It is always safe to define this macro, but if you unnecessarily
        !           389:      define it, you will reduce the amount of optimizations that can be
        !           390:      performed in some cases.  If you do not define this macro when it
        !           391:      is required, the compiler will run out of spill registers and
        !           392:      print a fatal error message.  For most machines, you should not
        !           393:      define this macro.
        !           394: 
        !           395: `CLASS_LIKELY_SPILLED_P (CLASS)'
        !           396:      A C expression whose value is nonzero if pseudos that have been
        !           397:      assigned to registers of class CLASS would likely be spilled
        !           398:      because registers of CLASS are needed for spill registers.
        !           399: 
        !           400:      The default value of this macro returns 1 if CLASS has exactly one
        !           401:      register and zero otherwise.  On most machines, this default
        !           402:      should be used.  Only define this macro to some other expression
        !           403:      if pseudo allocated by `local-alloc.c' end up in memory because
        !           404:      their hard registers were needed for spill regisers.  If this
        !           405:      macro returns nonzero for those classes, those pseudos will only
        !           406:      be allocated by `global.c', which knows how to reallocate the
        !           407:      pseudo to another register.  If there would not be another
        !           408:      register available for reallocation, you should not change the
        !           409:      definition of this macro since the only effect of such a
        !           410:      definition would be to slow down register allocation.
        !           411: 
        !           412: `CLASS_MAX_NREGS (CLASS, MODE)'
        !           413:      A C expression for the maximum number of consecutive registers of
        !           414:      class CLASS needed to hold a value of mode MODE.
        !           415: 
        !           416:      This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
        !           417:      the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
        !           418:      the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
        !           419:      REGNO values in the class CLASS.
        !           420: 
        !           421:      This macro helps control the handling of multiple-word values in
        !           422:      the reload pass.
        !           423: 
        !           424: `CLASS_CANNOT_CHANGE_SIZE'
        !           425:      If defined, a C expression for a class that contains registers
        !           426:      which the compiler must always access in a mode that is the same
        !           427:      size as the mode in which it loaded the register, unless neither
        !           428:      mode is integral.
        !           429: 
        !           430:      For the example, loading 32-bit integer or floating-point objects
        !           431:      into floating-point registers on the Alpha extends them to 64-bits.
        !           432:      Therefore loading a 64-bit object and then storing it as a 32-bit
        !           433:      object does not store the low-order 32-bits, as would be the case
        !           434:      for a normal register.  Therefore, `alpha.h' defines this macro as
        !           435:      `FLOAT_REGS'.
        !           436: 
        !           437:    Three other special macros describe which operands fit which
        !           438: constraint letters.
        !           439: 
        !           440: `CONST_OK_FOR_LETTER_P (VALUE, C)'
        !           441:      A C expression that defines the machine-dependent operand
        !           442:      constraint letters that specify particular ranges of integer
        !           443:      values.  If C is one of those letters, the expression should check
        !           444:      that VALUE, an integer, is in the appropriate range and return 1
        !           445:      if so, 0 otherwise.  If C is not one of those letters, the value
        !           446:      should be 0 regardless of VALUE.
        !           447: 
        !           448: `CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)'
        !           449:      A C expression that defines the machine-dependent operand
        !           450:      constraint letters that specify particular ranges of
        !           451:      `const_double' values.
        !           452: 
        !           453:      If C is one of those letters, the expression should check that
        !           454:      VALUE, an RTX of code `const_double', is in the appropriate range
        !           455:      and return 1 if so, 0 otherwise.  If C is not one of those
        !           456:      letters, the value should be 0 regardless of VALUE.
        !           457: 
        !           458:      `const_double' is used for all floating-point constants and for
        !           459:      `DImode' fixed-point constants.  A given letter can accept either
        !           460:      or both kinds of values.  It can use `GET_MODE' to distinguish
        !           461:      between these kinds.
        !           462: 
        !           463: `EXTRA_CONSTRAINT (VALUE, C)'
        !           464:      A C expression that defines the optional machine-dependent
        !           465:      constraint letters that can be used to segregate specific types of
        !           466:      operands, usually memory references, for the target machine.
        !           467:      Normally this macro will not be defined.  If it is required for a
        !           468:      particular target machine, it should return 1 if VALUE corresponds
        !           469:      to the operand type represented by the constraint letter C.  If C
        !           470:      is not defined as an extra constraint, the value returned should
        !           471:      be 0 regardless of VALUE.
        !           472: 
        !           473:      For example, on the ROMP, load instructions cannot have their
        !           474:      output in r0 if the memory reference contains a symbolic address.
        !           475:      Constraint letter `Q' is defined as representing a memory address
        !           476:      that does *not* contain a symbolic address.  An alternative is
        !           477:      specified with a `Q' constraint on the input and `r' on the
        !           478:      output.  The next alternative specifies `m' on the input and a
        !           479:      register class that does not include r0 on the output.
1.1.1.2   root      480: 
                    481: 
1.1.1.4 ! root      482: File: gcc.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Register Classes,  Up: Target Macros
1.1.1.2   root      483: 
1.1.1.4 ! root      484: Stack Layout and Calling Conventions
        !           485: ====================================
1.1.1.2   root      486: 
1.1.1.4 ! root      487:    This describes the stack layout and calling conventions.
1.1.1.2   root      488: 
1.1.1.4 ! root      489: * Menu:
1.1.1.2   root      490: 
1.1.1.4 ! root      491: * Frame Layout::
        !           492: * Frame Registers::
        !           493: * Elimination::
        !           494: * Stack Arguments::
        !           495: * Register Arguments::
        !           496: * Scalar Return::
        !           497: * Aggregate Return::
        !           498: * Caller Saves::
        !           499: * Function Entry::
        !           500: * Profiling::
1.1.1.2   root      501: 
                    502: 
1.1.1.4 ! root      503: File: gcc.info,  Node: Frame Layout,  Next: Frame Registers,  Up: Stack and Calling
1.1.1.2   root      504: 
1.1.1.4 ! root      505: Basic Stack Layout
        !           506: ------------------
1.1.1.2   root      507: 
1.1.1.4 ! root      508:    Here is the basic stack layout.
1.1.1.2   root      509: 
1.1.1.4 ! root      510: `STACK_GROWS_DOWNWARD'
        !           511:      Define this macro if pushing a word onto the stack moves the stack
        !           512:      pointer to a smaller address.
        !           513: 
        !           514:      When we say, "define this macro if ...," it means that the
        !           515:      compiler checks this macro only with `#ifdef' so the precise
        !           516:      definition used does not matter.
        !           517: 
        !           518: `FRAME_GROWS_DOWNWARD'
        !           519:      Define this macro if the addresses of local variable slots are at
        !           520:      negative offsets from the frame pointer.
        !           521: 
        !           522: `ARGS_GROW_DOWNWARD'
        !           523:      Define this macro if successive arguments to a function occupy
        !           524:      decreasing addresses on the stack.
        !           525: 
        !           526: `STARTING_FRAME_OFFSET'
        !           527:      Offset from the frame pointer to the first local variable slot to
        !           528:      be allocated.
        !           529: 
        !           530:      If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
        !           531:      subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
        !           532:      Otherwise, it is found by adding the length of the first slot to
        !           533:      the value `STARTING_FRAME_OFFSET'.
        !           534: 
        !           535: `STACK_POINTER_OFFSET'
        !           536:      Offset from the stack pointer register to the first location at
        !           537:      which outgoing arguments are placed.  If not specified, the
        !           538:      default value of zero is used.  This is the proper value for most
        !           539:      machines.
        !           540: 
        !           541:      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
        !           542:      the first location at which outgoing arguments are placed.
        !           543: 
        !           544: `FIRST_PARM_OFFSET (FUNDECL)'
        !           545:      Offset from the argument pointer register to the first argument's
        !           546:      address.  On some machines it may depend on the data type of the
        !           547:      function.
        !           548: 
        !           549:      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
        !           550:      the first argument's address.
        !           551: 
        !           552: `STACK_DYNAMIC_OFFSET (FUNDECL)'
        !           553:      Offset from the stack pointer register to an item dynamically
        !           554:      allocated on the stack, e.g., by `alloca'.
        !           555: 
        !           556:      The default value for this macro is `STACK_POINTER_OFFSET' plus the
        !           557:      length of the outgoing arguments.  The default is correct for most
        !           558:      machines.  See `function.c' for details.
        !           559: 
        !           560: `DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)'
        !           561:      A C expression whose value is RTL representing the address in a
        !           562:      stack frame where the pointer to the caller's frame is stored.
        !           563:      Assume that FRAMEADDR is an RTL expression for the address of the
        !           564:      stack frame itself.
        !           565: 
        !           566:      If you don't define this macro, the default is to return the value
        !           567:      of FRAMEADDR--that is, the stack frame address is also the address
        !           568:      of the stack word that points to the previous frame.
        !           569: 
        !           570: `SERTUP_FRAME_ADDRESSES ()'
        !           571:      If defined, a C expression that produces the machine-specific code
        !           572:      to setup the stack so that arbitrary frames can be accessed.  For
        !           573:      example, on the Sparc, we must flush all of the register windows
        !           574:      to the stack before we can access arbitrary stack frames.  This
        !           575:      macro will seldom need to be defined.
        !           576: 
        !           577: `RETURN_ADDR_RTX (COUNT, FRAMEADDR)'
        !           578:      A C expression whose value is RTL representing the value of the
        !           579:      return address for the frame COUNT steps up from the current frame.
        !           580:      fRAMEADDR is the frame pointer of the COUNT frame, or the frame
        !           581:      pointer of the COUNT - 1 frame if `RETURN_ADDR_IN_PREVIOUS_FRAME'
        !           582:      is defined.
        !           583: 
        !           584: `RETURN_ADDR_IN_PREVIOUS_FRAME'
        !           585:      Define this if the return address of a particular stack frame is
        !           586:      accessed from the frame pointer of the previous stack frame.
1.1.1.2   root      587: 
                    588: 
1.1.1.4 ! root      589: File: gcc.info,  Node: Frame Registers,  Next: Elimination,  Prev: Frame Layout,  Up: Stack and Calling
1.1.1.2   root      590: 
1.1.1.4 ! root      591: Registers That Address the Stack Frame
        !           592: --------------------------------------
1.1.1.2   root      593: 
1.1.1.4 ! root      594:    This discusses registers that address the stack frame.
1.1.1.3   root      595: 
1.1.1.4 ! root      596: `STACK_POINTER_REGNUM'
        !           597:      The register number of the stack pointer register, which must also
        !           598:      be a fixed register according to `FIXED_REGISTERS'.  On most
        !           599:      machines, the hardware determines which register this is.
        !           600: 
        !           601: `FRAME_POINTER_REGNUM'
        !           602:      The register number of the frame pointer register, which is used to
        !           603:      access automatic variables in the stack frame.  On some machines,
        !           604:      the hardware determines which register this is.  On other
        !           605:      machines, you can choose any register you wish for this purpose.
        !           606: 
        !           607: `HARD_FRAME_POINTER_REGNUM'
        !           608:      On some machines the offset between the frame pointer and starting
        !           609:      offset of the automatic variables is not known until after register
        !           610:      allocation has been done (for example, because the saved registers
        !           611:      are between these two locations).  On those machines, define
        !           612:      `FRAME_POINTER_REGNUM' the number of a special, fixed register to
        !           613:      be used internally until the offset is known, and define
        !           614:      `HARD_FRAME_POINTER_REGNUM' to be actual the hard register number
        !           615:      used for the frame pointer.
        !           616: 
        !           617:      You should define this macro only in the very rare circumstances
        !           618:      when it is not possible to calculate the offset between the frame
        !           619:      pointer and the automatic variables until after register
        !           620:      allocation has been completed.  When this macro is defined, you
        !           621:      must also indicate in your definition of `ELIMINABLE_REGS' how to
        !           622:      eliminate `FRAME_POINTER_REGNUM' into either
        !           623:      `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
        !           624: 
        !           625:      Do not define this macro if it would be the same as
        !           626:      `FRAME_POINTER_REGNUM'.
        !           627: 
        !           628: `ARG_POINTER_REGNUM'
        !           629:      The register number of the arg pointer register, which is used to
        !           630:      access the function's argument list.  On some machines, this is
        !           631:      the same as the frame pointer register.  On some machines, the
        !           632:      hardware determines which register this is.  On other machines,
        !           633:      you can choose any register you wish for this purpose.  If this is
        !           634:      not the same register as the frame pointer register, then you must
        !           635:      mark it as a fixed register according to `FIXED_REGISTERS', or
        !           636:      arrange to be able to eliminate it (*note Elimination::.).
        !           637: 
        !           638: `STATIC_CHAIN_REGNUM'
        !           639: `STATIC_CHAIN_INCOMING_REGNUM'
        !           640:      Register numbers used for passing a function's static chain
        !           641:      pointer.  If register windows are used, the register number as
        !           642:      seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
        !           643:      while the register number as seen by the calling function is
        !           644:      `STATIC_CHAIN_REGNUM'.  If these registers are the same,
        !           645:      `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
        !           646: 
        !           647:      The static chain register need not be a fixed register.
        !           648: 
        !           649:      If the static chain is passed in memory, these macros should not be
        !           650:      defined; instead, the next two macros should be defined.
        !           651: 
        !           652: `STATIC_CHAIN'
        !           653: `STATIC_CHAIN_INCOMING'
        !           654:      If the static chain is passed in memory, these macros provide rtx
        !           655:      giving `mem' expressions that denote where they are stored.
        !           656:      `STATIC_CHAIN' and `STATIC_CHAIN_INCOMING' give the locations as
        !           657:      seen by the calling and called functions, respectively.  Often the
        !           658:      former will be at an offset from the stack pointer and the latter
        !           659:      at an offset from the frame pointer.
        !           660: 
        !           661:      The variables `stack_pointer_rtx', `frame_pointer_rtx', and
        !           662:      `arg_pointer_rtx' will have been initialized prior to the use of
        !           663:      these macros and should be used to refer to those items.
1.1.1.3   root      664: 
1.1.1.4 ! root      665:      If the static chain is passed in a register, the two previous
        !           666:      macros should be defined instead.
1.1.1.2   root      667: 
                    668: 
1.1.1.4 ! root      669: File: gcc.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
1.1.1.2   root      670: 
1.1.1.4 ! root      671: Eliminating Frame Pointer and Arg Pointer
        !           672: -----------------------------------------
1.1.1.2   root      673: 
1.1.1.4 ! root      674:    This is about eliminating the frame pointer and arg pointer.
        !           675: 
        !           676: `FRAME_POINTER_REQUIRED'
        !           677:      A C expression which is nonzero if a function must have and use a
        !           678:      frame pointer.  This expression is evaluated  in the reload pass.
        !           679:      If its value is nonzero the function will have a frame pointer.
        !           680: 
        !           681:      The expression can in principle examine the current function and
        !           682:      decide according to the facts, but on most machines the constant 0
        !           683:      or the constant 1 suffices.  Use 0 when the machine allows code to
        !           684:      be generated with no frame pointer, and doing so saves some time
        !           685:      or space.  Use 1 when there is no possible advantage to avoiding a
        !           686:      frame pointer.
        !           687: 
        !           688:      In certain cases, the compiler does not know how to produce valid
        !           689:      code without a frame pointer.  The compiler recognizes those cases
        !           690:      and automatically gives the function a frame pointer regardless of
        !           691:      what `FRAME_POINTER_REQUIRED' says.  You don't need to worry about
        !           692:      them.
        !           693: 
        !           694:      In a function that does not require a frame pointer, the frame
        !           695:      pointer register can be allocated for ordinary usage, unless you
        !           696:      mark it as a fixed register.  See `FIXED_REGISTERS' for more
        !           697:      information.
        !           698: 
        !           699: `INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)'
        !           700:      A C statement to store in the variable DEPTH-VAR the difference
        !           701:      between the frame pointer and the stack pointer values immediately
        !           702:      after the function prologue.  The value would be computed from
        !           703:      information such as the result of `get_frame_size ()' and the
        !           704:      tables of registers `regs_ever_live' and `call_used_regs'.
        !           705: 
        !           706:      If `ELIMINABLE_REGS' is defined, this macro will be not be used and
        !           707:      need not be defined.  Otherwise, it must be defined even if
        !           708:      `FRAME_POINTER_REQUIRED' is defined to always be true; in that
        !           709:      case, you may set DEPTH-VAR to anything.
        !           710: 
        !           711: `ELIMINABLE_REGS'
        !           712:      If defined, this macro specifies a table of register pairs used to
        !           713:      eliminate unneeded registers that point into the stack frame.  If
        !           714:      it is not defined, the only elimination attempted by the compiler
        !           715:      is to replace references to the frame pointer with references to
        !           716:      the stack pointer.
        !           717: 
        !           718:      The definition of this macro is a list of structure
        !           719:      initializations, each of which specifies an original and
        !           720:      replacement register.
        !           721: 
        !           722:      On some machines, the position of the argument pointer is not
        !           723:      known until the compilation is completed.  In such a case, a
        !           724:      separate hard register must be used for the argument pointer.
        !           725:      This register can be eliminated by replacing it with either the
        !           726:      frame pointer or the argument pointer, depending on whether or not
        !           727:      the frame pointer has been eliminated.
        !           728: 
        !           729:      In this case, you might specify:
        !           730:           #define ELIMINABLE_REGS  \
        !           731:           {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
        !           732:            {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
        !           733:            {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
        !           734: 
        !           735:      Note that the elimination of the argument pointer with the stack
        !           736:      pointer is specified first since that is the preferred elimination.
        !           737: 
        !           738: `CAN_ELIMINATE (FROM-REG, TO-REG)'
        !           739:      A C expression that returns non-zero if the compiler is allowed to
        !           740:      try to replace register number FROM-REG with register number
        !           741:      TO-REG.  This macro need only be defined if `ELIMINABLE_REGS' is
        !           742:      defined, and will usually be the constant 1, since most of the
        !           743:      cases preventing register elimination are things that the compiler
        !           744:      already knows about.
        !           745: 
        !           746: `INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)'
        !           747:      This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
        !           748:      specifies the initial difference between the specified pair of
        !           749:      registers.  This macro must be defined if `ELIMINABLE_REGS' is
        !           750:      defined.
        !           751: 
        !           752: `LONGJMP_RESTORE_FROM_STACK'
        !           753:      Define this macro if the `longjmp' function restores registers from
        !           754:      the stack frames, rather than from those saved specifically by
        !           755:      `setjmp'.  Certain quantities must not be kept in registers across
        !           756:      a call to `setjmp' on such machines.
1.1.1.2   root      757: 
1.1.1.3   root      758: 
1.1.1.4 ! root      759: File: gcc.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
1.1.1.2   root      760: 
1.1.1.4 ! root      761: Passing Function Arguments on the Stack
        !           762: ---------------------------------------
1.1.1.2   root      763: 
1.1.1.4 ! root      764:    The macros in this section control how arguments are passed on the
        !           765: stack.  See the following section for other macros that control passing
        !           766: certain arguments in registers.
        !           767: 
        !           768: `PROMOTE_PROTOTYPES'
        !           769:      Define this macro if an argument declared in a prototype as an
        !           770:      integral type smaller than `int' should actually be passed as an
        !           771:      `int'.  In addition to avoiding errors in certain cases of
        !           772:      mismatch, it also makes for better code on certain machines.
        !           773: 
        !           774: `PUSH_ROUNDING (NPUSHED)'
        !           775:      A C expression that is the number of bytes actually pushed onto the
        !           776:      stack when an instruction attempts to push NPUSHED bytes.
        !           777: 
        !           778:      If the target machine does not have a push instruction, do not
        !           779:      define this macro.  That directs GNU CC to use an alternate
        !           780:      strategy: to allocate the entire argument block and then store the
        !           781:      arguments into it.
        !           782: 
        !           783:      On some machines, the definition
        !           784: 
        !           785:           #define PUSH_ROUNDING(BYTES) (BYTES)
        !           786: 
        !           787:      will suffice.  But on other machines, instructions that appear to
        !           788:      push one byte actually push two bytes in an attempt to maintain
        !           789:      alignment.  Then the definition should be
        !           790: 
        !           791:           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
        !           792: 
        !           793: `ACCUMULATE_OUTGOING_ARGS'
        !           794:      If defined, the maximum amount of space required for outgoing
        !           795:      arguments will be computed and placed into the variable
        !           796:      `current_function_outgoing_args_size'.  No space will be pushed
        !           797:      onto the stack for each call; instead, the function prologue should
        !           798:      increase the stack frame size by this amount.
        !           799: 
        !           800:      Defining both `PUSH_ROUNDING' and `ACCUMULATE_OUTGOING_ARGS' is
        !           801:      not proper.
        !           802: 
        !           803: `REG_PARM_STACK_SPACE (FNDECL)'
        !           804:      Define this macro if functions should assume that stack space has
        !           805:      been allocated for arguments even when their values are passed in
        !           806:      registers.
        !           807: 
        !           808:      The value of this macro is the size, in bytes, of the area
        !           809:      reserved for arguments passed in registers for the function
        !           810:      represented by FNDECL.
        !           811: 
        !           812:      This space can be allocated by the caller, or be a part of the
        !           813:      machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
        !           814:      which.
        !           815: 
        !           816: `MAYBE_REG_PARM_STACK_SPACE'
        !           817: `FINAL_REG_PARM_STACK_SPACE (CONST_SIZE, VAR_SIZE)'
        !           818:      Define these macros in addition to the one above if functions might
        !           819:      allocate stack space for arguments even when their values are
        !           820:      passed in registers.  These should be used when the stack space
        !           821:      allocated for arguments in registers is not a simple constant
        !           822:      independent of the function declaration.
        !           823: 
        !           824:      The value of the first macro is the size, in bytes, of the area
        !           825:      that we should initially assume would be reserved for arguments
        !           826:      passed in registers.
        !           827: 
        !           828:      The value of the second macro is the actual size, in bytes, of the
        !           829:      area that will be reserved for arguments passed in registers.
        !           830:      This takes two arguments: an integer representing the number of
        !           831:      bytes of fixed sized arguments on the stack, and a tree
        !           832:      representing the number of bytes of variable sized arguments on
        !           833:      the stack.
        !           834: 
        !           835:      When these macros are defined, `REG_PARM_STACK_SPACE' will only be
        !           836:      called for libcall functions, the current function, or for a
        !           837:      function being called when it is known that such stack space must
        !           838:      be allocated.  In each case this value can be easily computed.
        !           839: 
        !           840:      When deciding whether a called function needs such stack space,
        !           841:      and how much space to reserve, GNU CC uses these two macros
        !           842:      instead of `REG_PARM_STACK_SPACE'.
        !           843: 
        !           844: `OUTGOING_REG_PARM_STACK_SPACE'
        !           845:      Define this if it is the responsibility of the caller to allocate
        !           846:      the area reserved for arguments passed in registers.
        !           847: 
        !           848:      If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
        !           849:      whether the space for these arguments counts in the value of
        !           850:      `current_function_outgoing_args_size'.
        !           851: 
        !           852: `STACK_PARMS_IN_REG_PARM_AREA'
        !           853:      Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
        !           854:      stack parameters don't skip the area specified by it.
        !           855: 
        !           856:      Normally, when a parameter is not passed in registers, it is
        !           857:      placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
        !           858:      Defining this macro suppresses this behavior and causes the
        !           859:      parameter to be passed on the stack in its natural location.
        !           860: 
        !           861: `RETURN_POPS_ARGS (FUNTYPE, STACK-SIZE)'
        !           862:      A C expression that should indicate the number of bytes of its own
        !           863:      arguments that a function pops on returning, or 0 if the function
        !           864:      pops no arguments and the caller must therefore pop them all after
        !           865:      the function returns.
        !           866: 
        !           867:      FUNTYPE is a C variable whose value is a tree node that describes
        !           868:      the function in question.  Normally it is a node of type
        !           869:      `FUNCTION_TYPE' that describes the data type of the function.
        !           870:      From this it is possible to obtain the data types of the value and
        !           871:      arguments (if known).
        !           872: 
        !           873:      When a call to a library function is being considered, FUNTYPE
        !           874:      will contain an identifier node for the library function.  Thus, if
        !           875:      you need to distinguish among various library functions, you can
        !           876:      do so by their names.  Note that "library function" in this
        !           877:      context means a function used to perform arithmetic, whose name is
        !           878:      known specially in the compiler and was not mentioned in the C
        !           879:      code being compiled.
        !           880: 
        !           881:      STACK-SIZE is the number of bytes of arguments passed on the
        !           882:      stack.  If a variable number of bytes is passed, it is zero, and
        !           883:      argument popping will always be the responsibility of the calling
        !           884:      function.
        !           885: 
        !           886:      On the Vax, all functions always pop their arguments, so the
        !           887:      definition of this macro is STACK-SIZE.  On the 68000, using the
        !           888:      standard calling convention, no functions pop their arguments, so
        !           889:      the value of the macro is always 0 in this case.  But an
        !           890:      alternative calling convention is available in which functions
        !           891:      that take a fixed number of arguments pop them but other functions
        !           892:      (such as `printf') pop nothing (the caller pops all).  When this
        !           893:      convention is in use, FUNTYPE is examined to determine whether a
        !           894:      function takes a fixed number of arguments.
1.1.1.2   root      895: 
                    896: 
1.1.1.4 ! root      897: File: gcc.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
1.1.1.2   root      898: 
1.1.1.4 ! root      899: Passing Arguments in Registers
        !           900: ------------------------------
1.1.1.2   root      901: 
1.1.1.4 ! root      902:    This section describes the macros which let you control how various
        !           903: types of arguments are passed in registers or how they are arranged in
        !           904: the stack.
        !           905: 
        !           906: `FUNCTION_ARG (CUM, MODE, TYPE, NAMED)'
        !           907:      A C expression that controls whether a function argument is passed
        !           908:      in a register, and which register.
        !           909: 
        !           910:      The arguments are CUM, which summarizes all the previous
        !           911:      arguments; MODE, the machine mode of the argument; TYPE, the data
        !           912:      type of the argument as a tree node or 0 if that is not known
        !           913:      (which happens for C support library functions); and NAMED, which
        !           914:      is 1 for an ordinary argument and 0 for nameless arguments that
        !           915:      correspond to `...' in the called function's prototype.
        !           916: 
        !           917:      The value of the expression should either be a `reg' RTX for the
        !           918:      hard register in which to pass the argument, or zero to pass the
        !           919:      argument on the stack.
        !           920: 
        !           921:      For machines like the Vax and 68000, where normally all arguments
        !           922:      are pushed, zero suffices as a definition.
        !           923: 
        !           924:      The usual way to make the ANSI library `stdarg.h' work on a machine
        !           925:      where some arguments are usually passed in registers, is to cause
        !           926:      nameless arguments to be passed on the stack instead.  This is done
        !           927:      by making `FUNCTION_ARG' return 0 whenever NAMED is 0.
        !           928: 
        !           929:      You may use the macro `MUST_PASS_IN_STACK (MODE, TYPE)' in the
        !           930:      definition of this macro to determine if this argument is of a
        !           931:      type that must be passed in the stack.  If `REG_PARM_STACK_SPACE'
        !           932:      is not defined and `FUNCTION_ARG' returns non-zero for such an
        !           933:      argument, the compiler will abort.  If `REG_PARM_STACK_SPACE' is
        !           934:      defined, the argument will be computed in the stack and then
        !           935:      loaded into a register.
        !           936: 
        !           937: `FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)'
        !           938:      Define this macro if the target machine has "register windows", so
        !           939:      that the register in which a function sees an arguments is not
        !           940:      necessarily the same as the one in which the caller passed the
        !           941:      argument.
        !           942: 
        !           943:      For such machines, `FUNCTION_ARG' computes the register in which
        !           944:      the caller passes the value, and `FUNCTION_INCOMING_ARG' should be
        !           945:      defined in a similar fashion to tell the function being called
        !           946:      where the arguments will arrive.
        !           947: 
        !           948:      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
        !           949:      both purposes.
        !           950: 
        !           951: `FUNCTION_ARG_PARTIAL_NREGS (CUM, MODE, TYPE, NAMED)'
        !           952:      A C expression for the number of words, at the beginning of an
        !           953:      argument, must be put in registers.  The value must be zero for
        !           954:      arguments that are passed entirely in registers or that are
        !           955:      entirely pushed on the stack.
        !           956: 
        !           957:      On some machines, certain arguments must be passed partially in
        !           958:      registers and partially in memory.  On these machines, typically
        !           959:      the first N words of arguments are passed in registers, and the
        !           960:      rest on the stack.  If a multi-word argument (a `double' or a
        !           961:      structure) crosses that boundary, its first few words must be
        !           962:      passed in registers and the rest must be pushed.  This macro tells
        !           963:      the compiler when this occurs, and how many of the words should go
        !           964:      in registers.
        !           965: 
        !           966:      `FUNCTION_ARG' for these arguments should return the first
        !           967:      register to be used by the caller for this argument; likewise
        !           968:      `FUNCTION_INCOMING_ARG', for the called function.
        !           969: 
        !           970: `FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED)'
        !           971:      A C expression that indicates when an argument must be passed by
        !           972:      reference.  If nonzero for an argument, a copy of that argument is
        !           973:      made in memory and a pointer to the argument is passed instead of
        !           974:      the argument itself.  The pointer is passed in whatever way is
        !           975:      appropriate for passing a pointer to that type.
        !           976: 
        !           977:      On machines where `REG_PARM_STACK_SPACE' is not defined, a suitable
        !           978:      definition of this macro might be
        !           979:           #define FUNCTION_ARG_PASS_BY_REFERENCE\
        !           980:           (CUM, MODE, TYPE, NAMED)  \
        !           981:             MUST_PASS_IN_STACK (MODE, TYPE)
        !           982: 
        !           983: `FUNCTION_ARG_CALLEE_COPIES (CUM, MODE, TYPE, NAMED)'
        !           984:      If defined, a C expression that indicates when it is the called
        !           985:      function's responsibility to make a copy of arguments passed by
        !           986:      invisible reference.  Normally, the caller makes a copy and passes
        !           987:      the address of the copy to the routine being called.  When
        !           988:      FUNCTION_ARG_CALLEE_COPIES is defined and is nonzero, the caller
        !           989:      does not make a copy.  Instead, it passes a pointer to the "live"
        !           990:      value.  The called function must not modify this value.  If it can
        !           991:      be determined that the value won't be modified, it need not make a
        !           992:      copy; otherwise a copy must be made.
        !           993: 
        !           994: `CUMULATIVE_ARGS'
        !           995:      A C type for declaring a variable that is used as the first
        !           996:      argument of `FUNCTION_ARG' and other related values.  For some
        !           997:      target machines, the type `int' suffices and can hold the number
        !           998:      of bytes of argument so far.
        !           999: 
        !          1000:      There is no need to record in `CUMULATIVE_ARGS' anything about the
        !          1001:      arguments that have been passed on the stack.  The compiler has
        !          1002:      other variables to keep track of that.  For target machines on
        !          1003:      which all arguments are passed on the stack, there is no need to
        !          1004:      store anything in `CUMULATIVE_ARGS'; however, the data structure
        !          1005:      must exist and should not be empty, so use `int'.
        !          1006: 
        !          1007: `INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME)'
        !          1008:      A C statement (sans semicolon) for initializing the variable CUM
        !          1009:      for the state at the beginning of the argument list.  The variable
        !          1010:      has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
        !          1011:      for the data type of the function which will receive the args, or 0
        !          1012:      if the args are to a compiler support library function.
        !          1013: 
        !          1014:      When processing a call to a compiler support library function,
        !          1015:      LIBNAME identifies which one.  It is a `symbol_ref' rtx which
        !          1016:      contains the name of the function, as a string.  LIBNAME is 0 when
        !          1017:      an ordinary C function call is being processed.  Thus, each time
        !          1018:      this macro is called, either LIBNAME or FNTYPE is nonzero, but
        !          1019:      never both of them at once.
        !          1020: 
        !          1021: `INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)'
        !          1022:      Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
        !          1023:      finding the arguments for the function being compiled.  If this
        !          1024:      macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
        !          1025: 
        !          1026:      The value passed for LIBNAME is always 0, since library routines
        !          1027:      with special calling conventions are never compiled with GNU CC.
        !          1028:      The argument LIBNAME exists for symmetry with
        !          1029:      `INIT_CUMULATIVE_ARGS'.
        !          1030: 
        !          1031: `FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)'
        !          1032:      A C statement (sans semicolon) to update the summarizer variable
        !          1033:      CUM to advance past an argument in the argument list.  The values
        !          1034:      MODE, TYPE and NAMED describe that argument.  Once this is done,
        !          1035:      the variable CUM is suitable for analyzing the *following*
        !          1036:      argument with `FUNCTION_ARG', etc.
        !          1037: 
        !          1038:      This macro need not do anything if the argument in question was
        !          1039:      passed on the stack.  The compiler knows how to track the amount
        !          1040:      of stack space used for arguments without any special help.
        !          1041: 
        !          1042: `FUNCTION_ARG_PADDING (MODE, TYPE)'
        !          1043:      If defined, a C expression which determines whether, and in which
        !          1044:      direction, to pad out an argument with extra space.  The value
        !          1045:      should be of type `enum direction': either `upward' to pad above
        !          1046:      the argument, `downward' to pad below, or `none' to inhibit
        !          1047:      padding.
        !          1048: 
        !          1049:      The *amount* of padding is always just enough to reach the next
        !          1050:      multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control
        !          1051:      it.
        !          1052: 
        !          1053:      This macro has a default definition which is right for most
        !          1054:      systems.  For little-endian machines, the default is to pad
        !          1055:      upward.  For big-endian machines, the default is to pad downward
        !          1056:      for an argument of constant size shorter than an `int', and upward
        !          1057:      otherwise.
1.1.1.3   root     1058: 
1.1.1.4 ! root     1059: `FUNCTION_ARG_BOUNDARY (MODE, TYPE)'
        !          1060:      If defined, a C expression that gives the alignment boundary, in
        !          1061:      bits, of an argument with the specified mode and type.  If it is
        !          1062:      not defined, `PARM_BOUNDARY' is used for all arguments.
1.1.1.3   root     1063: 
1.1.1.4 ! root     1064: `FUNCTION_ARG_REGNO_P (REGNO)'
        !          1065:      A C expression that is nonzero if REGNO is the number of a hard
        !          1066:      register in which function arguments are sometimes passed.  This
        !          1067:      does *not* include implicit arguments such as the static chain and
        !          1068:      the structure-value address.  On many machines, no registers can be
        !          1069:      used for this purpose since all function arguments are pushed on
        !          1070:      the stack.
1.1       root     1071: 

unix.superglobalmegacorp.com

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