📄 v850.h
字号:
&& !TREE_CONSTANT (DECL_INITIAL (EXP)))) \ data_section (); \ else \ const_section (); \ } \ else if (TREE_CODE (EXP) == STRING_CST) \ { \ if (! flag_writable_strings) \ const_section (); \ else \ data_section (); \ } \ \ else \ const_section (); \ \} while (0)/* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX is some kind of constant in RTL. The argument MODE is redundant except in the case of a `const_int' rtx. Select the section by calling `text_section' or one of the alternatives for other sections. Do not define this macro if you put all constants in the read-only data section. *//* #define SELECT_RTX_SECTION(MODE, RTX) *//* Output at beginning/end of assembler file. */#undef ASM_FILE_START#define ASM_FILE_START(FILE) asm_file_start(FILE)#define ASM_COMMENT_START "#"/* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */#define ASM_APP_ON "#APP\n"/* Output to assembler file text saying following lines no longer contain unusual constructs. */#define ASM_APP_OFF "#NO_APP\n"/* This is how to output an assembler line defining a `double' constant. It is .double or .float, depending. */#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \do { char dstr[30]; \ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ fprintf (FILE, "\t.double %s\n", dstr); \ } while (0)/* This is how to output an assembler line defining a `float' constant. */#define ASM_OUTPUT_FLOAT(FILE, VALUE) \do { char dstr[30]; \ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ fprintf (FILE, "\t.float %s\n", dstr); \ } while (0)/* This is how to output an assembler line defining an `int' constant. */#define ASM_OUTPUT_INT(FILE, VALUE) \( fprintf (FILE, "\t.long "), \ output_addr_const (FILE, (VALUE)), \ fprintf (FILE, "\n"))/* Likewise for `char' and `short' constants. */#define ASM_OUTPUT_SHORT(FILE, VALUE) \( fprintf (FILE, "\t.hword "), \ output_addr_const (FILE, (VALUE)), \ fprintf (FILE, "\n"))#define ASM_OUTPUT_CHAR(FILE, VALUE) \( fprintf (FILE, "\t.byte "), \ output_addr_const (FILE, (VALUE)), \ fprintf (FILE, "\n"))/* This is how to output an assembler line for a numeric constant byte. */#define ASM_OUTPUT_BYTE(FILE, VALUE) \ fprintf (FILE, "\t.byte 0x%x\n", (VALUE))/* Define the parentheses used to group arithmetic operations in assembler code. */#define ASM_OPEN_PAREN "("#define ASM_CLOSE_PAREN ")"/* This says how to output the assembler to define a global uninitialized but not common symbol. Try to use asm_output_bss to implement this macro. */#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \ asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED))/* 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 ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)/* This is how to output a reference to a user-level label named NAME. `assemble_name' uses this. */#undef ASM_OUTPUT_LABELREF#define ASM_OUTPUT_LABELREF(FILE, NAME) \ do { \ char* real_name; \ STRIP_NAME_ENCODING (real_name, (NAME)); \ fprintf (FILE, "_%s", real_name); \ } 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)))/* This is how we tell the assembler that two symbols have the same value. */#define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \ do { assemble_name(FILE, NAME1); \ fputs(" = ", FILE); \ assemble_name(FILE, NAME2); \ fputc('\n', FILE); } 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", "sp", "gp", "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", "ep", "r31", \ ".fp", ".ap"}#define ADDITIONAL_REGISTER_NAMES \{ { "zero", 0 }, \ { "hp", 2 }, \ { "r3", 3 }, \ { "r4", 4 }, \ { "tp", 5 }, \ { "fp", 29 }, \ { "r30", 30 }, \ { "lp", 31} }/* Print an instruction operand X on file FILE. look in v850.c for details */#define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE)#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ((CODE) == '.')/* Print a memory operand whose address is X, on file FILE. This uses a function in output-vax.c. */#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)#define ASM_OUTPUT_REG_PUSH(FILE,REGNO)#define ASM_OUTPUT_REG_POP(FILE,REGNO)/* This is how to output an element of a case-vector that is absolute. */#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ asm_fprintf (FILE, "\t%s .L%d\n", \ (TARGET_BIG_SWITCH ? ".long" : ".short"), VALUE)/* This is how to output an element of a case-vector that is relative. */#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ fprintf (FILE, "\t%s .L%d-.L%d\n", \ (TARGET_BIG_SWITCH ? ".long" : ".short"), \ VALUE, REL)#define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG))/* We don't have to worry about dbx compatibility for the v850. */#define DEFAULT_GDB_EXTENSIONS 1/* Use stabs debugging info by default. */#undef PREFERRED_DEBUGGING_TYPE#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG#define DBX_REGISTER_NUMBER(REGNO) REGNO/* Define to use software floating point emulator for REAL_ARITHMETIC and decimal <-> binary conversion. */#define REAL_ARITHMETIC/* Specify the machine mode that this machine uses for the index in the tablejump instruction. */#define CASE_VECTOR_MODE (TARGET_BIG_SWITCH ? SImode : HImode)/* Define this if the case instruction drops through after the table when the index is out of range. Don't define it if the case insn jumps to the default label instead. *//* #define CASE_DROPS_THROUGH *//* We must use a PC relative entry for small tables. It would be more efficient to use an absolute entry for big tables, but this is not a runtime choice yet. */#define CASE_VECTOR_PC_RELATIVE/* The switch instruction requires that the jump table immediately follow it. */#define JUMP_TABLES_IN_TEXT_SECTION/* svr4.h defines this assuming that 4 byte alignment is required. */#undef ASM_OUTPUT_BEFORE_CASE_LABEL#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ ASM_OUTPUT_ALIGN ((FILE), (TARGET_BIG_SWITCH ? 2 : 1));#define WORD_REGISTER_OPERATIONS/* Byte and short loads sign extend the value to a word. */#define LOAD_EXTEND_OP(MODE) SIGN_EXTEND/* Specify the tree operation to be used to convert reals to integers. */#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR/* This flag, if defined, says the same insns that convert to a signed fixnum also convert validly to an unsigned one. */#define FIXUNS_TRUNC_LIKE_FIX_TRUNC/* 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 if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension of a shift count. */#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#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. */#define Pmode SImode/* A function address in a call instruction is a byte address (for indexing purposes) so give the MEM rtx a byte's mode. */#define FUNCTION_MODE QImode/* 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 DECL. */#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \v850_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)/* Tell compiler we have {ZDA,TDA,SDA} small data regions */#define HAVE_ZDA 1#define HAVE_SDA 1#define HAVE_TDA 1/* Tell compiler we want to support GHS pragmas */#define HANDLE_GHS_PRAGMA/* The assembler op to to start the file. */#define FILE_ASM_OP "\t.file\n"/* Enable the register move pass to improve code. */#define ENABLE_REGMOVE_PASS/* Implement ZDA, TDA, and SDA */#define EP_REGNUM 30 /* ep register number */#define ENCODE_SECTION_INFO(DECL) \do { \ if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \ && TREE_CODE (DECL) == VAR_DECL) \ v850_encode_data_area (DECL); \} while (0)#define ZDA_NAME_FLAG_CHAR '@'#define TDA_NAME_FLAG_CHAR '%'#define SDA_NAME_FLAG_CHAR '&'#define ZDA_NAME_P(NAME) (*(NAME) == ZDA_NAME_FLAG_CHAR)#define TDA_NAME_P(NAME) (*(NAME) == TDA_NAME_FLAG_CHAR)#define SDA_NAME_P(NAME) (*(NAME) == SDA_NAME_FLAG_CHAR)#define ENCODED_NAME_P(SYMBOL_NAME) \ (ZDA_NAME_P (SYMBOL_NAME) \ || TDA_NAME_P (SYMBOL_NAME) \ || SDA_NAME_P (SYMBOL_NAME))#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ (VAR) = (SYMBOL_NAME) + (ENCODED_NAME_P (SYMBOL_NAME) || *(SYMBOL_NAME) == '*')/* Define this if you have defined special-purpose predicates in the file `MACHINE.c'. This macro is called within an initializer of an array of structures. The first field in the structure is the name of a predicate and the second field is an array of rtl codes. For each predicate, list all rtl codes that can be in expressions matched by the predicate. The list should have a trailing comma. */#define PREDICATE_CODES \{ "ep_memory_operand", { MEM }}, \{ "reg_or_0_operand", { REG, SUBREG, CONST_INT, CONST_DOUBLE }}, \{ "reg_or_int5_operand", { REG, SUBREG, CONST_INT }}, \{ "call_address_operand", { REG, SYMBOL_REF }}, \{ "movsi_source_operand", { LABEL_REF, SYMBOL_REF, CONST_INT, \ CONST_DOUBLE, CONST, HIGH, MEM, \ REG, SUBREG }}, \{ "special_symbolref_operand", { SYMBOL_REF }}, \{ "power_of_two_operand", { CONST_INT }}, \{ "pattern_is_ok_for_prologue", { PARALLEL }}, \{ "pattern_is_ok_for_epilogue", { PARALLEL }}, \{ "register_is_ok_for_epilogue",{ REG }}, \{ "not_power_of_two_operand", { CONST_INT }},extern void override_options ();extern void asm_file_start ();extern int function_arg_partial_nregs ();extern int const_costs ();extern void print_operand ();extern void print_operand_address ();extern char *output_move_double ();extern char *output_move_single ();extern int ep_operand ();extern int reg_or_0_operand ();extern int reg_or_int5_operand ();extern int call_address_operand ();extern int movsi_source_operand ();extern int power_of_two_operand ();extern int not_power_of_two_operand ();extern void v850_reorg ();extern int compute_register_save_size ();extern int compute_frame_size ();extern void expand_prologue ();extern void expand_epilogue ();extern void notice_update_cc ();extern int v850_valid_machine_decl_attribute ();extern int v850_interrupt_function_p ();extern int pattern_is_ok_for_prologue();extern int pattern_is_ok_for_epilogue();extern int register_is_ok_for_epilogue ();extern char *construct_save_jarl ();extern char *construct_restore_jr ();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -