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

📄 c4x.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
#define STRICT_ALIGNMENT	0#define TARGET_FLOAT_FORMAT	C4X_FLOAT_FORMAT#define MAX_FIXED_MODE_SIZE	64 /* HImode.  *//* If a structure has a floating point field then force structure   to have BLKMODE, unless it is the only field.  */#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \  (TREE_CODE (TREE_TYPE (FIELD)) == REAL_TYPE && (MODE) == VOIDmode)/* Number of bits in the high and low parts of a two stage   load of an immediate constant.  */#define BITS_PER_HIGH 16#define BITS_PER_LO_SUM 16/* Define register numbers.  *//* Extended-precision registers.  */#define R0_REGNO   0#define R1_REGNO   1#define R2_REGNO   2#define R3_REGNO   3#define R4_REGNO   4#define R5_REGNO   5#define R6_REGNO   6#define R7_REGNO   7/* Auxiliary (address) registers.  */#define AR0_REGNO  8#define AR1_REGNO  9#define AR2_REGNO 10#define AR3_REGNO 11#define AR4_REGNO 12#define AR5_REGNO 13#define AR6_REGNO 14#define AR7_REGNO 15/* Data page register.  */#define DP_REGNO  16/* Index registers.  */#define IR0_REGNO 17#define IR1_REGNO 18/* Block size register.  */#define BK_REGNO  19/* Stack pointer.  */#define SP_REGNO  20/* Status register.  */#define ST_REGNO  21/* Misc. interrupt registers.  */#define DIE_REGNO 22		/* C4x only.  */#define IE_REGNO  22		/* C3x only.  */#define IIE_REGNO 23		/* C4x only.  */#define IF_REGNO  23		/* C3x only.  */#define IIF_REGNO 24		/* C4x only.  */#define IOF_REGNO 24		/* C3x only.  *//* Repeat block registers.  */#define RS_REGNO  25#define RE_REGNO  26#define RC_REGNO  27/* Additional extended-precision registers.  */#define R8_REGNO  28		/* C4x only.  */#define R9_REGNO  29		/* C4x only.  */#define R10_REGNO 30		/* C4x only.  */#define R11_REGNO 31		/* C4x only.  */#define FIRST_PSEUDO_REGISTER	32/* Extended precision registers (low set).  */#define IS_R0R1_REGNO(r) \     ((unsigned int)((r) - R0_REGNO) <= (R1_REGNO - R0_REGNO))#define IS_R2R3_REGNO(r) \     ((unsigned int)((r) - R2_REGNO) <= (R3_REGNO - R2_REGNO))   #define IS_EXT_LOW_REGNO(r) \     ((unsigned int)((r) - R0_REGNO) <= (R7_REGNO - R0_REGNO))   /* Extended precision registers (high set).  */#define IS_EXT_HIGH_REGNO(r) \(! TARGET_C3X \ && ((unsigned int) ((r) - R8_REGNO) <= (R11_REGNO - R8_REGNO)))/* Address registers.  */#define IS_AUX_REGNO(r) \    ((unsigned int)((r) - AR0_REGNO) <= (AR7_REGNO - AR0_REGNO))   #define IS_ADDR_REGNO(r)   IS_AUX_REGNO(r)#define IS_DP_REGNO(r)     ((r) == DP_REGNO)#define IS_INDEX_REGNO(r)  (((r) == IR0_REGNO) || ((r) == IR1_REGNO))#define IS_SP_REGNO(r)     ((r) == SP_REGNO)#define IS_BK_REGNO(r)     (TARGET_BK && (r) == BK_REGNO)/* Misc registers.  */#define IS_ST_REGNO(r)     ((r) == ST_REGNO)#define IS_RC_REGNO(r)     ((r) == RC_REGNO)#define IS_REPEAT_REGNO(r) (((r) >= RS_REGNO) && ((r) <= RC_REGNO))/* Composite register sets.  */#define IS_ADDR_OR_INDEX_REGNO(r) (IS_ADDR_REGNO(r) || IS_INDEX_REGNO(r))#define IS_EXT_REGNO(r)           (IS_EXT_LOW_REGNO(r) || IS_EXT_HIGH_REGNO(r))#define IS_STD_REGNO(r)           (IS_ADDR_OR_INDEX_REGNO(r) \				   || IS_REPEAT_REGNO(r) \                                   || IS_SP_REGNO(r) \		       		   || IS_BK_REGNO(r))#define IS_INT_REGNO(r)           (IS_EXT_REGNO(r) || IS_STD_REGNO(r))#define IS_GROUP1_REGNO(r)        (IS_ADDR_OR_INDEX_REGNO(r) || IS_BK_REGNO(r))#define IS_INT_CALL_SAVED_REGNO(r) (((r) == R4_REGNO) || ((r) == R5_REGNO) \                                    || ((r) == R8_REGNO))#define IS_FLOAT_CALL_SAVED_REGNO(r) (((r) == R6_REGNO) || ((r) == R7_REGNO))#define IS_PSEUDO_REGNO(r)            ((r) >= FIRST_PSEUDO_REGISTER)#define IS_R0R1_OR_PSEUDO_REGNO(r)    (IS_R0R1_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_R2R3_OR_PSEUDO_REGNO(r)    (IS_R2R3_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_EXT_OR_PSEUDO_REGNO(r)     (IS_EXT_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_STD_OR_PSEUDO_REGNO(r)     (IS_STD_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_INT_OR_PSEUDO_REGNO(r)     (IS_INT_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_ADDR_OR_PSEUDO_REGNO(r)    (IS_ADDR_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_INDEX_OR_PSEUDO_REGNO(r)   (IS_INDEX_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_EXT_LOW_OR_PSEUDO_REGNO(r) (IS_EXT_LOW_REGNO(r) \				       || IS_PSEUDO_REGNO(r))#define IS_DP_OR_PSEUDO_REGNO(r)      (IS_DP_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_SP_OR_PSEUDO_REGNO(r)      (IS_SP_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_ST_OR_PSEUDO_REGNO(r)      (IS_ST_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_RC_OR_PSEUDO_REGNO(r)      (IS_RC_REGNO(r) || IS_PSEUDO_REGNO(r))#define IS_PSEUDO_REG(op)          (IS_PSEUDO_REGNO(REGNO(op)))#define IS_ADDR_REG(op)            (IS_ADDR_REGNO(REGNO(op)))#define IS_INDEX_REG(op)           (IS_INDEX_REGNO(REGNO(op)))#define IS_GROUP1_REG(r)           (IS_GROUP1_REGNO(REGNO(op)))#define IS_SP_REG(op)              (IS_SP_REGNO(REGNO(op)))#define IS_STD_REG(op)             (IS_STD_REGNO(REGNO(op)))#define IS_EXT_REG(op)             (IS_EXT_REGNO(REGNO(op)))#define IS_R0R1_OR_PSEUDO_REG(op)  (IS_R0R1_OR_PSEUDO_REGNO(REGNO(op)))#define IS_R2R3_OR_PSEUDO_REG(op)  (IS_R2R3_OR_PSEUDO_REGNO(REGNO(op)))#define IS_EXT_OR_PSEUDO_REG(op)   (IS_EXT_OR_PSEUDO_REGNO(REGNO(op)))#define IS_STD_OR_PSEUDO_REG(op)   (IS_STD_OR_PSEUDO_REGNO(REGNO(op)))#define IS_EXT_LOW_OR_PSEUDO_REG(op) (IS_EXT_LOW_OR_PSEUDO_REGNO(REGNO(op)))#define IS_INT_OR_PSEUDO_REG(op)   (IS_INT_OR_PSEUDO_REGNO(REGNO(op)))#define IS_ADDR_OR_PSEUDO_REG(op)  (IS_ADDR_OR_PSEUDO_REGNO(REGNO(op)))#define IS_INDEX_OR_PSEUDO_REG(op) (IS_INDEX_OR_PSEUDO_REGNO(REGNO(op)))#define IS_DP_OR_PSEUDO_REG(op)    (IS_DP_OR_PSEUDO_REGNO(REGNO(op)))#define IS_SP_OR_PSEUDO_REG(op)    (IS_SP_OR_PSEUDO_REGNO(REGNO(op)))#define IS_ST_OR_PSEUDO_REG(op)    (IS_ST_OR_PSEUDO_REGNO(REGNO(op)))#define IS_RC_OR_PSEUDO_REG(op)    (IS_RC_OR_PSEUDO_REGNO(REGNO(op)))/* 1 for registers that have pervasive standard uses   and are not available for the register allocator.  */#define FIXED_REGISTERS \{									\/* R0  R1  R2  R3  R4  R5  R6  R7 AR0 AR1 AR2 AR3 AR4 AR5 AR6 AR7.  */	\    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,	\/* DP IR0 IR1  BK  SP  ST DIE IIE IIF  RS  RE  RC  R8  R9 R10 R11.  */	\    1,  0,  0,  0,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0	\}/* 1 for registers not available across function calls.   These must include the FIXED_REGISTERS and also any   registers that can be used without being saved.   The latter must include the registers where values are returned   and the register where structure-value addresses are passed.   Aside from that, you can include as many other registers as you like.        Note that the extended precision registers are only saved in some   modes.  The macro HARD_REGNO_CALL_CLOBBERED specifies which modes   get clobbered for a given regno.  */#define CALL_USED_REGISTERS \{									\/* R0  R1  R2  R3  R4  R5  R6  R7 AR0 AR1 AR2 AR3 AR4 AR5 AR6 AR7.  */	\    1,  1,  1,  1,  0,  0,  0,  0,  1,  1,  1,  0,  0,  0,  0,  0,	\/* DP IR0 IR1  BK  SP  ST DIE IIE IIF  RS  RE  RC  R8  R9 R10 R11.  */	\    1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1	\}/* Macro to conditionally modify fixed_regs/call_used_regs.  */#define CONDITIONAL_REGISTER_USAGE			\  {							\    if (! TARGET_BK)					\      {							\	fixed_regs[BK_REGNO] = 1;			\        call_used_regs[BK_REGNO] = 1;			\        c4x_regclass_map[BK_REGNO] = NO_REGS;		\      }							\    if (TARGET_C3X)					\      {							\	 int i;                                          \							 \	 reg_names[DIE_REGNO] = "ie";  /* Clobber die.  */ \	 reg_names[IF_REGNO] = "if";   /* Clobber iie.  */ \	 reg_names[IOF_REGNO] = "iof"; /* Clobber iif.  */ \	 						\	 for (i = R8_REGNO; i <= R11_REGNO; i++)	\	 {						\	     fixed_regs[i] = call_used_regs[i] = 1;	\	     c4x_regclass_map[i] = NO_REGS;		\	 }						\      }							\    if (TARGET_PRESERVE_FLOAT)				\      {							\	c4x_caller_save_map[R6_REGNO] = HFmode;		\	c4x_caller_save_map[R7_REGNO] = HFmode;		\      }							\   }/* Order of Allocation of Registers.  *//* List the order in which to allocate registers.  Each register must be   listed once, even those in FIXED_REGISTERS.   First allocate registers that don't need preservation across calls,   except index and address registers.  Then allocate data registers   that require preservation across calls (even though this invokes an   extra overhead of having to save/restore these registers).  Next   allocate the address and index registers, since using these   registers for arithmetic can cause pipeline stalls.  Finally   allocated the fixed registers which won't be allocated anyhow.  */#define REG_ALLOC_ORDER					\{R0_REGNO, R1_REGNO, R2_REGNO, R3_REGNO, 		\ R9_REGNO, R10_REGNO, R11_REGNO,			\ RS_REGNO, RE_REGNO, RC_REGNO, BK_REGNO,		\ R4_REGNO, R5_REGNO, R6_REGNO, R7_REGNO, R8_REGNO,	\ AR0_REGNO, AR1_REGNO, AR2_REGNO, AR3_REGNO,		\ AR4_REGNO, AR5_REGNO, AR6_REGNO, AR7_REGNO,		\ IR0_REGNO, IR1_REGNO,					\ SP_REGNO, DP_REGNO, ST_REGNO, IE_REGNO, IF_REGNO, IOF_REGNO}/* A C expression that is nonzero if hard register number REGNO2 can be   considered for use as a rename register for REGNO1 */#define HARD_REGNO_RENAME_OK(REGNO1,REGNO2) \  c4x_hard_regno_rename_ok((REGNO1), (REGNO2))/* Determine which register classes are very likely used by spill registers.   local-alloc.c won't allocate pseudos that have these classes as their   preferred class unless they are "preferred or nothing".  */#define CLASS_LIKELY_SPILLED_P(CLASS) ((CLASS) == INDEX_REGS)/* CCmode is wrongly defined in machmode.def.  It should have a size   of UNITS_PER_WORD.  HFmode is 40-bits and thus fits within a single   extended precision register.  Similarly, HCmode fits within two   extended precision registers.  */#define HARD_REGNO_NREGS(REGNO, MODE)				\(((MODE) == CCmode || (MODE) == CC_NOOVmode) ? 1 : \ ((MODE) == HFmode) ? 1 : \ ((MODE) == HCmode) ? 2 : \ ((GET_MODE_SIZE(MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))/* A C expression that is nonzero if the hard register REGNO is preserved   across a call in mode MODE.  This does not have to include the call used   registers.  */#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE)		              \     ((IS_FLOAT_CALL_SAVED_REGNO (REGNO) && ! ((MODE) == QFmode))  	      \      || (IS_INT_CALL_SAVED_REGNO (REGNO)				      \	  && ! ((MODE) == QImode || (MODE) == HImode || (MODE) == Pmode)))/* Specify the modes required to caller save a given hard regno.  */#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) (c4x_caller_save_map[REGNO])#define HARD_REGNO_MODE_OK(REGNO, MODE) c4x_hard_regno_mode_ok(REGNO, MODE)/* 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.   Value is 1 if it is a good idea to tie two pseudo registers   when one has mode MODE1 and one has mode MODE2.   If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,   for any hard reg, then this must be 0 for correct output.  */#define MODES_TIEABLE_P(MODE1, MODE2) 0/* Define the classes of registers for register constraints in the   machine description.  Also define ranges of constants.   One of the classes must always be named ALL_REGS and include all hard regs.   If there is more than one class, another class must be named NO_REGS   and contain no registers.   The name GENERAL_REGS must be the name of a class (or an alias for   another name such as ALL_REGS).  This is the class of registers   that is allowed by "g" or "r" in a register constraint.   Also, registers outside this class are allocated only when   instructions express preferences for them.   The classes must be numbered in nondecreasing order; that is,   a larger-numbered class must never be contained completely   in a smaller-numbered class.   For any two classes, it is very desirable that there be another   class that represents their union.  */   enum reg_class  {    NO_REGS,    R0R1_REGS,			/* 't'.  */    R2R3_REGS,			/* 'u'.  */    EXT_LOW_REGS,		/* 'q'.  */    EXT_REGS,			/* 'f'.  */    ADDR_REGS,			/* 'a'.  */    INDEX_REGS,			/* 'x'.  */    BK_REG,			/* 'k'.  */    SP_REG,			/* 'b'.  */    RC_REG,			/* 'v'.  */    COUNTER_REGS,		/*  */    INT_REGS,			/* 'c'.  */    GENERAL_REGS,		/* 'r'.  */    DP_REG,			/* 'z'.  */    ST_REG,			/* 'y'.  */    ALL_REGS,    LIM_REG_CLASSES  };#define N_REG_CLASSES (int) LIM_REG_CLASSES#define REG_CLASS_NAMES \{			\   "NO_REGS",		\   "R0R1_REGS",		\   "R2R3_REGS",		\   "EXT_LOW_REGS",	\   "EXT_REGS",		\   "ADDR_REGS",		\   "INDEX_REGS",	\   "BK_REG",		\   "SP_REG",		\   "RC_REG",		\   "COUNTER_REGS",	\   "INT_REGS",		\   "GENERAL_REGS",	\   "DP_REG",		\   "ST_REG",		\   "ALL_REGS"		\}/* Define which registers fit in which classes.   This is an initializer for a vector of HARD_REG_SET   of length N_REG_CLASSES.  RC is not included in GENERAL_REGS   since the register allocator will often choose a general register   in preference to RC for the decrement_and_branch_on_count pattern.  */#define REG_CLASS_CONTENTS \{						\ {0x00000000}, /*     No registers.  */		\ {0x00000003}, /* 't' R0-R1	.  */		\ {0x0000000c}, /* 'u' R2-R3	.  */		\

⌨️ 快捷键说明

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