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

📄 ia64.h

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
   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) \  ((unsigned) ((OUT) - OUT_REG (0)) < 8 ? IN_REG ((OUT) - OUT_REG (0)) : (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) \  ((unsigned) ((IN) - IN_REG (0)) < 8 ? OUT_REG ((IN) - IN_REG (0)) : (IN))/* Define this macro if the target machine has register windows.  This   C expression returns true if the register is call-saved but is in the   register window.  */#define LOCAL_REGNO(REGNO) \  (IN_REGNO_P (REGNO) || LOC_REGNO_P (REGNO))/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,   return the mode to be used for the comparison.  Must be defined if   EXTRA_CC_MODES is defined.  */#define SELECT_CC_MODE(OP,X,Y)  CCmode/* 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 GCC 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.  *//* ??? 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) == XFmode ? 1				\   : FR_REGNO_P (REGNO) && (MODE) == XCmode ? 2				\   : (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 						\   : PR_REGNO_P (REGNO) ?					\     (MODE) == BImode || GET_MODE_CLASS (MODE) == MODE_CC	\   : GR_REGNO_P (REGNO) ?					\     (MODE) != CCImode && (MODE) != XFmode && (MODE) != XCmode	\   : 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.  XFmode 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) == XFmode) || ((MODE1) == XCmode))	\       == (((MODE2) == XFmode) || ((MODE2) == XCmode)))	\   && (((MODE1) == BImode) == ((MODE2) == BImode)))/* Specify the modes required to caller save a given hard regno.   We need to ensure floating pt regs are not saved as DImode.  */#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \  ((FR_REGNO_P (REGNO) && (NREGS) == 1) ? XFmode        \   : choose_hard_reg_mode ((REGNO), (NREGS), false))/* 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)

⌨️ 快捷键说明

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