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

📄 ia64.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
   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.  *//* ??? Should the GR return value registers come before or after the rest   of the caller-save GRs?  */#define REG_ALLOC_ORDER							   \{									   \  /* Caller-saved general registers.  */				   \  R_GR (14), R_GR (15), R_GR (16), R_GR (17),				   \  R_GR (18), R_GR (19), R_GR (20), R_GR (21), R_GR (22), R_GR (23),	   \  R_GR (24), R_GR (25), R_GR (26), R_GR (27), R_GR (28), R_GR (29),	   \  R_GR (30), R_GR (31),							   \  /* Output registers.  */						   \  R_GR (120), R_GR (121), R_GR (122), R_GR (123), R_GR (124), R_GR (125),  \  R_GR (126), R_GR (127),						   \  /* Caller-saved general registers, also used for return values.  */	   \  R_GR (8), R_GR (9), R_GR (10), R_GR (11),				   \  /* addl caller-saved general registers.  */				   \  R_GR (2), R_GR (3),							   \  /* Caller-saved FP registers.  */					   \  R_FR (6), R_FR (7),							   \  /* Caller-saved FP registers, used for parameters and return values.  */ \  R_FR (8), R_FR (9), R_FR (10), R_FR (11),				   \  R_FR (12), R_FR (13), R_FR (14), R_FR (15),				   \  /* Rotating caller-saved FP registers.  */				   \  R_FR (32), R_FR (33), R_FR (34), R_FR (35),				   \  R_FR (36), R_FR (37), R_FR (38), R_FR (39), R_FR (40), R_FR (41),	   \  R_FR (42), R_FR (43), R_FR (44), R_FR (45), R_FR (46), R_FR (47),	   \  R_FR (48), R_FR (49), R_FR (50), R_FR (51), R_FR (52), R_FR (53),	   \  R_FR (54), R_FR (55), R_FR (56), R_FR (57), R_FR (58), R_FR (59),	   \  R_FR (60), R_FR (61), R_FR (62), R_FR (63), R_FR (64), R_FR (65),	   \  R_FR (66), R_FR (67), R_FR (68), R_FR (69), R_FR (70), R_FR (71),	   \  R_FR (72), R_FR (73), R_FR (74), R_FR (75), R_FR (76), R_FR (77),	   \  R_FR (78), R_FR (79), R_FR (80), R_FR (81), R_FR (82), R_FR (83),	   \  R_FR (84), R_FR (85), R_FR (86), R_FR (87), R_FR (88), R_FR (89),	   \  R_FR (90), R_FR (91), R_FR (92), R_FR (93), R_FR (94), R_FR (95),	   \  R_FR (96), R_FR (97), R_FR (98), R_FR (99), R_FR (100), R_FR (101),	   \  R_FR (102), R_FR (103), R_FR (104), R_FR (105), R_FR (106), R_FR (107),  \  R_FR (108), R_FR (109), R_FR (110), R_FR (111), R_FR (112), R_FR (113),  \  R_FR (114), R_FR (115), R_FR (116), R_FR (117), R_FR (118), R_FR (119),  \  R_FR (120), R_FR (121), R_FR (122), R_FR (123), R_FR (124), R_FR (125),  \  R_FR (126), R_FR (127),						   \  /* Caller-saved predicate registers.  */				   \  R_PR (6), R_PR (7), R_PR (8), R_PR (9), R_PR (10), R_PR (11),		   \  R_PR (12), R_PR (13), R_PR (14), R_PR (15),				   \  /* Rotating caller-saved predicate registers.  */			   \  R_PR (16), R_PR (17),							   \  R_PR (18), R_PR (19), R_PR (20), R_PR (21), R_PR (22), R_PR (23),	   \  R_PR (24), R_PR (25), R_PR (26), R_PR (27), R_PR (28), R_PR (29),	   \  R_PR (30), R_PR (31), R_PR (32), R_PR (33), R_PR (34), R_PR (35),	   \  R_PR (36), R_PR (37), R_PR (38), R_PR (39), R_PR (40), R_PR (41),	   \  R_PR (42), R_PR (43), R_PR (44), R_PR (45), R_PR (46), R_PR (47),	   \  R_PR (48), R_PR (49), R_PR (50), R_PR (51), R_PR (52), R_PR (53),	   \  R_PR (54), R_PR (55), R_PR (56), R_PR (57), R_PR (58), R_PR (59),	   \  R_PR (60), R_PR (61), R_PR (62), R_PR (63),				   \  /* Caller-saved branch registers.  */					   \  R_BR (6), R_BR (7),							   \									   \  /* Stacked callee-saved general registers.  */			   \  R_GR (32), R_GR (33), R_GR (34), R_GR (35),				   \  R_GR (36), R_GR (37), R_GR (38), R_GR (39), R_GR (40), R_GR (41),	   \  R_GR (42), R_GR (43), R_GR (44), R_GR (45), R_GR (46), R_GR (47),	   \  R_GR (48), R_GR (49), R_GR (50), R_GR (51), R_GR (52), R_GR (53),	   \  R_GR (54), R_GR (55), R_GR (56), R_GR (57), R_GR (58), R_GR (59),	   \  R_GR (60), R_GR (61), R_GR (62), R_GR (63), R_GR (64), R_GR (65),	   \  R_GR (66), R_GR (67), R_GR (68), R_GR (69), R_GR (70), R_GR (71),	   \  R_GR (72), R_GR (73), R_GR (74), R_GR (75), R_GR (76), R_GR (77),	   \  R_GR (78), R_GR (79), R_GR (80), R_GR (81), R_GR (82), R_GR (83),	   \  R_GR (84), R_GR (85), R_GR (86), R_GR (87), R_GR (88), R_GR (89),	   \  R_GR (90), R_GR (91), R_GR (92), R_GR (93), R_GR (94), R_GR (95),	   \  R_GR (96), R_GR (97), R_GR (98), R_GR (99), R_GR (100), R_GR (101),	   \  R_GR (102), R_GR (103), R_GR (104), R_GR (105), R_GR (106), R_GR (107),  \  R_GR (108),								   \  /* Input registers.  */						   \  R_GR (112), R_GR (113), R_GR (114), R_GR (115), R_GR (116), R_GR (117),  \  R_GR (118), R_GR (119),						   \  /* Callee-saved general registers.  */				   \  R_GR (4), R_GR (5), R_GR (6), R_GR (7),				   \  /* Callee-saved FP registers.  */					   \  R_FR (2), R_FR (3), R_FR (4), R_FR (5), R_FR (16), R_FR (17),		   \  R_FR (18), R_FR (19), R_FR (20), R_FR (21), R_FR (22), R_FR (23),	   \  R_FR (24), R_FR (25), R_FR (26), R_FR (27), R_FR (28), R_FR (29),	   \  R_FR (30), R_FR (31),							   \  /* Callee-saved predicate registers.  */				   \  R_PR (1), R_PR (2), R_PR (3), R_PR (4), R_PR (5),			   \  /* Callee-saved branch registers.  */					   \  R_BR (1), R_BR (2), R_BR (3), R_BR (4), R_BR (5),			   \									   \  /* ??? Stacked registers reserved for fp, rp, and ar.pfs.  */		   \  R_GR (109), R_GR (110), R_GR (111),					   \									   \  /* Special general registers.  */					   \  R_GR (0), R_GR (1), R_GR (12), R_GR (13),				   \  /* Special FP registers.  */						   \  R_FR (0), R_FR (1),							   \  /* Special predicate registers.  */					   \  R_PR (0),								   \  /* Special branch registers.  */					   \  R_BR (0),								   \  /* Other fixed registers.  */						   \  FRAME_POINTER_REGNUM, 						   \  AR_CCV_REGNUM, AR_UNAT_REGNUM, AR_PFS_REGNUM, AR_LC_REGNUM,		   \  AR_EC_REGNUM		  						   \}/* 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.  *//* ??? We say that BImode PR values require two registers.  This allows us to   easily store the normal and inverted values.  We use CCImode to indicate   a single predicate register.  */#define HARD_REGNO_NREGS(REGNO, MODE)					\  ((REGNO) == PR_REG (0) && (MODE) == DImode ? 64			\   : PR_REGNO_P (REGNO) && (MODE) == BImode ? 2				\   : PR_REGNO_P (REGNO) && (MODE) == CCImode ? 1			\   : FR_REGNO_P (REGNO) && (MODE) == TFmode && INTEL_EXTENDED_IEEE_FORMAT ? 1 \   : (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).  */#define HARD_REGNO_MODE_OK(REGNO, MODE)				\  (FR_REGNO_P (REGNO) ?						\     GET_MODE_CLASS (MODE) != MODE_CC &&			\     (MODE) != TImode &&					\     (MODE) != BImode &&					\     ((MODE) != TFmode || INTEL_EXTENDED_IEEE_FORMAT) 		\   : PR_REGNO_P (REGNO) ?					\     (MODE) == BImode || GET_MODE_CLASS (MODE) == MODE_CC	\   : GR_REGNO_P (REGNO) ? (MODE) != CCImode && (MODE) != TFmode	\   : AR_REGNO_P (REGNO) ? (MODE) == DImode			\   : BR_REGNO_P (REGNO) ? (MODE) == DImode			\   : 0)/* 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.  *//* Don't tie integer and FP modes, as that causes us to get integer registers   allocated for FP instructions.  TFmode only supported in FP registers so   we can't tie it with any other modes.  */#define MODES_TIEABLE_P(MODE1, MODE2)			\  (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2)	\   && (((MODE1) == TFmode) == ((MODE2) == TFmode))	\   && (((MODE1) == BImode) == ((MODE2) == BImode)))/* 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.  *//* ??? This might be useful.  *//* #define LEAF_REGISTERS *//* A C expression whose value is the register number to which REGNO should be   renumbered, when a function is treated as a leaf function.  *//* ??? This might be useful.  *//* #define LEAF_REG_REMAP(REGNO) *//* Register Classes *//* An enumeral type that must be defined with all the register class names as   enumeral values.  `NO_REGS' must be first.  `ALL_REGS' must be the last   register class, followed by one more enumeral value, `LIM_REG_CLASSES',   which is not a register class but rather tells how many classes there   are.  *//* ??? When compiling without optimization, it is possible for the only use of   a pseudo to be a parameter load from the stack with a REG_EQUIV note.   Regclass handles this case specially and does not assign any costs to the   pseudo.  The pseudo then ends up using the last class before ALL_REGS.   Thus we must not let either PR_REGS or BR_REGS be the last class.  The   testcase for this is gcc.c-torture/execute/va-arg-7.c.  */enum reg_class{  NO_REGS,  PR_REGS,  BR_REGS,  AR_M_REGS,  AR_I_REGS,  ADDL_REGS,  GR_REGS,  FR_REGS,  GR_AND_BR_REGS,  GR_AND_FR_REGS,  ALL_REGS,  LIM_REG_CLASSES};#define GENERAL_REGS GR_REGS/* The number of distinct register classes.  */#define N_REG_CLASSES ((int) LIM_REG_CLASSES)/* An initializer containing the names of the register classes as C string   constants.  These names are used in writing some of the debugging dumps.  */#define REG_CLASS_NAMES \{ "NO_REGS", "PR_REGS", "BR_REGS", "AR_M_REGS", "AR_I_REGS", \  "ADDL_REGS", "GR_REGS", "FR_REGS", \  "GR_AND_BR_REGS", "GR_AND_FR_REGS", "ALL_REGS" }/* An initializer containing the contents of the register classes, as integers   which are bit masks.  The Nth integer specifies the contents of class N.   The way the integer MASK is interpreted is that register R is in the class   if `MASK & (1 << R)' is 1.  */#define REG_CLASS_CONTENTS \{ 							\  /* NO_REGS.  */					\  { 0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x0000 },			\  /* PR_REGS.  */					\  { 0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0xFFFFFFFF, 0xFFFFFFFF, 0x0000 },			\  /* BR_REGS.  */					\  { 0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00FF },			\  /* AR_M_REGS.  */					\  { 0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x0600 },			\  /* AR_I_REGS.  */					\  { 0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x3800 },			\  /* ADDL_REGS.  */					\  { 0x0000000F, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x0000 },			\  /* GR_REGS.  */					\  { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x0100 },			\  /* FR_REGS.  */					\  { 0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0x00000000, 0x00000000, 0x0000 },			\  /* GR_AND_BR_REGS.  */				\  { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0x00000000, 0x00000000, 0x00000000, 0x00000000,	\    0x00000000, 0x00000000, 0x01FF },			\  /* GR_AND_FR_REGS.  */				\  { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0x00000000, 0x00000000, 0x0100 },			\  /* ALL_REGS.  */					\  { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,	\    0xFFFFFFFF, 0xFFFFFFFF, 0x3FFF },			\}/* A C expression whose value is a register class containing hard register   REGNO.  In general there is more than one such class; choose a class which   is "minimal", meaning that no smaller class also contains the register.  *//* The NO_REGS case is primarily for the benefit of rws_access_reg, which   may call here with private (invalid) register numbers, such as   REG_VOLATILE.  */#define REGNO_REG_CLASS(REGNO) \(ADDL_REGNO_P (REGNO) ? ADDL_REGS	\ : GENERAL_REGNO_P (REGNO) ? GR_REGS	\ : FR_REGNO_P (REGNO) ? FR_REGS		\ : PR_REGNO_P (REGNO) ? PR_REGS		\ : BR_REGNO_P (REGNO) ? BR_REGS		\ : AR_M_REGNO_P (REGNO) ? AR_M_REGS	\ : AR_I_REGNO_P (REGNO) ? AR_I_REGS	\ : NO_REGS)/* A macro whose definition is the name of the class to which a valid base   register must belong.  A base register is one used in an address which is   the register value plus a displacement.  */#define BASE_REG_CLASS GENERAL_REGS/* A macro whose definition is the name of the class to which a valid index   register must belong.  An index register is one used in an address where its   value is either multiplied by a scale factor or added to another register   (as well as added to a displacement).  This is needed for POST_MODIFY.  */#define INDEX_REG_CLASS GENERAL_REGS/* A C expression which defines the machine-dependent operand constraint   letters for register classes.  If CHAR is such a letter, the value should be   the register class corresponding to it.  Otherwise, the value should be   `NO_REGS'.  The register letter `r', corresponding to class `GENERAL_REGS',   will not be passed to this macro; you do not need to handle it.  */#define REG_CLASS_FROM_LETTER(CHAR) \((CHAR) == 'f' ? FR_REGS		\ : (CHAR) == 'a' ? ADDL_REGS		\ : (CHAR) == 'b' ? BR_REGS		\ : (CHAR) == 'c' ? PR_REGS		\ : (CHAR) == 'd' ? AR_M_REGS		\ : (CHAR) == 'e' ? AR_I_REGS		\ : NO_REGS)/* A C expression which is nonzero if register number NUM is suitable for use   as a base register in operand addresses.  It may be either a suitable hard   register or a pseudo register that has been allocated such a hard reg.  */#define REGNO_OK_FOR_BASE_P(REGNO) \  (GENERAL_REGNO_P (REGNO) || GENERAL_REGNO_P (reg_renumber[REGNO]))/* A C expression which is nonzero if register number NUM is suitable for use   as an index register in operand addresses.  It may be either a suitable hard   register or a pseudo register that has been allocated such a hard reg.   This is needed for POST_MODIFY.  */#define REGNO_OK_FOR_INDEX_P(NUM) REGNO_OK_FOR_BASE_P (NUM)/* A C expression that places additional restrictions on the register class to   use when it is necessary to copy value X into a register in class CLASS.   The value is a register class; perhaps CLASS, or perhaps another, smaller   class.  *//* Don't allow volatile mem reloads into floating point registers.  This   is defined to force reload to choose the r/m case instead of the f/f case   when reloading (set (reg fX) (mem/v)).

⌨️ 快捷键说明

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