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

📄 arc.h

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
{							\  long t;						\  char str[30];						\  REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t);		\  REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str);	\  fprintf (FILE, "\t.word\t0x%lx %s %s\n",		\	   t, ASM_COMMENT_START, str);			\}/* This is how to output an assembler line defining a `double' constant.  */#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \{							\  long t[2];						\  char str[30];						\  REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t);		\  REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str);	\  fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \	   t[0], ASM_COMMENT_START, str, t[1]);		\}/* This is how to output an assembler line for a numeric constant byte.  */#define ASM_BYTE_OP	".byte"#define ASM_OUTPUT_BYTE(FILE, VALUE)  \  fprintf (FILE, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))/* The assembler's parentheses characters.  */#define ASM_OPEN_PAREN "("#define ASM_CLOSE_PAREN ")"/* This is how to output the definition of a user-level label named NAME,   such as the label on a static function or variable NAME.  */#define ASM_OUTPUT_LABEL(FILE, NAME) \do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)/* This is how to output a command to make the user-level label named NAME   defined for reference from other files.  */#define ASM_GLOBALIZE_LABEL(FILE, NAME) \do {				\  fputs ("\t.global\t", FILE);	\  assemble_name (FILE, NAME);	\  fputs ("\n", FILE);		\} while (0)/* A C statement (sans semicolon) to output on FILE an assembler pseudo-op to   declare a library function name external.  The name of the library function   is given by SYMREF, which has type RTX and is a SYMBOL_REF.  */#if 0/* On the ARC we want to have libgcc's for multiple cpus in one binary.   We can't use `assemble_name' here as that will call ASM_OUTPUT_LABELREF   and we'll get another suffix added on if -mmangle-cpu.  */extern char *arc_mangle_cpu;#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, SYMREF) \do {							\  if (TARGET_MANGLE_CPU_LIBGCC)				\    {							\      fprintf (FILE, "\t.rename\t_%s, _%s%s\n",		\	       XSTR (SYMREF, 0), XSTR (SYMREF, 0),	\	       arc_mangle_suffix);			\    }							\} while (0)#endif/* This is how to output a reference to a user-level label named NAME.   `assemble_name' uses this.  *//* We mangle all user labels to provide protection from linking code   compiled for different cpus.  *//* We work around a dwarfout.c deficiency by watching for labels from it and   not adding the '_' prefix nor the cpu suffix.  There is a comment in   dwarfout.c that says it should be using ASM_OUTPUT_INTERNAL_LABEL.  */extern char *arc_mangle_cpu;#define ASM_OUTPUT_LABELREF(FILE, NAME) \do {							\  if ((NAME)[0] == '.' && (NAME)[1] == 'L')		\    fprintf (FILE, "%s", NAME);				\  else							\    {							\      fputc ('_', FILE);				\      if (TARGET_MANGLE_CPU && arc_mangle_cpu != NULL)	\	fprintf (FILE, "%s_", arc_mangle_cpu);		\      fprintf (FILE, "%s", NAME);			\    }							\} while (0)/* This is how to output a definition of an internal numbered label where   PREFIX is the class of label and NUM is the number within the class.  */#undef ASM_OUTPUT_INTERNAL_LABEL#define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \do {						\  arc_ccfsm_at_label (PREFIX, NUM);		\  fprintf (FILE, ".%s%d:\n", PREFIX, NUM);	\} while (0)/* Store in OUTPUT a string (made with alloca) containing   an assembler-name for a local static variable named NAME.   LABELNO is an integer which is different for each call.  */#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),	\  sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))/* Assembler pseudo-op to equate one value with another.  *//* ??? This is needed because dwarfout.c provides a default definition too   late for defaults.h (which contains the default definition of ASM_OUTPUT_DEF   that we use).  */#define SET_ASM_OP ".set"/* A C statement (sans semicolon) to output an element in the table of   global constructors.  */#undef ASM_OUTPUT_CONSTRUCTOR#define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \do {					\  ctors_section ();			\  fprintf (FILE, "\t.word\t%%st(");	\  assemble_name (FILE, NAME);		\  fprintf (FILE, ")\n");		\} while (0)/* A C statement (sans semicolon) to output an element in the table of   global destructors.  */#undef ASM_OUTPUT_DESTRUCTOR#define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) \do {					\  dtors_section ();			\  fprintf (FILE, "\t.word\t%%st(");	\  assemble_name (FILE, NAME);		\  fprintf (FILE, ")\n");		\} while (0)/* How to refer to registers in assembler output.   This sequence is indexed by compiler's hard-register-number (see above).  */#define REGISTER_NAMES \{"r0", "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", "fp", "sp", "ilink1", "ilink2", "blink",	\ "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",	\ "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",	\ "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",	\ "r56", "r57", "r58", "r59", "lp_count", "cc"}/* Entry to the insn conditionalizer.  */#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \arc_final_prescan_insn (INSN, OPVEC, NOPERANDS)/* A C expression which evaluates to true if CODE is a valid   punctuation character for use in the `PRINT_OPERAND' macro.  */extern char arc_punct_chars[];#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \arc_punct_chars[(unsigned char) (CHAR)]/* Print operand X (an rtx) in assembler syntax to file FILE.   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.   For `%' followed by punctuation, CODE is the punctuation and X is null.  */#define PRINT_OPERAND(FILE, X, CODE) \arc_print_operand (FILE, X, CODE)/* A C compound statement to output to stdio stream STREAM the   assembler syntax for an instruction operand that is a memory   reference whose address is ADDR.  ADDR is an RTL expression.   On some machines, the syntax for a symbolic address depends on   the section that the address refers to.  On these machines,   define the macro `ENCODE_SECTION_INFO' to store the information   into the `symbol_ref', and then check for it here.  */#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \arc_print_operand_address (FILE, ADDR)/* This is how to output an element of a case-vector that is absolute.  */#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \do {							\  char label[30];					\  ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);	\  fprintf (FILE, "\t.word %%st(");			\  assemble_name (FILE, label);				\  fprintf (FILE, ")\n");				\} while (0)/* This is how to output an element of a case-vector that is relative.  */#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \do {							\  char label[30];					\  ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);	\  fprintf (FILE, "\t.word %%st(");			\  assemble_name (FILE, label);				\  fprintf (FILE, "-");					\  ASM_GENERATE_INTERNAL_LABEL (label, "L", REL);	\  assemble_name (FILE, label);				\  fprintf (FILE, ")\n");				\} while (0)/* The desired alignment for the location counter at the beginning   of a loop.  *//* On the ARC, align loops to 32 byte boundaries (cache line size)   if -malign-loops.  */#define LOOP_ALIGN(LABEL) (TARGET_ALIGN_LOOPS ? 5 : 0)/* This is how to output an assembler line   that says to advance the location counter   to a multiple of 2**LOG bytes.  */#define ASM_OUTPUT_ALIGN(FILE,LOG) \do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)/* Debugging information.  *//* Generate DBX and DWARF debugging information.  */#define DBX_DEBUGGING_INFO#define DWARF_DEBUGGING_INFO/* Prefer STABS (for now).  */#undef PREFERRED_DEBUGGING_TYPE#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG/* How to renumber registers for dbx and gdb.  */#define DBX_REGISTER_NUMBER(REGNO) (REGNO)/* Turn off splitting of long stabs.  */#define DBX_CONTIN_LENGTH 0/* Miscellaneous.  *//* Specify the machine mode that this machine uses   for the index in the tablejump instruction.  */#define CASE_VECTOR_MODE Pmode/* Define as C expression which evaluates to nonzero if the tablejump   instruction expects the table to contain offsets from the address of the   table.   Do not define this if the table should contain absolute addresses. *//* It's not clear what PIC will look like or whether we want to use -fpic   for the embedded form currently being talked about.  For now require -fpic   to get pc relative switch tables.  *//*#define CASE_VECTOR_PC_RELATIVE 1 *//* Define if operations between registers always perform the operation   on the full register even if a narrower mode is specified.  */#define WORD_REGISTER_OPERATIONS/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD   will either zero-extend or sign-extend.  The value of this macro should   be the code that says which one of the two operations is implicitly   done, NIL if none.  */#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND/* Specify the tree operation to be used to convert reals to integers.  */#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR/* This is the kind of divide that is easiest to do in the general case.  */#define EASY_DIV_EXPR TRUNC_DIV_EXPR/* Max number of bytes we can move from memory to memory   in one reasonably fast instruction.  */#define MOVE_MAX 4/* Define this to be nonzero if shift instructions ignore all but the low-order   few bits. */#define SHIFT_COUNT_TRUNCATED 1/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits   is done just by pretending it is already truncated.  */#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1/* We assume that the store-condition-codes instructions store 0 for false   and some other value for true.  This is the value stored for true.  */#define STORE_FLAG_VALUE 1/* Specify the machine mode that pointers have.   After generation of rtl, the compiler makes no further distinction   between pointers and any other objects of this machine mode.  *//* ??? The arc doesn't have full 32 bit pointers, but making this PSImode has   its own problems (you have to add extendpsisi2 and trucnsipsi2 but how does   one do it without getting excess code?).  Try to avoid it.  */#define Pmode SImode/* A function address in a call instruction.  */#define FUNCTION_MODE SImode/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS   is a valid machine specific attribute for DECL.   The attributes in ATTRIBUTES have previously been assigned to TYPE.  */extern int arc_valid_machine_attribute ();#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \arc_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)/* A C expression that returns zero if the attributes on TYPE1 and TYPE2 are   incompatible, one if they are compatible, and two if they are   nearly compatible (which causes a warning to be generated).  */extern int arc_comp_type_attributes ();#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \arc_comp_type_attributes (TYPE1, TYPE2)/* Give newly defined TYPE some default attributes.  */extern void arc_set_default_type_attributes ();#define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \arc_set_default_type_attributes (TYPE)/* Define this if the target system supports the function   atexit from the ANSI C standard.  If this is not defined,   and INIT_SECTION_ASM_OP is not defined, a default   exit function will be provided to support C++.  */#define HAVE_ATEXIT/* alloca should avoid clobbering the old register save area.  *//* ??? Not defined in tm.texi.  */#define SETJMP_VIA_SAVE_AREA/* Define the information needed to generate branch and scc insns.  This is   stored from the compare operation.  Note that we can't use "rtx" here   since it hasn't been defined!  */extern struct rtx_def *arc_compare_op0, *arc_compare_op1;/* Define the function that build the compare insn for scc and bcc.  */extern struct rtx_def *gen_compare_reg ();/* Declarations for various fns used in the .md file.  */extern char *output_shift ();/* ARC function types.   */enum arc_function_type {  ARC_FUNCTION_UNKNOWN, ARC_FUNCTION_NORMAL,  /* These are interrupt handlers.  The name corresponds to the register     name that contains the return address.  */  ARC_FUNCTION_ILINK1, ARC_FUNCTION_ILINK2};#define ARC_INTERRUPT_P(TYPE) \((TYPE) == ARC_FUNCTION_ILINK1 || (TYPE) == ARC_FUNCTION_ILINK2)/* Compute the type of a function from its DECL.  */enum arc_function_type arc_compute_function_type ();

⌨️ 快捷键说明

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