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

📄 d30v.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
#define ACCUM_OR_PSEUDO_P(R)	(ACCUM_P (R) || (R) >= FIRST_PSEUDO_REGISTER)/* Special registers.  Note, we only define the registers that can actually   be used.  */#define CR_FIRST	(ACCUM_LAST + 1)	/* First CR */#define CR_LAST		(CR_FIRST + 14)		/* Last CR */#define CR_PSW		(CR_FIRST + 0)		/* CR0, Program status word */#define CR_BPSW		(CR_FIRST + 1)		/* CR1, Backup PSW */#define CR_PC		(CR_FIRST + 2)		/* CR2, Program counter */#define CR_BPC		(CR_FIRST + 3)		/* CR3, Backup PC */#define CR_DPSW		(CR_FIRST + 4)		/* CR4, Debug PSW */#define CR_DPC		(CR_FIRST + 5)		/* CR5, Debug PC */#define CR_RPT_C	(CR_FIRST + 6)		/* CR7, loop count register */#define CR_RPT_S	(CR_FIRST + 7)		/* CR8, loop start address */#define CR_RPT_E	(CR_FIRST + 8)		/* CR9, loop end address */#define CR_MOD_S	(CR_FIRST + 9)		/* CR10, modulo address start*/#define CR_MOD_E	(CR_FIRST + 10)		/* CR11, modulo address */#define CR_IBA		(CR_FIRST + 11)		/* CR14, Interrupt break addr */#define CR_EIT_VB	(CR_FIRST + 12)		/* CR15, EIT vector address */#define CR_INT_S	(CR_FIRST + 13)		/* CR16, Interrupt status */#define CR_INT_M	(CR_FIRST + 14)		/* CR17, Interrupt mask */#define CR_P(R)			IN_RANGE_P (R, CR_FIRST, CR_LAST)#define CR_OR_PSEUDO_P(R)	(CR_P (R) || (R) >= FIRST_PSEUDO_REGISTER)/* Register Basics *//* 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'.  */#define FIRST_PSEUDO_REGISTER (CR_LAST + 1)/* 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'.  */#define FIXED_REGISTERS							\{									\  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* R0  - R15 */	\  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,  /* R16 - R31 */	\  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* R32 - R47 */	\  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  /* R48 - R63 */	\  1,						   /* ARG ptr */	\  0, 0, 0, 0, 1, 1, 1, 1,			   /* F0 - F7 */	\  0, 0,						   /* A0 - A1 */	\  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	   /* CRs */		\}/* 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.  */#define CALL_USED_REGISTERS		        			\{					        			\  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* R0  - R15 */	\  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* R16 - R31 */	\  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* R32 - R47 */	\  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  /* R48 - R63 */	\  1,						   /* ARG ptr */	\  1, 1, 1, 1, 1, 1, 1, 1,			   /* F0 - F7 */	\  1, 0,						   /* A0 - A1 */	\  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	   /* CRs */		\}/* 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.)  *//* #define CONDITIONAL_REGISTER_USAGE *//* If this macro is defined and has a nonzero value, it means that `setjmp' and   related functions fail to save the registers, or that `longjmp' fails to   restore them.  To compensate, the compiler avoids putting variables in   registers in functions that use `setjmp'.  *//* #define NON_SAVING_SETJMP *//* Define this macro if the target machine has register windows.  This C   expression returns the register number as seen by the called function   corresponding to the register number OUT as seen by the calling function.   Return OUT if register number OUT is not an outbound register.  *//* #define INCOMING_REGNO(OUT) *//* Define this macro if the target machine has register windows.  This C   expression returns the register number as seen by the calling function   corresponding to the register number IN as seen by the called function.   Return IN if register number IN is not an inbound register.  *//* #define OUTGOING_REGNO(IN) *//* Order of allocation of registers *//* If defined, an initializer for a vector of integers, containing the numbers   of hard registers in the order in which 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 machines where the highest numbered registers   must always be saved and the save-multiple-registers instruction supports   only sequences of consecutive registers.  On such machines, define   `REG_ALLOC_ORDER' to be an initializer that lists the highest numbered   allocatable register first.  */#define REG_ALLOC_ORDER							\{									\  /* volatile registers */						\  GPR_FIRST + 2,    GPR_FIRST + 3,    GPR_FIRST + 4,    GPR_FIRST + 5,	\  GPR_FIRST + 6,    GPR_FIRST + 7,    GPR_FIRST + 8,    GPR_FIRST + 9,	\  GPR_FIRST + 10,   GPR_FIRST + 11,   GPR_FIRST + 12,   GPR_FIRST + 13,	\  GPR_FIRST + 14,   GPR_FIRST + 15,   GPR_FIRST + 16,   GPR_FIRST + 17,	\  GPR_FIRST + 18,   GPR_FIRST + 19,   GPR_FIRST + 20,   GPR_FIRST + 21,	\  GPR_FIRST + 22,   GPR_FIRST + 23,   GPR_FIRST + 24,   GPR_FIRST + 25, \  GPR_FIRST + 1,							\									\  /* saved registers */							\  GPR_FIRST + 34,   GPR_FIRST + 35,   GPR_FIRST + 36,   GPR_FIRST + 37,	\  GPR_FIRST + 38,   GPR_FIRST + 39,   GPR_FIRST + 40,   GPR_FIRST + 41,	\  GPR_FIRST + 42,   GPR_FIRST + 43,   GPR_FIRST + 44,   GPR_FIRST + 45,	\  GPR_FIRST + 46,   GPR_FIRST + 47,   GPR_FIRST + 48,   GPR_FIRST + 49,	\  GPR_FIRST + 50,   GPR_FIRST + 51,   GPR_FIRST + 52,   GPR_FIRST + 53,	\  GPR_FIRST + 54,   GPR_FIRST + 55,   GPR_FIRST + 56,   GPR_FIRST + 57,	\  GPR_FIRST + 58,   GPR_FIRST + 59,   GPR_FIRST + 60,   GPR_FIRST + 61,	\  GPR_FIRST + 62,							\									\  /* flags */								\  FLAG_F2,          FLAG_F3,          FLAG_F0,          FLAG_F1,	\  FLAG_SAT,         FLAG_OVERFLOW,    FLAG_ACC_OVER,    FLAG_CARRY,	\									\  /* accumultors */							\  ACCUM_FIRST + 0,  ACCUM_FIRST + 1,					\									\  /* fixed registers */							\  GPR_FIRST + 0,    GPR_FIRST + 26,   GPR_FIRST + 27,   GPR_FIRST + 28,	\  GPR_FIRST + 29,   GPR_FIRST + 30,   GPR_FIRST + 31,   GPR_FIRST + 32,	\  GPR_FIRST + 33,   GPR_FIRST + 63,					\  CR_PSW,	    CR_BPSW,	      CR_PC,		CR_BPC,		\  CR_DPSW,	    CR_DPC,	      CR_RPT_C,		CR_RPT_S,	\  CR_RPT_E,	    CR_MOD_S,	      CR_MOD_E,		CR_IBA,		\  CR_EIT_VB,	    CR_INT_S,	      CR_INT_M,				\  ARG_POINTER_REGNUM,							\}/* A C statement (sans semicolon) to choose the order in which to allocate hard   registers for pseudo-registers local to a basic block.   Store the desired register order in the array `reg_alloc_order'.  Element 0   should be the register to allocate first; element 1, the next register; and   so on.   The macro body should not assume anything about the contents of   `reg_alloc_order' before execution of the macro.   On most machines, it is not necessary to define this macro.  *//* #define ORDER_REGS_FOR_LOCAL_ALLOC *//* How Values Fit in Registers *//* 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))  */#define HARD_REGNO_NREGS(REGNO, MODE)					\(ACCUM_P (REGNO) ? ((GET_MODE_SIZE (MODE) + 2*UNITS_PER_WORD - 1)	\		    / (2*UNITS_PER_WORD))				\		 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)		\		    / UNITS_PER_WORD))/* 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.   The minimum requirement for a mode to be OK in a register is that the   `movMODE' instruction pattern support moves between the register and any   other hard register for which the mode is OK; and that moving a value into   the register and back out not alter it.   Since the same instruction used to move `SImode' will work for all narrower   integer modes, it is not necessary on any machine for `HARD_REGNO_MODE_OK'   to distinguish between these modes, provided you define patterns `movhi',   etc., to take advantage of this.  This is useful because of the interaction   between `HARD_REGNO_MODE_OK' and `MODES_TIEABLE_P'; it is very desirable for   all integer modes to be tieable.   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.  Integer move instructions   can be used to move the values.   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, so you can define this macro to 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   pattern's constraint asks for one.  */extern unsigned char hard_regno_mode_ok[][FIRST_PSEUDO_REGISTER];#define HARD_REGNO_MODE_OK(REGNO, MODE) hard_regno_mode_ok[ (int)MODE ][ REGNO ]/* 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.  */extern unsigned char modes_tieable_p[];#define MODES_TIEABLE_P(MODE1, MODE2) \  modes_tieable_p[ (((int)(MODE1)) * (NUM_MACHINE_MODES)) + (int)(MODE2) ]/* Define this macro if the compiler should avoid copies to/from CCmode   registers.  You should only define this macro if support fo copying to/from   CCmode is incomplete.  */   /* On the D30V, copying to/from CCmode is complete, but since there are only   two CC registers usable for conditional tests, this helps gcse not compound   the reload problem.  */#define AVOID_CCMODE_COPIES/* Handling Leaf Functions *//* A C initializer for a vector, indexed by hard register number, which   contains 1 for a register that is allowable in a candidate for leaf function   treatment.   If leaf function treatment involves renumbering the registers, then the   registers marked here should be the ones before renumbering--those that GNU   CC would ordinarily allocate.  The registers which will actually be used in   the assembler code, after renumbering, should not be marked with 1 in this

⌨️ 快捷键说明

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