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 + -
显示快捷键?