hard-reg-set.h

来自「GCC编译器源代码」· C头文件 代码 · 共 471 行 · 第 1/2 页

H
471
字号
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \     if ((scan_xp_[0] == scan_yp_[0])				\	 && (scan_xp_[1] == scan_yp_[1])			\	 && (scan_xp_[2] == scan_yp_[2]))			\	goto TO; } while (0)#else#if FIRST_PSEUDO_REGISTER <= 4*HOST_BITS_PER_WIDE_INT#define CLEAR_HARD_REG_SET(TO)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO);		\     scan_tp_[0] = 0;						\     scan_tp_[1] = 0;						\     scan_tp_[2] = 0;						\     scan_tp_[3] = 0; } while (0)#define SET_HARD_REG_SET(TO)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO);		\     scan_tp_[0] = -1;						\     scan_tp_[1] = -1;						\     scan_tp_[2] = -1;						\     scan_tp_[3] = -1; } while (0)#define COPY_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM);	\     scan_tp_[0] = scan_fp_[0];					\     scan_tp_[1] = scan_fp_[1];					\     scan_tp_[2] = scan_fp_[2];					\     scan_tp_[3] = scan_fp_[3]; } while (0)#define COMPL_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     scan_tp_[0] = ~ scan_fp_[0];				\     scan_tp_[1] = ~ scan_fp_[1];				\     scan_tp_[2] = ~ scan_fp_[2];				\     scan_tp_[3] = ~ scan_fp_[3]; } while (0)#define AND_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     scan_tp_[0] &= scan_fp_[0];					\     scan_tp_[1] &= scan_fp_[1];					\     scan_tp_[2] &= scan_fp_[2];					\     scan_tp_[3] &= scan_fp_[3]; } while (0)#define AND_COMPL_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     scan_tp_[0] &= ~ scan_fp_[0];				\     scan_tp_[1] &= ~ scan_fp_[1];				\     scan_tp_[2] &= ~ scan_fp_[2];				\     scan_tp_[3] &= ~ scan_fp_[3]; } while (0)#define IOR_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     scan_tp_[0] |= scan_fp_[0];				\     scan_tp_[1] |= scan_fp_[1];				\     scan_tp_[2] |= scan_fp_[2];				\     scan_tp_[3] |= scan_fp_[3]; } while (0)#define IOR_COMPL_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     scan_tp_[0] |= ~ scan_fp_[0];				\     scan_tp_[1] |= ~ scan_fp_[1];				\     scan_tp_[2] |= ~ scan_fp_[2];				\     scan_tp_[3] |= ~ scan_fp_[3]; } while (0)#define GO_IF_HARD_REG_SUBSET(X,Y,TO)  \do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \     if ((0 == (scan_xp_[0] & ~ scan_yp_[0]))			\	 && (0 == (scan_xp_[1] & ~ scan_yp_[1]))		\	 && (0 == (scan_xp_[2] & ~ scan_yp_[2]))		\	 && (0 == (scan_xp_[3] & ~ scan_yp_[3])))		\	goto TO; } while (0)#define GO_IF_HARD_REG_EQUAL(X,Y,TO)  \do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \     if ((scan_xp_[0] == scan_yp_[0])				\	 && (scan_xp_[1] == scan_yp_[1])			\	 && (scan_xp_[2] == scan_yp_[2])			\	 && (scan_xp_[3] == scan_yp_[3]))			\	goto TO; } while (0)#else /* FIRST_PSEUDO_REGISTER > 3*HOST_BITS_PER_WIDE_INT */#define CLEAR_HARD_REG_SET(TO)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO);		\     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ = 0; } while (0)#define SET_HARD_REG_SET(TO)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO);		\     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ = -1; } while (0)#define COPY_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ = *scan_fp_++; } while (0)#define COMPL_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ = ~ *scan_fp_++; } while (0)#define AND_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ &= *scan_fp_++; } while (0)#define AND_COMPL_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ &= ~ *scan_fp_++; } while (0)#define IOR_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ |= *scan_fp_++; } while (0)#define IOR_COMPL_HARD_REG_SET(TO, FROM)  \do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       *scan_tp_++ |= ~ *scan_fp_++; } while (0)#define GO_IF_HARD_REG_SUBSET(X,Y,TO)  \do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       if (0 != (*scan_xp_++ & ~ *scan_yp_++)) break;		\     if (i == HARD_REG_SET_LONGS) goto TO; } while (0)#define GO_IF_HARD_REG_EQUAL(X,Y,TO)  \do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \     register int i;						\     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\       if (*scan_xp_++ != *scan_yp_++) break;			\     if (i == HARD_REG_SET_LONGS) goto TO; } while (0)#endif#endif#endif#endif/* Define some standard sets of registers.  *//* Indexed by hard register number, contains 1 for registers   that are fixed use (stack pointer, pc, frame pointer, etc.).   These are the registers that cannot be used to allocate   a pseudo reg whose life does not cross calls.  */extern char fixed_regs[FIRST_PSEUDO_REGISTER];/* The same info as a HARD_REG_SET.  */extern HARD_REG_SET fixed_reg_set;/* Indexed by hard register number, contains 1 for registers   that are fixed use or are clobbered by function calls.   These are the registers that cannot be used to allocate   a pseudo reg whose life crosses calls.  */extern char call_used_regs[FIRST_PSEUDO_REGISTER];/* The same info as a HARD_REG_SET.  */extern HARD_REG_SET call_used_reg_set;  /* Registers that we don't want to caller save.  */extern HARD_REG_SET losing_caller_save_reg_set;/* Indexed by hard register number, contains 1 for registers that are   fixed use -- i.e. in fixed_regs -- or a function value return register   or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM.  These are the   registers that cannot hold quantities across calls even if we are   willing to save and restore them.  */extern char call_fixed_regs[FIRST_PSEUDO_REGISTER];/* The same info as a HARD_REG_SET.  */extern HARD_REG_SET call_fixed_reg_set;/* Indexed by hard register number, contains 1 for registers   that are being used for global register decls.   These must be exempt from ordinary flow analysis   and are also considered fixed.  */extern char global_regs[FIRST_PSEUDO_REGISTER];/* Table of register numbers in the order in which to try to use them.  */#ifdef REG_ALLOC_ORDER   /* Avoid undef symbol in certain broken linkers.  */extern int reg_alloc_order[FIRST_PSEUDO_REGISTER];#endif/* For each reg class, a HARD_REG_SET saying which registers are in it.  */extern HARD_REG_SET reg_class_contents[];/* For each reg class, number of regs it contains.  */extern int reg_class_size[N_REG_CLASSES];/* For each reg class, table listing all the containing classes.  */extern enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];/* For each reg class, table listing all the classes contained in it.  */extern enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];/* For each pair of reg classes,   a largest reg class contained in their union.  */extern enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];/* For each pair of reg classes,   the smallest reg class that contains their union.  */extern enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];/* Number of non-fixed registers.  */extern int n_non_fixed_regs;/* Vector indexed by hardware reg giving its name.  */extern char *reg_names[FIRST_PSEUDO_REGISTER];

⌨️ 快捷键说明

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