aboutsummaryrefslogtreecommitdiff
path: root/gcc-1.40/gcc.info-9
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2021-08-15 00:34:05 -0400
committerAndrew Lee <alee14498@protonmail.com>2021-08-15 00:34:05 -0400
commit60cc83bf91bfc9bb02f6304b5d6c8234ba6d210f (patch)
treefdc0be85a1ca35e34c3ae2c805fe9b718e3c1091 /gcc-1.40/gcc.info-9
parentdd8dfab51b832a654365ed00c06bf802ff628bfa (diff)
downloadlinux-0.01-distro-master.tar.gz
linux-0.01-distro-master.tar.bz2
linux-0.01-distro-master.zip
Added gccHEADmaster
Diffstat (limited to 'gcc-1.40/gcc.info-9')
-rw-r--r--gcc-1.40/gcc.info-91066
1 files changed, 1066 insertions, 0 deletions
diff --git a/gcc-1.40/gcc.info-9 b/gcc-1.40/gcc.info-9
new file mode 100644
index 0000000..2540b06
--- /dev/null
+++ b/gcc-1.40/gcc.info-9
@@ -0,0 +1,1066 @@
+Info file gcc.info, produced by Makeinfo, -*- Text -*- from input
+file gcc.texinfo.
+
+ This file documents the use and the internals of the GNU compiler.
+
+ Copyright (C) 1988, 1989, 1990 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the sections entitled "GNU General Public License" and "Protect
+Your Freedom--Fight `Look And Feel'" are included exactly as in the
+original, and provided that the entire resulting derived work is
+distributed under the terms of a permission notice identical to this
+one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that the sections entitled "GNU General Public
+License" and "Protect Your Freedom--Fight `Look And Feel'" and this
+permission notice may be included in translations approved by the
+Free Software Foundation instead of in the original English.
+
+
+File: gcc.info, Node: Registers, Next: Register Classes, Prev: Storage Layout, Up: Machine Macros
+
+Register Usage
+==============
+
+`FIRST_PSEUDO_REGISTER'
+ Number of hardware registers known to the compiler. They
+ receive numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the
+ first pseudo register's number really is assigned the number
+ `FIRST_PSEUDO_REGISTER'.
+
+`FIXED_REGISTERS'
+ An initializer that says which registers are used for fixed
+ purposes all throughout the compiled code and are therefore not
+ available for general allocation. These would include the stack
+ pointer, the frame pointer (except on machines where that can be
+ used as a general register when no frame pointer is needed), the
+ program counter on machines where that is considered one of the
+ addressable registers, and any other numbered register with a
+ standard use.
+
+ This information is expressed as a sequence of numbers,
+ separated by commas and surrounded by braces. The Nth number is
+ 1 if register N is fixed, 0 otherwise.
+
+ The table initialized from this macro, and the table initialized
+ by the following one, may be overridden at run time either
+ automatically, by the actions of the macro
+ `CONDITIONAL_REGISTER_USAGE', or by the user with the command
+ options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
+
+`CALL_USED_REGISTERS'
+ Like `FIXED_REGISTERS' but has 1 for each register that is
+ clobbered (in general) by function calls as well as for fixed
+ registers. This macro therefore identifies the registers that
+ are not available for general allocation of values that must
+ live across function calls.
+
+ If a register has 0 in `CALL_USED_REGISTERS', the compiler
+ automatically saves it on function entry and restores it on
+ function exit, if the register is used within the function.
+
+`DEFAULT_CALLER_SAVES'
+ Define this macro if function calls on the target machine do not
+ preserve any registers; in other words, if `CALL_USED_REGISTERS'
+ has 1 for all registers. This macro enables `-fcaller-saves' by
+ default. Eventually that option will be enabled by default on
+ all machines and both the option and this macro will be
+ eliminated.
+
+`CONDITIONAL_REGISTER_USAGE'
+ Zero or more C statements that may conditionally modify two
+ variables `fixed_regs' and `call_used_regs' (both of type `char
+ []') after they have been initialized from the two preceding
+ macros.
+
+ This is necessary in case the fixed or call-clobbered registers
+ depend on target flags.
+
+ You need not define this macro if it has no work to do.
+
+ If the usage of an entire class of registers depends on the
+ target flags, you may indicate this to GCC by using this macro
+ to modify `fixed_regs' and `call_used_regs' to 1 for each of the
+ registers in the classes which should not be used by GCC. Also
+ define the macro `REG_CLASS_FROM_LETTER' to return `NO_REGS' if
+ it is called with a letter for a class that shouldn't be used.
+
+ (However, if this class is not included in `GENERAL_REGS' and
+ all of the insn patterns whose constraints permit this class are
+ controlled by target switches, then GCC will automatically avoid
+ using these registers when the target switches are opposed to
+ them.)
+
+`OVERLAPPING_REGNO_P (REGNO)'
+ If defined, this is a C expression whose value is nonzero if
+ hard register number REGNO is an overlapping register. This
+ means a hard register which overlaps a hard register with a
+ different number. (Such overlap is undesirable, but
+ occasionally it allows a machine to be supported which otherwise
+ could not be.) This macro must return nonzero for *all* the
+ registers which overlap each other. GNU CC can use an
+ overlapping register only in certain limited ways. It can be
+ used for allocation within a basic block, and may be spilled for
+ reloading; that is all.
+
+ If this macro is not defined, it means that none of the hard
+ registers overlap each other. This is the usual situation.
+
+`INSN_CLOBBERS_REGNO_P (INSN, REGNO)'
+ If defined, this is a C expression whose value should be nonzero
+ if the insn INSN has the effect of mysteriously clobbering the
+ contents of hard register number REGNO. By "mysterious" we mean
+ that the insn's RTL expression doesn't describe such an effect.
+
+ If this macro is not defined, it means that no insn clobbers
+ registers mysteriously. This is the usual situation; all else
+ being equal, it is best for the RTL expression to show all the
+ activity.
+
+`PRESERVE_DEATH_INFO_REGNO_P (REGNO)'
+ If defined, this is a C expression whose value is nonzero if
+ accurate `REG_DEAD' notes are needed for hard register number
+ REGNO at the time of outputting the assembler code. When this
+ is so, a few optimizations that take place after register
+ allocation and could invalidate the death notes are not done
+ when this register is involved.
+
+ You would arrange to preserve death info for a register when
+ some of the code in the machine description which is executed to
+ write the assembler code looks at the death notes. This is
+ necessary only when the actual hardware feature which GNU CC
+ thinks of as a register is not actually a register of the usual
+ sort. (It might, for example, be a hardware stack.)
+
+ If this macro is not defined, it means that no death notes need
+ to be preserved. This is the usual situation.
+
+`HARD_REGNO_NREGS (REGNO, MODE)'
+ A C expression for the number of consecutive hard registers,
+ starting at register number REGNO, required to hold a value of
+ mode MODE.
+
+ On a machine where all registers are exactly one word, a
+ suitable definition of this macro is
+
+ #define HARD_REGNO_NREGS(REGNO, MODE) \
+ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \
+ / UNITS_PER_WORD))
+
+`HARD_REGNO_MODE_OK (REGNO, MODE)'
+ A C expression that is nonzero if it is permissible to store a
+ value of mode MODE in hard register number REGNO (or in several
+ registers starting with that one). For a machine where all
+ registers are equivalent, a suitable definition is
+
+ #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
+
+ It is not necessary for this macro to check for the numbers of
+ fixed registers, because the allocation mechanism considers them
+ to be always occupied.
+
+ On some machines, double-precision values must be kept in
+ even/odd register pairs. The way to implement that is to define
+ this macro to reject odd register numbers for such modes.
+
+ GNU CC assumes that it can always move values between registers
+ and (suitably addressed) memory locations. If it is impossible
+ to move a value of a certain mode between memory and certain
+ registers, then `HARD_REGNO_MODE_OK' must not allow this mode in
+ those registers.
+
+ Many machines have special registers for floating point
+ arithmetic. Often people assume that floating point machine
+ modes are allowed only in floating point registers. This is not
+ true. Any registers that can hold integers can safely *hold* a
+ floating point machine mode, whether or not floating arithmetic
+ can be done on it in those registers.
+
+ On some machines, though, the converse is true: fixed-point
+ machine modes may not go in floating registers. This is true if
+ the floating registers normalize any value stored in them,
+ because storing a non-floating value there would garble it. In
+ this case, `HARD_REGNO_MODE_OK' should reject fixed-point
+ machine modes in floating registers. But if the floating
+ registers do not automatically normalize, if you can store any
+ bit pattern in one and retrieve it unchanged without a trap,
+ then any machine mode may go in a floating register and this
+ macro should say so.
+
+ The primary significance of special floating registers is rather
+ that they are the registers acceptable in floating point
+ arithmetic instructions. However, this is of no concern to
+ `HARD_REGNO_MODE_OK'. You handle it by writing the proper
+ constraints for those instructions.
+
+ On some machines, the floating registers are especially slow to
+ access, so that it is better to store a value in a stack frame
+ than in such a register if floating point arithmetic is not
+ being done. As long as the floating registers are not in class
+ `GENERAL_REGS', they will not be used unless some insn's
+ constraint asks for one.
+
+`MODES_TIEABLE_P (MODE1, MODE2)'
+ A C expression that is nonzero if it is desirable to choose
+ register allocation so as to avoid move instructions between a
+ value of mode MODE1 and a value of mode MODE2.
+
+ If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
+ MODE2)' are ever different for any R, then `MODES_TIEABLE_P
+ (MODE1, MODE2)' must be zero.
+
+`PC_REGNUM'
+ If the program counter has a register number, define this as
+ that register number. Otherwise, do not define it.
+
+`STACK_POINTER_REGNUM'
+ The register number of the stack pointer register, which must
+ also be a fixed register according to `FIXED_REGISTERS'. On
+ many machines, the hardware determines which register this is.
+
+`FRAME_POINTER_REGNUM'
+ The register number of the frame pointer register, which is used
+ to access automatic variables in the stack frame. On some
+ machines, the hardware determines which register this is. On
+ other machines, you can choose any register you wish for this
+ purpose.
+
+`FRAME_POINTER_REQUIRED'
+ A C expression which is nonzero if a function must have and use
+ a frame pointer. This expression is evaluated twice: at the
+ beginning of generating RTL, and in the reload pass. If its
+ value is nonzero at either time, then the function will have a
+ frame pointer.
+
+ The expression can in principle examine the current function and
+ decide according to the facts, but on most machines the constant
+ 0 or the constant 1 suffices. Use 0 when the machine allows
+ code to be generated with no frame pointer, and doing so saves
+ some time or space. Use 1 when there is no possible advantage
+ to avoiding a frame pointer.
+
+ In certain cases, the compiler does not know how to produce
+ valid code without a frame pointer. The compiler recognizes
+ those cases and automatically gives the function a frame pointer
+ regardless of what `FRAME_POINTER_REQUIRED' says. You don't
+ need to worry about them.
+
+ In a function that does not require a frame pointer, the frame
+ pointer register can be allocated for ordinary usage, unless you
+ mark it as a fixed register. See `FIXED_REGISTERS' for more
+ information.
+
+`ARG_POINTER_REGNUM'
+ The register number of the arg pointer register, which is used
+ to access the function's argument list. On some machines, this
+ is the same as the frame pointer register. On some machines,
+ the hardware determines which register this is. On other
+ machines, you can choose any register you wish for this purpose.
+ If this is not the same register as the frame pointer register,
+ then you must mark it as a fixed register according to
+ `FIXED_REGISTERS'.
+
+`STATIC_CHAIN_REGNUM'
+ The register number used for passing a function's static chain
+ pointer. This is needed for languages such as Pascal and Algol
+ where functions defined within other functions can access the
+ local variables of the outer functions; it is not currently used
+ because C does not provide this feature, but you must define the
+ macro.
+
+ The static chain register need not be a fixed register.
+
+`STRUCT_VALUE_REGNUM'
+ When a function's value's mode is `BLKmode', the value is not
+ returned according to `FUNCTION_VALUE'. Instead, the caller
+ passes the address of a block of memory in which the value
+ should be stored.
+
+ If this value is passed in a register, then
+ `STRUCT_VALUE_REGNUM' should be the number of that register.
+
+`STRUCT_VALUE'
+ If the structure value address is not passed in a register,
+ define `STRUCT_VALUE' as an expression returning an RTX for the
+ place where the address is passed. If it returns a `mem' RTX,
+ the address is passed as an "invisible" first argument.
+
+`STRUCT_VALUE_INCOMING_REGNUM'
+ On some architectures the place where the structure value
+ address is found by the called function is not the same place
+ that the caller put it. This can be due to register windows, or
+ it could be because the function prologue moves it to a
+ different place.
+
+ If the incoming location of the structure value address is in a
+ register, define this macro as the register number.
+
+`STRUCT_VALUE_INCOMING'
+ If the incoming location is not a register, define
+ `STRUCT_VALUE_INCOMING' as an expression for an RTX for where
+ the called function should find the value. If it should find
+ the value on the stack, define this to create a `mem' which
+ refers to the frame pointer. If the value is a `mem', the
+ compiler assumes it is for an invisible first argument, and
+ leaves space for it when finding the first real argument.
+
+`REG_ALLOC_ORDER'
+ If defined, an initializer for a vector of integers, containing
+ the numbers of hard registers in the order in which the GNU CC
+ should prefer to use them (from most preferred to least).
+
+ If this macro is not defined, registers are used lowest numbered
+ first (all else being equal).
+
+ One use of this macro is on the 360, where the highest numbered
+ registers must always be saved and the save-multiple-registers
+ instruction supports only sequences of consecutive registers.
+ This macro is defined to cause the highest numbered allocatable
+ registers to be used first.
+
+
+File: gcc.info, Node: Register Classes, Next: Stack Layout, Prev: Registers, Up: Machine Macros
+
+Register Classes
+================
+
+ On many machines, the numbered registers are not all equivalent.
+For example, certain registers may not be allowed for indexed
+addressing; certain registers may not be allowed in some
+instructions. These machine restrictions are described to the
+compiler using "register classes".
+
+ You define a number of register classes, giving each one a name
+and saying which of the registers belong to it. Then you can specify
+register classes that are allowed as operands to particular
+instruction patterns.
+
+ In general, each register will belong to several classes. In
+fact, one class must be named `ALL_REGS' and contain all the
+registers. Another class must be named `NO_REGS' and contain no
+registers. Often the union of two classes will be another class;
+however, this is not required.
+
+ One of the classes must be named `GENERAL_REGS'. There is nothing
+terribly special about the name, but the operand constraint letters
+`r' and `g' specify this class. If `GENERAL_REGS' is the same as
+`ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
+
+ The way classes other than `GENERAL_REGS' are specified in operand
+constraints is through machine-dependent operand constraint letters.
+You can define such letters to correspond to various classes, then
+use them in operand constraints.
+
+ You should define a class for the union of two classes whenever
+some instruction allows both classes. For example, if an instruction
+allows either a floating-point (coprocessor) register or a general
+register for a certain operand, you should define a class
+`FLOAT_OR_GENERAL_REGS' which includes both of them. Otherwise you
+will get suboptimal code.
+
+ You must also specify certain redundant information about the
+register classes: for each class, which classes contain it and which
+ones are contained in it; for each pair of classes, the largest class
+contained in their union.
+
+ When a value occupying several consecutive registers is expected
+in a certain class, all the registers used must belong to that class.
+Therefore, register classes cannot be used to enforce a requirement
+for a register pair to start with an even-numbered register. The way
+to specify this requirement is with `HARD_REGNO_MODE_OK'.
+
+ Register classes used for input-operands of bitwise-and or shift
+instructions have a special requirement: each such class must have,
+for each fixed-point machine mode, a subclass whose registers can
+transfer that mode to or from memory. For example, on some machines,
+the operations for single-byte values (`QImode') are limited to
+certain registers. When this is so, each register class that is used
+in a bitwise-and or shift instruction must have a subclass consisting
+of registers from which single-byte values can be loaded or stored.
+This is so that `PREFERRED_RELOAD_CLASS' can always have a possible
+value to return.
+
+`enum reg_class'
+ An enumeral type that must be defined with all the register
+ class names as enumeral values. `NO_REGS' must be first.
+ `ALL_REGS' must be the last register class, followed by one more
+ enumeral value, `LIM_REG_CLASSES', which is not a register class
+ but rather tells how many classes there are.
+
+ Each register class has a number, which is the value of casting
+ the class name to type `int'. The number serves as an index in
+ many of the tables described below.
+
+`N_REG_CLASSES'
+ The number of distinct register classes, defined as follows:
+
+ #define N_REG_CLASSES (int) LIM_REG_CLASSES
+
+`REG_CLASS_NAMES'
+ An initializer containing the names of the register classes as C
+ string constants. These names are used in writing some of the
+ debugging dumps.
+
+`REG_CLASS_CONTENTS'
+ An initializer containing the contents of the register classes,
+ as integers which are bit masks. The Nth integer specifies the
+ contents of class N. The way the integer MASK is interpreted is
+ that register R is in the class if `MASK & (1 << R)' is 1.
+
+ When the machine has more than 32 registers, an integer does not
+ suffice. Then the integers are replaced by sub-initializers,
+ braced groupings containing several integers. Each
+ sub-initializer must be suitable as an initializer for the type
+ `HARD_REG_SET' which is defined in `hard-reg-set.h'.
+
+`REGNO_REG_CLASS (REGNO)'
+ A C expression whose value is a register class containing hard
+ register REGNO. In general there is more that one such class;
+ choose a class which is "minimal", meaning that no smaller class
+ also contains the register.
+
+`BASE_REG_CLASS'
+ A macro whose definition is the name of the class to which a
+ valid base register must belong. A base register is one used in
+ an address which is the register value plus a displacement.
+
+`INDEX_REG_CLASS'
+ A macro whose definition is the name of the class to which a
+ valid index register must belong. An index register is one used
+ in an address where its value is either multiplied by a scale
+ factor or added to another register (as well as added to a
+ displacement).
+
+`REG_CLASS_FROM_LETTER (CHAR)'
+ A C expression which defines the machine-dependent operand
+ constraint letters for register classes. If CHAR is such a
+ letter, the value should be the register class corresponding to
+ it. Otherwise, the value should be `NO_REGS'.
+
+`REGNO_OK_FOR_BASE_P (NUM)'
+ A C expression which is nonzero if register number NUM is
+ suitable for use as a base register in operand addresses. It
+ may be either a suitable hard register or a pseudo register that
+ has been allocated such a hard register.
+
+`REGNO_OK_FOR_INDEX_P (NUM)'
+ A C expression which is nonzero if register number NUM is
+ suitable for use as an index register in operand addresses. It
+ may be either a suitable hard register or a pseudo register that
+ has been allocated such a hard register.
+
+ The difference between an index register and a base register is
+ that the index register may be scaled. If an address involves
+ the sum of two registers, neither one of them scaled, then
+ either one may be labeled the "base" and the other the "index";
+ but whichever labeling is used must fit the machine's
+ constraints of which registers may serve in each capacity. The
+ compiler will try both labelings, looking for one that is valid,
+ and will reload one or both registers only if neither labeling
+ works.
+
+`PREFERRED_RELOAD_CLASS (X, CLASS)'
+ A C expression that places additional restrictions on the
+ register class to use when it is necessary to copy value X into
+ a register in class CLASS. The value is a register class;
+ perhaps CLASS, or perhaps another, smaller class. On many
+ machines, the definition
+
+ #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
+
+ is safe.
+
+ Sometimes returning a more restrictive class makes better code.
+ For example, on the 68000, when X is an integer constant that is
+ in range for a `moveq' instruction, the value of this macro is
+ always `DATA_REGS' as long as CLASS includes the data registers.
+ Requiring a data register guarantees that a `moveq' will be used.
+
+ If X is a `const_double', by returning `NO_REGS' you can force X
+ into a memory constant. This is useful on certain machines
+ where immediate floating values cannot be loaded into certain
+ kinds of registers.
+
+ In a shift instruction or a bitwise-and instruction, the mode of
+ X, the value being reloaded, may not be the same as the mode of
+ the instruction's operand. (They will both be fixed-point
+ modes, however.) In such a case, CLASS may not be a safe value
+ to return. CLASS is certainly valid for the instruction, but it
+ may not be valid for reloading X. This problem can occur on
+ machines such as the 68000 and 80386 where some registers can
+ handle full-word values but cannot handle single-byte values.
+
+ On such machines, this macro must examine the mode of X and
+ return a subclass of CLASS which can handle loads and stores of
+ that mode. On the 68000, where address registers cannot handle
+ `QImode', if X has `QImode' then you must return `DATA_REGS'.
+ If CLASS is `ADDR_REGS', then there is no correct value to
+ return; but the shift and bitwise-and instructions don't use
+ `ADDR_REGS', so this fatal case never arises.
+
+`CLASS_MAX_NREGS (CLASS, MODE)'
+ A C expression for the maximum number of consecutive registers
+ of class CLASS needed to hold a value of mode MODE.
+
+ This is closely related to the macro `HARD_REGNO_NREGS'. In
+ fact, the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)'
+ should be the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)'
+ for all REGNO values in the class CLASS.
+
+ This macro helps control the handling of multiple-word values in
+ the reload pass.
+
+ Two other special macros describe which constants fit which
+constraint letters.
+
+`CONST_OK_FOR_LETTER_P (VALUE, C)'
+ A C expression that defines the machine-dependent operand
+ constraint letters that specify particular ranges of integer
+ values. If C is one of those letters, the expression should
+ check that VALUE, an integer, is in the appropriate range and
+ return 1 if so, 0 otherwise. If C is not one of those letters,
+ the value should be 0 regardless of VALUE.
+
+`CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)'
+ A C expression that defines the machine-dependent operand
+ constraint letters that specify particular ranges of floating
+ values. If C is one of those letters, the expression should
+ check that VALUE, an RTX of code `const_double', is in the
+ appropriate range and return 1 if so, 0 otherwise. If C is not
+ one of those letters, the value should be 0 regardless of VALUE.
+
+
+File: gcc.info, Node: Stack Layout, Next: Library Calls, Prev: Register Classes, Up: Machine Macros
+
+Describing Stack Layout
+=======================
+
+`STACK_GROWS_DOWNWARD'
+ Define this macro if pushing a word onto the stack moves the
+ stack pointer to a smaller address.
+
+ When we say, "define this macro if ...," it means that the
+ compiler checks this macro only with `#ifdef' so the precise
+ definition used does not matter.
+
+`FRAME_GROWS_DOWNWARD'
+ Define this macro if the addresses of local variable slots are
+ at negative offsets from the frame pointer.
+
+`STARTING_FRAME_OFFSET'
+ Offset from the frame pointer to the first local variable slot
+ to be allocated.
+
+ If `FRAME_GROWS_DOWNWARD', the next slot's offset is found by
+ subtracting the length of the first slot from
+ `STARTING_FRAME_OFFSET'. Otherwise, it is found by adding the
+ length of the first slot to the value `STARTING_FRAME_OFFSET'.
+
+`PUSH_ROUNDING (NPUSHED)'
+ A C expression that is the number of bytes actually pushed onto
+ the stack when an instruction attempts to push NPUSHED bytes.
+
+ If the target machine does not have a push instruction, do not
+ define this macro. That directs GNU CC to use an alternate
+ strategy: to allocate the entire argument block and then store
+ the arguments into it.
+
+ On some machines, the definition
+
+ #define PUSH_ROUNDING(BYTES) (BYTES)
+
+ will suffice. But on other machines, instructions that appear
+ to push one byte actually push two bytes in an attempt to
+ maintain alignment. Then the definition should be
+
+ #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
+
+`FIRST_PARM_OFFSET (FUNDECL)'
+ Offset from the argument pointer register to the first
+ argument's address. On some machines it may depend on the data
+ type of the function. (In the next version of GNU CC, the
+ argument will be changed to the function data type rather than
+ its declaration.)
+
+`FIRST_PARM_CALLER_OFFSET (FUNDECL)'
+ Define this macro on machines where register parameters have
+ shadow locations on the stack, at addresses below the nominal
+ parameter. This matters because certain arguments cannot be
+ passed on the stack. On these machines, such arguments must be
+ stored into the shadow locations.
+
+ This macro should expand into a C expression whose value is the
+ offset of the first parameter's shadow location from the nominal
+ stack pointer value. (That value is itself computed by adding
+ the value of `STACK_POINTER_OFFSET' to the stack pointer
+ register.)
+
+`REG_PARM_STACK_SPACE'
+ Define this macro if functions should assume that stack space
+ has been allocated for arguments even when their values are
+ passed in registers.
+
+ The actual allocation of such space would be done either by the
+ call instruction or by the function prologue, or by defining
+ `FIRST_PARM_CALLER_OFFSET'.
+
+`STACK_ARGS_ADJUST (SIZE)'
+ Define this macro if the machine requires padding on the stack
+ for certain function calls. This is padding on a
+ per-function-call basis, not padding for individual arguments.
+
+ The argument SIZE will be a C variable of type `struct arg_data'
+ which contains two fields, an integer named `constant' and an
+ RTX named `var'. These together represent a size measured in
+ bytes which is the sum of the integer and the RTX. Most of the
+ time `var' is 0, which means that the size is simply the integer.
+
+ The definition should be a C statement or compound statement
+ which alters the variable supplied in whatever way you wish.
+
+ Note that the value you leave in the variable `size' will
+ ultimately be rounded up to a multiple of `STACK_BOUNDARY' bits.
+
+ This macro is not fully implemented for machines which have push
+ instructions (i.e., on which `PUSH_ROUNDING' is defined).
+
+`RETURN_POPS_ARGS (FUNTYPE)'
+ A C expression that should be 1 if a function pops its own
+ arguments on returning, or 0 if the function pops no arguments
+ and the caller must therefore pop them all after the function
+ returns.
+
+ FUNTYPE is a C variable whose value is a tree node that
+ describes the function in question. Normally it is a node of
+ type `FUNCTION_TYPE' that describes the data type of the function.
+ From this it is possible to obtain the data types of the value
+ and arguments (if known).
+
+ When a call to a library function is being considered, FUNTYPE
+ will contain an identifier node for the library function. Thus,
+ if you need to distinguish among various library functions, you
+ can do so by their names. Note that "library function" in this
+ context means a function used to perform arithmetic, whose name
+ is known specially in the compiler and was not mentioned in the
+ C code being compiled.
+
+ On the Vax, all functions always pop their arguments, so the
+ definition of this macro is 1. On the 68000, using the standard
+ calling convention, no functions pop their arguments, so the
+ value of the macro is always 0 in this case. But an alternative
+ calling convention is available in which functions that take a
+ fixed number of arguments pop them but other functions (such as
+ `printf') pop nothing (the caller pops all). When this
+ convention is in use, FUNTYPE is examined to determine whether a
+ function takes a fixed number of arguments.
+
+ When this macro returns nonzero, the macro
+ `FRAME_POINTER_REQUIRED' must also return nonzero for proper
+ operation.
+
+`FUNCTION_VALUE (VALTYPE, FUNC)'
+ A C expression to create an RTX representing the place where a
+ function returns a value of data type VALTYPE. VALTYPE is a
+ tree node representing a data type. Write `TYPE_MODE (VALTYPE)'
+ to get the machine mode used to represent that type. On many
+ machines, only the mode is relevant. (Actually, on most
+ machines, scalar values are returned in the same place
+ regardless of mode).
+
+ If the precise function being called is known, FUNC is a tree
+ node (`FUNCTION_DECL') for it; otherwise, FUNC is a null
+ pointer. This makes it possible to use a different
+ value-returning convention for specific functions when all their
+ calls are known.
+
+`FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)'
+ Define this macro if the target machine has "register windows"
+ so that the register in which a function returns its value is
+ not the same as the one in which the caller sees the value.
+
+ For such machines, `FUNCTION_VALUE' computes the register in
+ which the caller will see the value, and
+ `FUNCTION_OUTGOING_VALUE' should be defined in a similar fashion
+ to tell the function where to put the value.
+
+ If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE'
+ serves both purposes.
+
+`RETURN_IN_MEMORY (TYPE)'
+ A C expression which can inhibit the returning of certain
+ function values in registers, based on the type of value. A
+ nonzero value says to return the function value in memory, just
+ as large structures are always returned. Here TYPE will be a C
+ expression of type `tree', representing the data type of the
+ value.
+
+ Note that values of mode `BLKmode' are returned in memory
+ regardless of this macro. Also, the option
+ `-fpcc-struct-return' takes effect regardless of this macro. On
+ most systems, it is possible to leave the macro undefined; this
+ causes a default definition to be used, whose value is the
+ constant 0.
+
+`LIBCALL_VALUE (MODE)'
+ A C expression to create an RTX representing the place where a
+ library function returns a value of mode MODE. If the precise
+ function being called is known, FUNC is a tree node
+ (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.
+ This makes it possible to use a different value-returning
+ convention for specific functions when all their calls are known.
+
+ Note that "library function" in this context means a compiler
+ support routine, used to perform arithmetic, whose name is known
+ specially by the compiler and was not mentioned in the C code
+ being compiled.
+
+`FUNCTION_VALUE_REGNO_P (REGNO)'
+ A C expression that is nonzero if REGNO is the number of a hard
+ register in which the values of called function may come back.
+
+ A register whose use for returning values is limited to serving
+ as the second of a pair (for a value of type `double', say) need
+ not be recognized by this macro. So for most machines, this
+ definition suffices:
+
+ #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
+
+ If the machine has register windows, so that the caller and the
+ called function use different registers for the return value,
+ this macro should recognize only the caller's register numbers.
+
+`FUNCTION_ARG (CUM, MODE, TYPE, NAMED)'
+ A C expression that controls whether a function argument is
+ passed in a register, and which register.
+
+ The arguments are CUM, which summarizes all the previous
+ arguments; MODE, the machine mode of the argument; TYPE, the
+ data type of the argument as a tree node or 0 if that is not
+ known (which happens for C support library functions); and
+ NAMED, which is 1 for an ordinary argument and 0 for nameless
+ arguments that correspond to `...' in the called function's
+ prototype.
+
+ The value of the expression should either be a `reg' RTX for the
+ hard register in which to pass the argument, or zero to pass the
+ argument on the stack.
+
+ For the Vax and 68000, where normally all arguments are pushed,
+ zero suffices as a definition.
+
+ The usual way to make the ANSI library `stdarg.h' work on a
+ machine where some arguments are usually passed in registers, is
+ to cause nameless arguments to be passed on the stack instead.
+ This is done by making `FUNCTION_ARG' return 0 whenever NAMED is
+ 0.
+
+`FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)'
+ Define this macro if the target machine has "register windows",
+ so that the register in which a function sees an arguments is
+ not necessarily the same as the one in which the caller passed
+ the argument.
+
+ For such machines, `FUNCTION_ARG' computes the register in which
+ the caller passes the value, and `FUNCTION_INCOMING_ARG' should
+ be defined in a similar fashion to tell the function being
+ called where the arguments will arrive.
+
+ If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
+ both purposes.
+
+`FUNCTION_ARG_PARTIAL_NREGS (CUM, MODE, TYPE, NAMED)'
+ A C expression for the number of words, at the beginning of an
+ argument, must be put in registers. The value must be zero for
+ arguments that are passed entirely in registers or that are
+ entirely pushed on the stack.
+
+ On some machines, certain arguments must be passed partially in
+ registers and partially in memory. On these machines, typically
+ the first N words of arguments are passed in registers, and the
+ rest on the stack. If a multi-word argument (a `double' or a
+ structure) crosses that boundary, its first few words must be
+ passed in registers and the rest must be pushed. This macro
+ tells the compiler when this occurs, and how many of the words
+ should go in registers.
+
+ `FUNCTION_ARG' for these arguments should return the first
+ register to be used by the caller for this argument; likewise
+ `FUNCTION_INCOMING_ARG', for the called function.
+
+`CUMULATIVE_ARGS'
+ A C type for declaring a variable that is used as the first
+ argument of `FUNCTION_ARG' and other related values. For some
+ target machines, the type `int' suffices and can hold the number
+ of bytes of argument so far.
+
+`INIT_CUMULATIVE_ARGS (CUM, FNTYPE)'
+ A C statement (sans semicolon) for initializing the variable CUM
+ for the state at the beginning of the argument list. The
+ variable has type `CUMULATIVE_ARGS'. The value of FNTYPE is the
+ tree node for the data type of the function which will receive
+ the args, or 0 if the args are to a compiler support library
+ function.
+
+`FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)'
+ A C statement (sans semicolon) to update the summarizer variable
+ CUM to advance past an argument in the argument list. The
+ values MODE, TYPE and NAMED describe that argument. Once this
+ is done, the variable CUM is suitable for analyzing the
+ *following* argument with `FUNCTION_ARG', etc.
+
+`FUNCTION_ARG_REGNO_P (REGNO)'
+ A C expression that is nonzero if REGNO is the number of a hard
+ register in which function arguments are sometimes passed. This
+ does *not* include implicit arguments such as the static chain
+ and the structure-value address. On many machines, no registers
+ can be used for this purpose since all function arguments are
+ pushed on the stack.
+
+`FUNCTION_ARG_PADDING (MODE, SIZE)'
+ If defined, a C expression which determines whether, and in
+ which direction, to pad out an argument with extra space. The
+ value should be of type `enum direction': either `upward' to pad
+ above the argument, `downward' to pad below, or `none' to
+ inhibit padding.
+
+ The argument SIZE is an RTX which describes the size of the
+ argument, in bytes. It should be used only if MODE is
+ `BLKmode'. Otherwise, SIZE is 0.
+
+ This macro does not control the *amount* of padding; that is
+ always just enough to reach the next multiple of `PARM_BOUNDARY'.
+
+ This macro has a default definition which is right for most
+ systems. For little-endian machines, the default is to pad
+ upward. For big-endian machines, the default is to pad downward
+ for an argument of constant size shorter than an `int', and
+ upward otherwise.
+
+`FUNCTION_PROLOGUE (FILE, SIZE)'
+ A C compound statement that outputs the assembler code for entry
+ to a function. The prologue is responsible for setting up the
+ stack frame, initializing the frame pointer register, saving
+ registers that must be saved, and allocating SIZE additional
+ bytes of storage for the local variables. SIZE is an integer.
+ FILE is a stdio stream to which the assembler code should be
+ output.
+
+ The label for the beginning of the function need not be output
+ by this macro. That has already been done when the macro is run.
+
+ To determine which registers to save, the macro can refer to the
+ array `regs_ever_live': element R is nonzero if hard register R
+ is used anywhere within the function. This implies the function
+ prologue should save register R, but not if it is one of the
+ call-used registers.
+
+ On machines where functions may or may not have frame-pointers,
+ the function entry code must vary accordingly; it must set up
+ the frame pointer if one is wanted, and not otherwise. To
+ determine whether a frame pointer is in wanted, the macro can
+ refer to the variable `frame_pointer_needed'. The variable's
+ value will be 1 at run time in a function that needs a frame
+ pointer.
+
+ On machines where an argument may be passed partly in registers
+ and partly in memory, this macro must examine the variable
+ `current_function_pretend_args_size', and allocate that many
+ bytes of uninitialized space on the stack just underneath the
+ first argument arriving on the stack. (This may not be at the
+ very end of the stack, if the calling sequence has pushed
+ anything else since pushing the stack arguments. But usually,
+ on such machines, nothing else has been pushed yet, because the
+ function prologue itself does all the pushing.)
+
+`FUNCTION_PROFILER (FILE, LABELNO)'
+ A C statement or compound statement to output to FILE some
+ assembler code to call the profiling subroutine `mcount'.
+ Before calling, the assembler code must load the address of a
+ counter variable into a register where `mcount' expects to find
+ the address. The name of this variable is `LP' followed by the
+ number LABELNO, so you would generate the name using `LP%d' in a
+ `fprintf'.
+
+ The details of how the address should be passed to `mcount' are
+ determined by your operating system environment, not by GNU CC.
+ To figure them out, compile a small program for profiling using
+ the system's installed C compiler and look at the assembler code
+ that results.
+
+`FUNCTION_BLOCK_PROFILER (FILE, LABELNO)'
+ A C statement or compound statement to output to FILE some
+ assembler code to initialize basic-block profiling for the
+ current object module. This code should call the subroutine
+ `__bb_init_func' once per object module, passing it as its sole
+ argument the address of a block allocated in the object module.
+
+ The name of the block is a local symbol made with this statement:
+
+ ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0);
+
+ Of course, since you are writing the definition of
+ `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you
+ can take a short cut in the definition of this macro and use the
+ name that you know will result.
+
+ The first word of this block is a flag which will be nonzero if
+ the object module has already been initialized. So test this
+ word first, and do not call `__bb_init_func' if the flag is
+ nonzero.
+
+`BLOCK_PROFILER (FILE, BLOCKNO)'
+ A C statement or compound statement to increment the count
+ associated with the basic block number BLOCKNO. Basic blocks
+ are numbered separately from zero within each compilation. The
+ count associated with block number BLOCKNO is at index BLOCKNO
+ in a vector of words; the name of this array is a local symbol
+ made with this statement:
+
+ ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2);
+
+ Of course, since you are writing the definition of
+ `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you
+ can take a short cut in the definition of this macro and use the
+ name that you know will result.
+
+`EXIT_IGNORE_STACK'
+ Define this macro as a C expression that is nonzero if the
+ return instruction or the function epilogue ignores the value of
+ the stack pointer; in other words, if it is safe to delete an
+ instruction to adjust the stack pointer before a return from the
+ function.
+
+ Note that this macro's value is relevant only for functions for
+ which frame pointers are maintained. It is never safe to delete
+ a final stack adjustment in a function that has no frame
+ pointer, and the compiler knows this regardless of
+ `EXIT_IGNORE_STACK'.
+
+`FUNCTION_EPILOGUE (FILE, SIZE)'
+ A C compound statement that outputs the assembler code for exit
+ from a function. The epilogue is responsible for restoring the
+ saved registers and stack pointer to their values when the
+ function was called, and returning control to the caller. This
+ macro takes the same arguments as the macro `FUNCTION_PROLOGUE',
+ and the registers to restore are determined from
+ `regs_ever_live' and `CALL_USED_REGISTERS' in the same way.
+
+ On some machines, there is a single instruction that does all
+ the work of returning from the function. On these machines,
+ give that instruction the name `return' and do not define the
+ macro `FUNCTION_EPILOGUE' at all.
+
+ Do not define a pattern named `return' if you want the
+ `FUNCTION_EPILOGUE' to be used. If you want the target switches
+ to control whether return instructions or epilogues are used,
+ define a `return' pattern with a validity condition that tests
+ the target switches appropriately. If the `return' pattern's
+ validity condition is false, epilogues will be used.
+
+ On machines where functions may or may not have frame-pointers,
+ the function exit code must vary accordingly. Sometimes the
+ code for these two cases is completely different. To determine
+ whether a frame pointer is in wanted, the macro can refer to the
+ variable `frame_pointer_needed'. The variable's value will be 1
+ at run time in a function that needs a frame pointer.
+
+ On some machines, some functions pop their arguments on exit
+ while others leave that for the caller to do. For example, the
+ 68020 when given `-mrtd' pops arguments in functions that take a
+ fixed number of arguments.
+
+ Your definition of the macro `RETURN_POPS_ARGS' decides which
+ functions pop their own arguments. `FUNCTION_EPILOGUE' needs to
+ know what was decided. The variable
+ `current_function_pops_args' is nonzero if the function should
+ pop its own arguments. If so, use the variable
+ `current_function_args_size' as the number of bytes to pop.
+
+`FIX_FRAME_POINTER_ADDRESS (ADDR, DEPTH)'
+ A C compound statement to alter a memory address that uses the
+ frame pointer register so that it uses the stack pointer
+ register instead. This must be done in the instructions that
+ load parameter values into registers, when the reload pass
+ determines that a frame pointer is not necessary for the
+ function. ADDR will be a C variable name, and the updated
+ address should be stored in that variable. DEPTH will be the
+ current depth of stack temporaries (number of bytes of arguments
+ currently pushed). The change in offset between a
+ frame-pointer-relative address and a stack-pointer-relative
+ address must include DEPTH.
+
+ Even if your machine description specifies there will always be
+ a frame pointer in the frame pointer register, you must still
+ define `FIX_FRAME_POINTER_ADDRESS', but the definition will
+ never be executed at run time, so it may be empty.
+
+`LONGJMP_RESTORE_FROM_STACK'
+ Define this macro if the `longjmp' function restores registers
+ from the stack frames, rather than from those saved specifically
+ by `setjmp'. Certain quantities must not be kept in registers
+ across a call to `setjmp' on such machines.
+
+
+File: gcc.info, Node: Library Calls, Next: Addressing Modes, Prev: Stack Layout, Up: Machine Macros
+
+Implicit Use of Library Routines
+================================
+
+`MULSI3_LIBCALL'
+ A C string constant giving the name of the function to call for
+ multiplication of one signed full-word by another. If you do
+ not define this macro, the default name is used, which is
+ `__mulsi3', a function defined in `gnulib'.
+
+`UMULSI3_LIBCALL'
+ A C string constant giving the name of the function to call for
+ multiplication of one unsigned full-word by another. If you do
+ not define this macro, the default name is used, which is
+ `__umulsi3', a function defined in `gnulib'.
+
+`DIVSI3_LIBCALL'
+ A C string constant giving the name of the function to call for
+ division of one signed full-word by another. If you do not
+ define this macro, the default name is used, which is
+ `__divsi3', a function defined in `gnulib'.
+
+`UDIVSI3_LIBCALL'
+ A C string constant giving the name of the function to call for
+ division of one unsigned full-word by another. If you do not
+ define this macro, the default name is used, which is
+ `__udivsi3', a function defined in `gnulib'.
+
+`MODSI3_LIBCALL'
+ A C string constant giving the name of the function to call for
+ the remainder in division of one signed full-word by another.
+ If you do not define this macro, the default name is used, which
+ is `__modsi3', a function defined in `gnulib'.
+
+`UMODSI3_LIBCALL'
+ A C string constant giving the name of the function to call for
+ the remainder in division of one unsigned full-word by another.
+ If you do not define this macro, the default name is used, which
+ is `__umodsi3', a function defined in `gnulib'.
+
+`TARGET_MEM_FUNCTIONS'
+ Define this macro if GNU CC should generate calls to the System
+ V (and ANSI C) library functions `memcpy' and `memset' rather
+ than the BSD functions `bcopy' and `bzero'.
+
+`GNULIB_NEEDS_DOUBLE'
+ Define this macro if only `float' arguments cannot be passed to
+ library routines (so they must be converted to `double'). This
+ macro affects both how library calls are generated and how the
+ library routines in `gnulib.c' accept their arguments. It is
+ useful on machines where floating and fixed point arguments are
+ passed differently, such as the i860.
+
+ \ No newline at end of file