fr30.h

来自「gcc3.2.1源代码」· C头文件 代码 · 共 1,431 行 · 第 1/5 页

H
1,431
字号
   operand being addressed.  Some machines have other mode-dependent addresses.   Many RISC machines have no mode-dependent addresses.   You may assume that ADDR is a valid address for the machine.  */#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)/* A C expression that is nonzero if X is a legitimate constant for an   immediate operand on the target machine.  You can assume that X satisfies   `CONSTANT_P', so you need not check this.  In fact, `1' is a suitable   definition for this macro on machines where anything `CONSTANT_P' is valid.  */#define LEGITIMATE_CONSTANT_P(X) 1/*}}}*/ /*{{{  Describing Relative Costs of Operations */ /* 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, i.e., if such access require more than one instruction or if   there is no difference in cost between byte and (aligned) word loads.   When this macro is not defined, the compiler will access a field by finding   the smallest containing object; when it is defined, a fullword load will be   used if alignment permits.  Unless bytes accesses are faster than word   accesses, using word accesses is preferable since it may eliminate   subsequent memory access if subsequent accesses occur to other fields in the   same word of the structure, but to different bytes.  */#define SLOW_BYTE_ACCESS 1/*}}}*/ /*{{{  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.  Normally `".text"' is   right.  */#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.  Normally   `".data"' is right.  */#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.  If not defined, and neither   `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,   uninitialized global data will be output in the data section if   `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be   used.  */#define BSS_SECTION_ASM_OP "\t.bss"/*}}}*/ /*{{{  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.  Normally this is `"#APP"', which is a comment   that has no effect on most assemblers but tells the GNU assembler that it   must check the lines that follow for all valid assembler constructs.  */#define ASM_APP_ON "#APP\n"/* A C string constant for text to be output after each `asm' statement or   group of consecutive ones.  Normally this is `"#NO_APP"', which tells the   GNU assembler to resume making the time-saving assumptions that are valid   for ordinary compiler output.  */#define ASM_APP_OFF "#NO_APP\n"/*}}}*/ /*{{{  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.  Use the expression   `assemble_name (STREAM, NAME)' to output the name itself; before and after   that, output the additional assembler syntax for defining the name, and a   newline.  */#define ASM_OUTPUT_LABEL(STREAM, NAME)	\  do					\    {					\      assemble_name (STREAM, NAME);	\      fputs (":\n", STREAM);		\    }					\  while (0)/* A C statement (sans semicolon) to output to the stdio stream STREAM some   commands that will make the label NAME global; that is, available for   reference from other files.  Use the expression `assemble_name (STREAM,   NAME)' to output the name itself; before and after that, output the   additional assembler syntax for making that name global, and a newline.  */#define ASM_GLOBALIZE_LABEL(STREAM,NAME)	\  do						\    {						\      fputs ("\t.globl ", STREAM);		\      assemble_name (STREAM, NAME);		\      fputs ("\n", STREAM);			\    }						\  while (0)/* A C expression to assign to OUTVAR (which is a variable of type `char *') a   newly allocated string made from the string NAME and the number NUMBER, with   some suitable punctuation added.  Use `alloca' to get space for the string.   The string will be used as an argument to `ASM_OUTPUT_LABELREF' to produce   an assembler label for an internal static variable whose name is NAME.   Therefore, the string must be such as to result in valid assembler code.   The argument NUMBER is different each time this macro is executed; it   prevents conflicts between similarly-named internal static variables in   different scopes.   Ideally this string should not be a valid C identifier, to prevent any   conflict with the user's own symbols.  Most assemblers allow periods or   percent signs in assembler symbols; putting at least one of these between   the name and the number will suffice.  */#define ASM_FORMAT_PRIVATE_NAME(OUTVAR, NAME, NUMBER)		\  do								\    {								\      (OUTVAR) = (char *) alloca (strlen ((NAME)) + 12);	\      sprintf ((OUTVAR), "%s.%ld", (NAME), (long)(NUMBER));	\    }								\  while (0)/*}}}*/ /*{{{  Output of Assembler Instructions.  */ /* A C compound statement to output to stdio stream STREAM the assembler syntax   for an instruction operand X.  X is an RTL expression.   CODE is a value that can be used to specify one of several ways of printing   the operand.  It is used when identical operands must be printed differently   depending on the context.  CODE comes from the `%' specification that was   used to request printing of the operand.  If the specification was just   `%DIGIT' then CODE is 0; if the specification was `%LTR DIGIT' then CODE is   the ASCII code for LTR.   If X is a register, this macro should print the register's name.  The names   can be found in an array `reg_names' whose type is `char *[]'.  `reg_names'   is initialized from `REGISTER_NAMES'.   When the machine description has a specification `%PUNCT' (a `%' followed by   a punctuation character), this macro is called with a null pointer for X and   the punctuation character for CODE.  */#define PRINT_OPERAND(STREAM, X, CODE)	fr30_print_operand (STREAM, X, CODE)/* A C expression which evaluates to true if CODE is a valid punctuation   character for use in the `PRINT_OPERAND' macro.  If   `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no punctuation   characters (except for the standard one, `%') are used in this way.  */#define PRINT_OPERAND_PUNCT_VALID_P(CODE) (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 X.  X   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.  *Note Assembler Format::.  */#define PRINT_OPERAND_ADDRESS(STREAM, X) fr30_print_operand_address (STREAM, X)/* If defined, C string expressions to be used for the `%R', `%L', `%U', and   `%I' options of `asm_fprintf' (see `final.c').  These are useful when a   single `md' file must support multiple assembler formats.  In that case, the   various `tm.h' files can define these macros differently.   USER_LABEL_PREFIX is defined in svr4.h.  */#define REGISTER_PREFIX "%"#define LOCAL_LABEL_PREFIX "."#define USER_LABEL_PREFIX ""#define IMMEDIATE_PREFIX ""/*}}}*/ /*{{{  Output of Dispatch Tables.  */ /* This macro should be provided on machines where the addresses in a dispatch   table are relative to the table's own address.   The definition should be a C statement to output to the stdio stream STREAM   an assembler pseudo-instruction to generate a difference between two labels.   VALUE and REL are the numbers of two internal labels.  The definitions of   these labels are output using `ASM_OUTPUT_INTERNAL_LABEL', and they must be   printed in the same way here.  For example,        fprintf (STREAM, "\t.word L%d-L%d\n", VALUE, REL)  */#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL)/* This macro should be provided on machines where the addresses in a dispatch   table are absolute.   The definition should be a C statement to output to the stdio stream STREAM   an assembler pseudo-instruction to generate a reference to a label.  VALUE   is the number of an internal label whose definition is output using   `ASM_OUTPUT_INTERNAL_LABEL'.  For example,        fprintf (STREAM, "\t.word L%d\n", VALUE)  */#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \fprintf (STREAM, "\t.word .L%d\n", VALUE)/*}}}*/ /*{{{  Assembler Commands for Alignment.  */ /* A C statement to output to the stdio stream STREAM an assembler command to   advance the location counter to a multiple of 2 to the POWER bytes.  POWER   will be a C expression of type `int'.  */#define ASM_OUTPUT_ALIGN(STREAM, POWER) \  fprintf ((STREAM), "\t.p2align %d\n", (POWER))/*}}}*/ /*{{{  Miscellaneous Parameters.  */ /* An alias for a machine mode name.  This is the machine mode that elements of   a jump-table should have.  */#define CASE_VECTOR_MODE SImode/* The maximum number of bytes that a single instruction can move quickly from   memory to memory.  */#define MOVE_MAX 8/* A C expression which is nonzero if on this machine it is safe to "convert"   an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller   than INPREC) by merely operating on it as if it had only OUTPREC bits.   On many machines, this expression can be 1.   When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for   which `MODES_TIEABLE_P' is 0, suboptimal code can result.  If this is the   case, making `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve   things.  */#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1/* An alias for the machine mode for pointers.  On most machines, define this   to be the integer mode corresponding to the width of a hardware pointer;   `SImode' on 32-bit machine or `DImode' on 64-bit machines.  On some machines   you must define this to be one of the partial integer modes, such as   `PSImode'.   The width of `Pmode' must be at least as large as the value of   `POINTER_SIZE'.  If it is not equal, you must define the macro   `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to `Pmode'.  */#define Pmode SImode/* An alias for the machine mode used for memory references to functions being   called, in `call' RTL expressions.  On most machines this should be   `QImode'.  */#define FUNCTION_MODE QImode/* If cross-compiling, don't require stdio.h etc to build libgcc.a.  */#if defined CROSS_COMPILE && ! defined inhibit_libc#define inhibit_libc#endif/*}}}*/ /*{{{  Exported variables */ /* 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 * fr30_compare_op0;extern struct rtx_def * fr30_compare_op1;/*}}}*/ /*{{{  PERDICATE_CODES.  */ #define PREDICATE_CODES					\  { "stack_add_operand",	{ CONST_INT }},		\  { "high_register_operand",	{ REG }},		\  { "low_register_operand",	{ REG }},		\  { "call_operand",		{ MEM }},		\  { "fp_displacement_operand",	{ CONST_INT }},		\  { "sp_displacement_operand",	{ CONST_INT }},		\  { "di_operand",		{ CONST_INT, CONST_DOUBLE, REG, MEM }},	\  { "nonimmediate_di_operand",	{ REG, MEM }},		\  { "add_immediate_operand",	{ REG, CONST_INT }},/*}}}*/ /* Local Variables: *//* folded-file: t   *//* End:		    */

⌨️ 快捷键说明

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