⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stormy16.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
   arguments: an integer representing the number of bytes of fixed sized   arguments on the stack, and a tree representing the number of bytes of   variable sized arguments on the stack.   When these macros are defined, `REG_PARM_STACK_SPACE' will only be called   for libcall functions, the current function, or for a function being called   when it is known that such stack space must be allocated.  In each case this   value can be easily computed.   When deciding whether a called function needs such stack space, and how much   space to reserve, GNU CC uses these two macros instead of   `REG_PARM_STACK_SPACE'.  *//* #define MAYBE_REG_PARM_STACK_SPACE *//* #define FINAL_REG_PARM_STACK_SPACE(CONST_SIZE, VAR_SIZE) *//* Define this if it is the responsibility of the caller to allocate the area   reserved for arguments passed in registers.   If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls whether the   space for these arguments counts in the value of   `current_function_outgoing_args_size'.  *//* #define OUTGOING_REG_PARM_STACK_SPACE *//* Define this macro if `REG_PARM_STACK_SPACE' is defined, but the stack   parameters don't skip the area specified by it.   Normally, when a parameter is not passed in registers, it is placed on the   stack beyond the `REG_PARM_STACK_SPACE' area.  Defining this macro   suppresses this behavior and causes the parameter to be passed on the stack   in its natural location.  *//* #define STACK_PARMS_IN_REG_PARM_AREA *//* A C expression that should indicate the number of bytes of its own arguments   that a function pops on returning, or 0 if the function pops no arguments   and the caller must therefore pop them all after the function returns.   FUNDECL is a C variable whose value is a tree node that describes the   function in question.  Normally it is a node of type `FUNCTION_DECL' that   describes the declaration of the function.  From this it is possible to   obtain the DECL_ATTRIBUTES of the function.   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.   STACK-SIZE is the number of bytes of arguments passed on the stack.  If a   variable number of bytes is passed, it is zero, and argument popping will   always be the responsibility of the calling function.   On the VAX, all functions always pop their arguments, so the definition of   this macro is STACK-SIZE.  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.  */#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0/* Function Arguments in Registers */#define NUM_ARGUMENT_REGISTERS 6#define FIRST_ARGUMENT_REGISTER 2#define XSTORMY16_WORD_SIZE(TYPE, MODE)				\  ((((TYPE) ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE))	\    + 1) 							\   / 2)/* A C expression that controls whether a function argument is passed in a   register, and which register.   The arguments are CUM, of type CUMULATIVE_ARGS, which summarizes   (in a way defined by INIT_CUMULATIVE_ARGS and FUNCTION_ARG_ADVANCE)   all of the previous arguments so far passed in registers; 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 machines like 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.   You may use the macro `MUST_PASS_IN_STACK (MODE, TYPE)' in the definition of   this macro to determine if this argument is of a type that must be passed in   the stack.  If `REG_PARM_STACK_SPACE' is not defined and `FUNCTION_ARG'   returns nonzero for such an argument, the compiler will abort.  If   `REG_PARM_STACK_SPACE' is defined, the argument will be computed in the   stack and then loaded into a register.  */#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)				  \  ((MODE) == VOIDmode ? const0_rtx					  \   : (CUM) + XSTORMY16_WORD_SIZE (TYPE, MODE) > NUM_ARGUMENT_REGISTERS ? 0 \   : gen_rtx_REG (MODE, (CUM) + 2))/* 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.  *//* #define FUNCTION_INCOMING_ARG(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.  */#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0/* A C expression that indicates when an argument must be passed by reference.   If nonzero for an argument, a copy of that argument is made in memory and a   pointer to the argument is passed instead of the argument itself.  The   pointer is passed in whatever way is appropriate for passing a pointer to   that type.   On machines where `REG_PARM_STACK_SPACE' is not defined, a suitable   definition of this macro might be        #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED)  \          MUST_PASS_IN_STACK (MODE, TYPE)  */#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) 0/* If defined, a C expression that indicates when it is more   desirable to keep an argument passed by invisible reference as a   reference, rather than copying it to a pseudo register.  *//* #define FUNCTION_ARG_KEEP_AS_REFERENCE(CUM, MODE, TYPE, NAMED) *//* If defined, a C expression that indicates when it is the called function's   responsibility to make a copy of arguments passed by invisible reference.   Normally, the caller makes a copy and passes the address of the copy to the   routine being called.  When FUNCTION_ARG_CALLEE_COPIES is defined and is   nonzero, the caller does not make a copy.  Instead, it passes a pointer to   the "live" value.  The called function must not modify this value.  If it   can be determined that the value won't be modified, it need not make a copy;   otherwise a copy must be made.  *//* #define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) *//* 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.   There is no need to record in `CUMULATIVE_ARGS' anything about the arguments   that have been passed on the stack.  The compiler has other variables to   keep track of that.  For target machines on which all arguments are passed   on the stack, there is no need to store anything in `CUMULATIVE_ARGS';   however, the data structure must exist and should not be empty, so use   `int'.     For this platform, the value of CUMULATIVE_ARGS is the number of words   of arguments that have been passed in registers so far.  */#define CUMULATIVE_ARGS int/* 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.  The value of INDIRECT is nonzero when   processing an indirect call, for example a call through a function pointer.   The value of INDIRECT is zero for a call to an explicitly named function, a   library function call, or when `INIT_CUMULATIVE_ARGS' is used to find   arguments for the function being compiled.   When processing a call to a compiler support library function, LIBNAME   identifies which one.  It is a `symbol_ref' rtx which contains the name of   the function, as a string.  LIBNAME is 0 when an ordinary C function call is   being processed.  Thus, each time this macro is called, either LIBNAME or   FNTYPE is nonzero, but never both of them at once.  */#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) (CUM) = 0/* Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of finding the   arguments for the function being compiled.  If this macro is undefined,   `INIT_CUMULATIVE_ARGS' is used instead.   The value passed for LIBNAME is always 0, since library routines with   special calling conventions are never compiled with GNU CC.  The argument   LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.  *//* #define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) *//* 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.   This macro need not do anything if the argument in question was passed on   the stack.  The compiler knows how to track the amount of stack space used   for arguments without any special help.  */#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)			\  ((CUM) = xstormy16_function_arg_advance (CUM, MODE, TYPE, NAMED))/* 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 *amount* of padding is always just enough to reach the next multiple of   `FUNCTION_ARG_BOUNDARY'; this macro does not control it.   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.  *//* #define FUNCTION_ARG_PADDING(MODE, TYPE) *//* If defined, a C expression that gives the alignment boundary, in bits, of an   argument with the specified mode and type.  If it is not defined,   `PARM_BOUNDARY' is used for all arguments.  *//* #define FUNCTION_ARG_BOUNDARY(MODE, TYPE) *//* 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.  */#define FUNCTION_ARG_REGNO_P(REGNO)					\  ((REGNO) >= FIRST_ARGUMENT_REGISTER 					\   && (REGNO) < FIRST_ARGUMENT_REGISTER + NUM_ARGUMENT_REGISTERS)/* How Scalar Function Values are Returned *//* The number of the hard register that is used to return a scalar value from a   function call.  */#define RETURN_VALUE_REGNUM	FIRST_ARGUMENT_REGISTER     /* 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 `PROMOTE_FUNCTION_RETURN' is defined, you must apply the same promotion   rules specified in `PROMOTE_MODE' if VALTYPE is a scalar type.   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_VALUE' is not used for return vales with aggregate data types,   because these are returned in another way.  See `STRUCT_VALUE_REGNUM' and   related macros, below.  */#define FUNCTION_VALUE(VALTYPE, FUNC) \  xstormy16_function_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   cal

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -