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

📄 m88k.h

📁 gcc编译工具没有什么特别
💻 H
📖 第 1 页 / 共 5 页
字号:
#define STACK_PARMS_IN_REG_PARM_AREA/* 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 also defined, the only effect of this   macro is to determine whether the space is included in   `current_function_outgoing_args_size'.  *//* #define OUTGOING_REG_PARM_STACK_SPACE *//* Offset from the stack pointer register to an item dynamically allocated   on the stack, e.g., by `alloca'.   The default value for this macro is `STACK_POINTER_OFFSET' plus the   length of the outgoing arguments.  The default is correct for most   machines.  See `function.c' for details.  *//* #define STACK_DYNAMIC_OFFSET(FUNDECL) ... *//* Value is the number of bytes of arguments automatically   popped when returning from a subroutine call.   FUNDECL is the declaration node of the function (as a tree),   FUNTYPE is the data type of the function (as a tree),   or for a library call it is an identifier node for the subroutine name.   SIZE is the number of bytes of arguments passed on the stack.  */#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0/* Define how to find the value returned by a function.   VALTYPE is the data type of the value (as a tree).   If the precise function being called is known, FUNC is its FUNCTION_DECL;   otherwise, FUNC is 0.  */#define FUNCTION_VALUE(VALTYPE, FUNC) \  gen_rtx (REG, \	   TYPE_MODE (VALTYPE) == BLKmode ? SImode : TYPE_MODE (VALTYPE), \	   2)/* Define this if it differs from FUNCTION_VALUE.  *//* #define FUNCTION_OUTGOING_VALUE(VALTYPE, FUNC) ... *//* Disable the promotion of some structures and unions to registers. */#define RETURN_IN_MEMORY(TYPE) \  (TYPE_MODE (TYPE) == BLKmode \   || ((TREE_CODE (TYPE) == RECORD_TYPE || TREE_CODE(TYPE) == UNION_TYPE) \       && !(TYPE_MODE (TYPE) == SImode \	    || (TYPE_MODE (TYPE) == BLKmode \		&& TYPE_ALIGN (TYPE) == BITS_PER_WORD \		&& int_size_in_bytes (TYPE) == UNITS_PER_WORD))))/* Don't default to pcc-struct-return, because we have already specified   exactly how to return structures in the RETURN_IN_MEMORY macro.  */#define DEFAULT_PCC_STRUCT_RETURN 0/* Define how to find the value returned by a library function   assuming the value has mode MODE.  */#define LIBCALL_VALUE(MODE)  gen_rtx (REG, MODE, 2)/* True if N is a possible register number for a function value   as seen by the caller.  */#define FUNCTION_VALUE_REGNO_P(N) ((N) == 2)/* Determine whether a function argument is passed in a register, and   which register.  See m88k.c.  */#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \  m88k_function_arg (CUM, MODE, TYPE, NAMED)/* Define this if it differs from FUNCTION_ARG.  *//* #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.  */#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.  */#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) (0)/* A C type for declaring a variable that is used as the first argument   of `FUNCTION_ARG' and other related values.  It suffices to count   the number of words of argument so far.  */#define CUMULATIVE_ARGS int/* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a   function whose data type is FNTYPE.  For a library call, FNTYPE is 0. */#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) ((CUM) = 0)/* 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.  (TYPE is null for libcalls where that   information may not be available.)  */#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)			\  do {									\    enum machine_mode __mode = (TYPE) ? TYPE_MODE (TYPE) : (MODE);	\    if ((CUM & 1)							\	&& (__mode == DImode || __mode == DFmode			\	    || ((TYPE) && TYPE_ALIGN (TYPE) > BITS_PER_WORD)))		\      CUM++;								\    CUM += (((__mode != BLKmode)					\	     ? GET_MODE_SIZE (MODE) : int_size_in_bytes (TYPE))		\	    + 3) / 4;							\  } while (0)/* True if N is a possible register number for function argument passing.   On the m88000, these are registers 2 through 9.  */#define FUNCTION_ARG_REGNO_P(N) ((N) <= 9 && (N) >= 2)/* 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.   This macro does not control the *amount* of padding; that is always   just enough to reach the next multiple of `FUNCTION_ARG_BOUNDARY'.  */#define FUNCTION_ARG_PADDING(MODE, TYPE) \  ((MODE) == BLKmode \   || ((TYPE) && (TREE_CODE (TYPE) == RECORD_TYPE \		  || TREE_CODE (TYPE) == UNION_TYPE)) \   ? upward : GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY ? downward : none)/* 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) \  (((TYPE) ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) <= PARM_BOUNDARY \    ? PARM_BOUNDARY : 2 * PARM_BOUNDARY)/* Generate necessary RTL for __builtin_saveregs().   ARGLIST is the argument list; see expr.c.  */#define EXPAND_BUILTIN_SAVEREGS(ARGLIST) m88k_builtin_saveregs (ARGLIST)/* Generate the assembly code for function entry. */#define FUNCTION_PROLOGUE(FILE, SIZE) m88k_begin_prologue(FILE, SIZE)/* Perform special actions at the point where the prologue ends.  */#define FUNCTION_END_PROLOGUE(FILE) m88k_end_prologue(FILE)/* Output assembler code to FILE to increment profiler label # LABELNO   for profiling a function entry.  Redefined in sysv3.h, sysv4.h and   dgux.h.  */#define FUNCTION_PROFILER(FILE, LABELNO) \  output_function_profiler (FILE, LABELNO, "mcount", 1)/* Maximum length in instructions of the code output by FUNCTION_PROFILER.  */#define FUNCTION_PROFILER_LENGTH (5+3+1+5)/* Output assembler code to FILE to initialize basic-block profiling for   the current module.  LABELNO is unique to each instance.  */#define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \  output_function_block_profiler (FILE, LABELNO)/* Maximum length in instructions of the code output by   FUNCTION_BLOCK_PROFILER.  */#define FUNCTION_BLOCK_PROFILER_LENGTH (3+5+2+5)/* Output assembler code to FILE to increment the count associated with   the basic block number BLOCKNO.  */#define BLOCK_PROFILER(FILE, BLOCKNO) output_block_profiler (FILE, BLOCKNO)/* Maximum length in instructions of the code output by BLOCK_PROFILER.  */#define BLOCK_PROFILER_LENGTH 4/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,   the stack pointer does not matter.  The value is tested only in   functions that have frame pointers.   No definition is equivalent to always zero.  */#define EXIT_IGNORE_STACK (1)/* Generate the assembly code for function exit. */#define FUNCTION_EPILOGUE(FILE, SIZE) m88k_end_epilogue(FILE, SIZE)/* Perform special actions at the point where the epilogue begins.  */#define FUNCTION_BEGIN_EPILOGUE(FILE) m88k_begin_epilogue(FILE)/* Value should be nonzero if functions must have frame pointers.   Zero means the frame pointer need not be set up (and parms   may be accessed via the stack pointer) in functions that seem suitable.   This is computed in `reload', in reload1.c.  */#define FRAME_POINTER_REQUIRED \(current_function_varargs 					\ || (TARGET_OMIT_LEAF_FRAME_POINTER && !leaf_function_p ()) 	\ || (write_symbols != NO_DEBUG && !TARGET_OCS_FRAME_POSITION))/* Definitions for register eliminations.   We have two registers that can be eliminated on the m88k.  First, the   frame pointer register can often be eliminated in favor of the stack   pointer register.  Secondly, the argument pointer register can always be   eliminated; it is replaced with either the stack or frame pointer.  *//* This is an array of structures.  Each structure initializes one pair   of eliminable registers.  The "from" register number is given first,   followed by "to".  Eliminations of the same "from" register are listed   in order of preference.  */#define ELIMINABLE_REGS				\{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},	\ { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM},	\ { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}/* Given FROM and TO register numbers, say whether this elimination   is allowed.  */#define CAN_ELIMINATE(FROM, TO) \  (!((FROM) == FRAME_POINTER_REGNUM && FRAME_POINTER_REQUIRED))/* Define the offset between two registers, one to be eliminated, and the other   its replacement, at the start of a routine.  */#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET)			 \{ m88k_layout_frame ();							 \  if ((FROM) == FRAME_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM)	 \      (OFFSET) = m88k_fp_offset;					 \  else if ((FROM) == ARG_POINTER_REGNUM && (TO) == FRAME_POINTER_REGNUM) \    (OFFSET) = m88k_stack_size - m88k_fp_offset;			 \  else if ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \    (OFFSET) = m88k_stack_size;						 \  else									 \    abort ();								 \}/*** Trampolines for Nested Functions ***//* Output assembler code for a block containing the constant parts   of a trampoline, leaving space for the variable parts.   This block is placed on the stack and filled in.  It is aligned   0 mod 128 and those portions that are executed are constant.   This should work for instruction caches that have cache lines up   to the aligned amount (128 is arbitrary), provided no other code   producer is attempting to play the same game.  This of course is   in violation of any number of 88open standards.  */#define TRAMPOLINE_TEMPLATE(FILE)					\{									\  char buf[256];							\  static int labelno = 0;						\  labelno++;								\  ASM_GENERATE_INTERNAL_LABEL (buf, "LTRMP", labelno);			\  /* Save the return address (r1) in the static chain reg (r11).  */	\  fprintf (FILE, "\tor\t %s,%s,0\n", reg_names[11], reg_names[1]);	\  /* Locate this block; transfer to the next instruction.  */		\  fprintf (FILE, "\tbsr\t %s\n", &buf[1]);					\  ASM_OUTPUT_INTERNAL_LABEL (FILE, "LTRMP", labelno);			\  /* Save r10; use it as the relative pointer; restore r1.  */		\  fprintf (FILE, "\tst\t %s,%s,24\n", reg_names[10], reg_names[1]);	\  fprintf (FILE, "\tor\t %s,%s,0\n", reg_names[10], reg_names[1]);	\  fprintf (FILE, "\tor\t %s,%s,0\n", reg_names[1], reg_names[11]);	\  /* Load the function's address and go there.  */			\  fprintf (FILE, "\tld\t %s,%s,32\n", reg_names[11], reg_names[10]);	\  fprintf (FILE, "\tjmp.n\t %s\n", reg_names[11]);			\  /* Restore r10 and load the static chain register.  */		\  fprintf (FILE, "\tld.d\t %s,%s,24\n", reg_names[10], reg_names[10]);	\  /* Storage: r10 save area, static chain, function address.  */	\  ASM_OUTPUT_INT (FILE, const0_rtx);					\  ASM_OUTPUT_INT (FILE, const0_rtx);					\  ASM_OUTPUT_INT (FILE, const0_rtx);					\}/* Length in units of the trampoline for entering a nested function.   This is really two components.  The first 32 bytes are fixed and   must be copied; the last 12 bytes are just storage that's filled   in later.  So for allocation purposes, it's 32+12 bytes, but for   initialization purposes, it's 32 bytes.  */#define TRAMPOLINE_SIZE (32+12)/* Alignment required for a trampoline.  128 is used to find the   beginning of a line in the instruction cache and to allow for   instruction cache lines of up to 128 bytes.  */#define TRAMPOLINE_ALIGNMENT 128/* Emit RTL insns to initialize the variable parts of a trampoline.   FNADDR is an RTX for the address of the function's pure code.   CXT is an RTX for the static chain value for the function.  */#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)			\{									\  emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 40)), FNADDR); \  emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 36)), CXT); \}/*** Library Subroutine Names ***//* 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'.  */#define TARGET_MEM_FUNCTIONS/*** Addressing Modes ***/#define EXTRA_CC_MODES CCEVENmode#define EXTRA_CC_NAMES "CCEVEN"#define SELECT_CC_MODE(OP,X,Y) CCmode/* #define HAVE_POST_INCREMENT 0 *//* #define HAVE_POST_DECREMENT 0 *//* #define HAVE_PRE_DECREMENT 0 *//* #define HAVE_PRE_INCREMENT 0 *//* Recognize any constant value that is a valid address.   When PIC, we do not accept an address that would require a scratch reg   to load into a register.  */#define CONSTANT_ADDRESS_P(X)   \  (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF		\   || GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH                 \   || (GET_CODE (X) == CONST                                            \       && ! (flag_pic && pic_address_needs_scratch (X))))/* Maximum number of registers that can appear in a valid memory address.  */#define MAX_REGS_PER_ADDRESS 2/* The condition for memory shift insns.  */#define SCALED_ADDRESS_P(ADDR)			\  (GET_CODE (ADDR) == PLUS			\

⌨️ 快捷键说明

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