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

📄 ia64.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 5 页
字号:
   to point to the data we need to load.  The complete trampoline   has the following form:		+-------------------+ \	TRAMP:	| __ia64_trampoline | |		+-------------------+  > fake function descriptor		| TRAMP+16          | |		+-------------------+ /		| target descriptor |		+-------------------+		| static link	    |		+-------------------+*//* A C expression for the size in bytes of the trampoline, as an integer.  */#define TRAMPOLINE_SIZE		32/* Alignment required for trampolines, in bits.  */#define TRAMPOLINE_ALIGNMENT	64/* A C statement to initialize the variable parts of a trampoline.  */#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) \  ia64_initialize_trampoline((ADDR), (FNADDR), (STATIC_CHAIN))/* Addressing Modes *//* Define this macro if the machine supports post-increment addressing.  */#define HAVE_POST_INCREMENT 1#define HAVE_POST_DECREMENT 1#define HAVE_POST_MODIFY_DISP 1#define HAVE_POST_MODIFY_REG 1/* A C expression that is 1 if the RTX X is a constant which is a valid   address.  */#define CONSTANT_ADDRESS_P(X) 0/* The max number of registers that can appear in a valid memory address.  */#define MAX_REGS_PER_ADDRESS 2/* A C compound statement with a conditional `goto LABEL;' executed if X (an   RTX) is a legitimate memory address on the target machine for a memory   operand of mode MODE.  */#define LEGITIMATE_ADDRESS_REG(X)					\  ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X))			\   || (GET_CODE (X) == SUBREG && GET_CODE (XEXP (X, 0)) == REG		\       && REG_OK_FOR_BASE_P (XEXP (X, 0))))#define LEGITIMATE_ADDRESS_DISP(R, X)					\  (GET_CODE (X) == PLUS							\   && rtx_equal_p (R, XEXP (X, 0))					\   && (LEGITIMATE_ADDRESS_REG (XEXP (X, 1))				\       || (GET_CODE (XEXP (X, 1)) == CONST_INT				\	   && INTVAL (XEXP (X, 1)) >= -256				\	   && INTVAL (XEXP (X, 1)) < 256)))#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) 			\do {									\  if (LEGITIMATE_ADDRESS_REG (X))					\    goto LABEL;								\  else if ((GET_CODE (X) == POST_INC || GET_CODE (X) == POST_DEC)	\	   && LEGITIMATE_ADDRESS_REG (XEXP (X, 0))			\	   && XEXP (X, 0) != arg_pointer_rtx)				\    goto LABEL;								\  else if (GET_CODE (X) == POST_MODIFY					\	   && LEGITIMATE_ADDRESS_REG (XEXP (X, 0))			\	   && XEXP (X, 0) != arg_pointer_rtx				\	   && LEGITIMATE_ADDRESS_DISP (XEXP (X, 0), XEXP (X, 1)))	\    goto LABEL;								\} while (0)/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for   use as a base register.  */#ifdef REG_OK_STRICT#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))#else#define REG_OK_FOR_BASE_P(X) \  (GENERAL_REGNO_P (REGNO (X)) || (REGNO (X) >= FIRST_PSEUDO_REGISTER))#endif/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for   use as an index register.  This is needed for POST_MODIFY.  */#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)/* A C statement or compound statement with a conditional `goto LABEL;'   executed if memory address X (an RTX) can have different meanings depending   on the machine mode of the memory reference it is used for or if the address   is valid for some modes but not others.  */#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)			\  if (GET_CODE (ADDR) == POST_DEC || GET_CODE (ADDR) == POST_INC)	\    goto LABEL;/* A C expression that is nonzero if X is a legitimate constant for an   immediate operand on the target machine.  */#define LEGITIMATE_CONSTANT_P(X) ia64_legitimate_constant_p (X)/* Condition Code Status *//* One some machines not all possible comparisons are defined, but you can   convert an invalid comparison into a valid one.  *//* ??? Investigate.  See the alpha definition.  *//* #define CANONICALIZE_COMPARISON(CODE, OP0, OP1) *//* Describing Relative Costs of Operations *//* A C expression for the cost of moving data from a register in class FROM to   one in class TO, using MODE.  */#define REGISTER_MOVE_COST  ia64_register_move_cost/* A C expression for the cost of moving data of mode M between a   register and memory.  */#define MEMORY_MOVE_COST(MODE,CLASS,IN) \  ((CLASS) == GENERAL_REGS || (CLASS) == FR_REGS || (CLASS) == FP_REGS \   || (CLASS) == GR_AND_FR_REGS ? 4 : 10)/* A C expression for the cost of a branch instruction.  A value of 1 is the   default; other values are interpreted relative to that.  Used by the   if-conversion code as max instruction count.  *//* ??? This requires investigation.  The primary effect might be how   many additional insn groups we run into, vs how good the dynamic   branch predictor is.  */#define BRANCH_COST 6/* Define this macro as a C expression which is nonzero if accessing less than   a word of memory (i.e. a `char' or a `short') is no faster than accessing a   word of memory.  */#define SLOW_BYTE_ACCESS 1/* Define this macro if it is as good or better to call a constant function   address than to call an address kept in a register.   Indirect function calls are more expensive that direct function calls, so   don't cse function addresses.  */#define NO_FUNCTION_CSE/* Dividing the output into sections.  *//* A C expression whose value is a string containing the assembler operation   that should precede instructions and read-only data.  */#define TEXT_SECTION_ASM_OP "\t.text"/* A C expression whose value is a string containing the assembler operation to   identify the following data as writable initialized data.  */#define DATA_SECTION_ASM_OP "\t.data"/* If defined, a C expression whose value is a string containing the assembler   operation to identify the following data as uninitialized global data.  */#define BSS_SECTION_ASM_OP "\t.bss"#define IA64_DEFAULT_GVALUE 8/* Position Independent Code.  *//* The register number of the register used to address a table of static data   addresses in memory.  *//* ??? Should modify ia64.md to use pic_offset_table_rtx instead of   gen_rtx_REG (DImode, 1).  *//* ??? Should we set flag_pic?  Probably need to define   LEGITIMIZE_PIC_OPERAND_P to make that work.  */#define PIC_OFFSET_TABLE_REGNUM GR_REG (1)/* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM' is   clobbered by calls.  */#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED/* The Overall Framework of an Assembler File.  *//* A C string constant describing how to begin a comment in the target   assembler language.  The compiler assumes that the comment will end at the   end of the line.  */#define ASM_COMMENT_START "//"/* A C string constant for text to be output before each `asm' statement or   group of consecutive ones.  */#define ASM_APP_ON (TARGET_GNU_AS ? "#APP\n" : "//APP\n")/* A C string constant for text to be output after each `asm' statement or   group of consecutive ones.  */#define ASM_APP_OFF (TARGET_GNU_AS ? "#NO_APP\n" : "//NO_APP\n")/* Output of Uninitialized Variables.  *//* This is all handled by svr4.h.  *//* Output and Generation of Labels.  *//* A C statement (sans semicolon) to output to the stdio stream STREAM the   assembler definition of a label named NAME.  *//* See the ASM_OUTPUT_LABELREF definition in sysv4.h for an explanation of   why ia64_asm_output_label exists.  */extern int ia64_asm_output_label;#define ASM_OUTPUT_LABEL(STREAM, NAME)					\do {									\  ia64_asm_output_label = 1;						\  assemble_name (STREAM, NAME);						\  fputs (":\n", STREAM);						\  ia64_asm_output_label = 0;						\} while (0)/* Globalizing directive for a label.  */#define GLOBAL_ASM_OP "\t.global "/* A C statement (sans semicolon) to output to the stdio stream STREAM any text   necessary for declaring the name of an external symbol named NAME which is   referenced in this compilation but not defined.  */#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \  ia64_asm_output_external (FILE, DECL, NAME)/* A C statement to store into the string STRING a label whose name is made   from the string PREFIX and the number NUM.  */#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \do {									\  sprintf (LABEL, "*.%s%d", PREFIX, NUM);				\} while (0)/* ??? Not sure if using a ? in the name for Intel as is safe.  */#define ASM_PN_FORMAT (TARGET_GNU_AS ? "%s.%lu" : "%s?%lu")/* A C statement to output to the stdio stream STREAM assembler code which   defines (equates) the symbol NAME to have the value VALUE.  */#define ASM_OUTPUT_DEF(STREAM, NAME, VALUE) \do {									\  assemble_name (STREAM, NAME);						\  fputs (" = ", STREAM);						\  assemble_name (STREAM, VALUE);					\  fputc ('\n', STREAM);							\} while (0)/* Macros Controlling Initialization Routines.  *//* This is handled by svr4.h and sysv4.h.  *//* Output of Assembler Instructions.  *//* A C initializer containing the assembler's names for the machine registers,   each one as a C string constant.  */#define REGISTER_NAMES \{									\  /* General registers.  */						\  "ap", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",		\  "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19",	\  "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29",	\  "r30", "r31",								\  /* Local registers.  */						\  "loc0", "loc1", "loc2", "loc3", "loc4", "loc5", "loc6", "loc7",	\  "loc8", "loc9", "loc10","loc11","loc12","loc13","loc14","loc15",	\  "loc16","loc17","loc18","loc19","loc20","loc21","loc22","loc23",	\  "loc24","loc25","loc26","loc27","loc28","loc29","loc30","loc31",	\  "loc32","loc33","loc34","loc35","loc36","loc37","loc38","loc39",	\  "loc40","loc41","loc42","loc43","loc44","loc45","loc46","loc47",	\  "loc48","loc49","loc50","loc51","loc52","loc53","loc54","loc55",	\  "loc56","loc57","loc58","loc59","loc60","loc61","loc62","loc63",	\  "loc64","loc65","loc66","loc67","loc68","loc69","loc70","loc71",	\  "loc72","loc73","loc74","loc75","loc76","loc77","loc78","loc79",	\  /* Input registers.  */						\  "in0",  "in1",  "in2",  "in3",  "in4",  "in5",  "in6",  "in7",	\  /* Output registers.  */						\  "out0", "out1", "out2", "out3", "out4", "out5", "out6", "out7",	\  /* Floating-point registers.  */					\  "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9",		\  "f10", "f11", "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19",	\  "f20", "f21", "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29",	\  "f30", "f31", "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",	\  "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47", "f48", "f49",	\  "f50", "f51", "f52", "f53", "f54", "f55", "f56", "f57", "f58", "f59",	\  "f60", "f61", "f62", "f63", "f64", "f65", "f66", "f67", "f68", "f69",	\  "f70", "f71", "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",	\  "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87", "f88", "f89",	\  "f90", "f91", "f92", "f93", "f94", "f95", "f96", "f97", "f98", "f99",	\  "f100","f101","f102","f103","f104","f105","f106","f107","f108","f109",\  "f110","f111","f112","f113","f114","f115","f116","f117","f118","f119",\  "f120","f121","f122","f123","f124","f125","f126","f127",		\  /* Predicate registers.  */						\  "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9",		\  "p10", "p11", "p12", "p13", "p14", "p15", "p16", "p17", "p18", "p19",	\  "p20", "p21", "p22", "p23", "p24", "p25", "p26", "p27", "p28", "p29",	\  "p30", "p31", "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",	\  "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47", "p48", "p49",	\  "p50", "p51", "p52", "p53", "p54", "p55", "p56", "p57", "p58", "p59",	\  "p60", "p61", "p62", "p63",						\  /* Branch registers.  */						\  "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",			\  /* Frame pointer.  Application registers.  */				\  "sfp", "ar.ccv", "ar.unat", "ar.pfs", "ar.lc", "ar.ec",	\}/* If defined, a C initializer fo

⌨️ 快捷键说明

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