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

📄 m32r.h

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
   and maybe make use of that.  */#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.  */#define NO_FUNCTION_CSE/* Section selection.  */#define TEXT_SECTION_ASM_OP	"\t.section .text"#define DATA_SECTION_ASM_OP	"\t.section .data"#define BSS_SECTION_ASM_OP	"\t.section .bss"/* Define this macro if jump tables (for tablejump insns) should be   output in the text section, along with the assembler instructions.   Otherwise, the readonly data section is used.   This macro is irrelevant if there is no separate readonly data section.  */#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)/* Position Independent Code.  *//* The register number of the register used to address a table of static   data addresses in memory.  In some cases this register is defined by a   processor's ``application binary interface'' (ABI).  When this macro   is defined, RTL is generated for this register once, as with the stack   pointer and frame pointer registers.  If this macro is not defined, it   is up to the machine-dependent files to allocate such a register (if   necessary).  */#define PIC_OFFSET_TABLE_REGNUM 12/* Define this macro if the register defined by PIC_OFFSET_TABLE_REGNUM is   clobbered by calls.  Do not define this macro if PIC_OFFSET_TABLE_REGNUM   is not defined.  *//* This register is call-saved on the M32R.  *//*#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED*//* By generating position-independent code, when two different programs (A   and B) share a common library (libC.a), the text of the library can be   shared whether or not the library is linked at the same address for both   programs.  In some of these environments, position-independent code   requires not only the use of different addressing modes, but also   special code to enable the use of these addressing modes.   The FINALIZE_PIC macro serves as a hook to emit these special   codes once the function is being compiled into assembly code, but not   before.  (It is not done before, because in the case of compiling an   inline function, it would lead to multiple PIC prologues being   included in functions which used inline functions and were compiled to   assembly language.)  */#define FINALIZE_PIC m32r_finalize_pic ()/* A C expression that is nonzero if X is a legitimate immediate   operand on the target machine when generating position independent code.   You can assume that X satisfies CONSTANT_P, so you need not   check this.  You can also assume `flag_pic' is true, so you need not   check it either.  You need not define this macro if all constants   (including SYMBOL_REF) can be immediate operands when generating   position independent code.  */#define LEGITIMATE_PIC_OPERAND_P(X) m32r_legitimate_pic_operand_p (X)/* Control the assembler format that we output.  *//* 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 ";"/* Output to assembler file text saying following lines   may contain character constants, extra white space, comments, etc.  */#define ASM_APP_ON ""/* Output to assembler file text saying following lines   no longer contain unusual constructs.  */#define ASM_APP_OFF ""/* Globalizing directive for a label.  */#define GLOBAL_ASM_OP "\t.global\t"/* We do not use DBX_LINES_FUNCTION_RELATIVE or   dbxout_stab_value_internal_label_diff here because   we need to use .debugsym for the line label.  */#define DBX_OUTPUT_SOURCE_LINE(file, line, counter)			\  do									\    {									\      rtx begin_label = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);\      char label[64];							\      ASM_GENERATE_INTERNAL_LABEL (label, "LM", counter);		\									\      dbxout_begin_stabn_sline (line);					\      assemble_name (file, label);					\      putc ('-', file);							\      assemble_name (file, begin_label);				\      fputs ("\n\t.debugsym ", file);					\      assemble_name (file, label);					\      putc ('\n', file);						\      counter += 1;							\     }									\  while (0)/* How to refer to registers in assembler output.   This sequence is indexed by compiler's hard-register-number (see above).  */#ifndef SUBTARGET_REGISTER_NAMES#define SUBTARGET_REGISTER_NAMES#endif#define REGISTER_NAMES					\{							\  "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",	\  "r8", "r9", "r10", "r11", "r12", "fp", "lr", "sp",	\  "ap", "cbit", "a0"					\  SUBTARGET_REGISTER_NAMES				\}/* If defined, a C initializer for an array of structures containing   a name and a register number.  This macro defines additional names   for hard registers, thus allowing the `asm' option in declarations   to refer to registers using alternate names.  */#ifndef SUBTARGET_ADDITIONAL_REGISTER_NAMES#define SUBTARGET_ADDITIONAL_REGISTER_NAMES#endif#define ADDITIONAL_REGISTER_NAMES	\{					\  /*{ "gp", GP_REGNUM },*/		\  { "r13", FRAME_POINTER_REGNUM },	\  { "r14", RETURN_ADDR_REGNUM },	\  { "r15", STACK_POINTER_REGNUM },	\  SUBTARGET_ADDITIONAL_REGISTER_NAMES	\}/* A C expression which evaluates to true if CODE is a valid   punctuation character for use in the `PRINT_OPERAND' macro.  */extern char m32r_punct_chars[256];#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \  m32r_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) \  m32r_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.  */#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \  m32r_print_operand_address (FILE, ADDR)/* 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.  */#define REGISTER_PREFIX		""#define LOCAL_LABEL_PREFIX	".L"#define USER_LABEL_PREFIX	""#define IMMEDIATE_PREFIX	"#"/* 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\t");			\       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\t");			\      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 M32R, align loops to 32 byte boundaries (cache line size)   if -malign-loops.  */#define LOOP_ALIGN(LABEL) (TARGET_ALIGN_LOOPS ? 5 : 0)/* Define this to be the maximum number of insns to move around when moving   a loop test from the top of a loop to the bottom   and seeing whether to duplicate it.  The default is thirty.   Loop unrolling currently doesn't like this optimization, so   disable doing if we are unrolling loops and saving space.  */#define LOOP_TEST_THRESHOLD (optimize_size				\			     && !flag_unroll_loops			\			     && !flag_unroll_all_loops ? 2 : 30)/* This is how to output an assembler line   that says to advance the location counter   to a multiple of 2**LOG bytes.  *//* .balign is used to avoid confusion.  */#define ASM_OUTPUT_ALIGN(FILE,LOG)			\  do							\    {							\      if ((LOG) != 0)					\	fprintf (FILE, "\t.balign %d\n", 1 << (LOG));	\    }							\  while (0)/* Like `ASM_OUTPUT_COMMON' except takes the required alignment as a   separate, explicit argument.  If you define this macro, it is used in   place of `ASM_OUTPUT_COMMON', and gives you more flexibility in   handling the required alignment of the variable.  The alignment is   specified as the number of bits.  */#define SCOMMON_ASM_OP "\t.scomm\t"#undef  ASM_OUTPUT_ALIGNED_COMMON#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)		\  do									\    {									\      if (! TARGET_SDATA_NONE						\	  && (SIZE) > 0 && (SIZE) <= g_switch_value)			\	fprintf ((FILE), "%s", SCOMMON_ASM_OP);				\      else								\	fprintf ((FILE), "%s", COMMON_ASM_OP);				\      assemble_name ((FILE), (NAME));					\      fprintf ((FILE), ",%u,%u\n", (int)(SIZE), (ALIGN) / BITS_PER_UNIT);\    }									\  while (0)#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN)		\  do									\    {									\      if (! TARGET_SDATA_NONE						\          && (SIZE) > 0 && (SIZE) <= g_switch_value)			\        named_section (0, ".sbss", 0);					\      else								\        bss_section ();							\      ASM_OUTPUT_ALIGN (FILE, floor_log2 (ALIGN / BITS_PER_UNIT));	\      last_assemble_variable_decl = DECL;				\      ASM_DECLARE_OBJECT_NAME (FILE, NAME, DECL);			\      ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1);				\    }									\  while (0)/* Debugging information.  *//* Generate DBX and DWARF debugging information.  */#define DBX_DEBUGGING_INFO    1#define DWARF2_DEBUGGING_INFO 1/* Use DWARF2 debugging info by default.  */#undef  PREFERRED_DEBUGGING_TYPE#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG/* 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 (flag_pic ? SImode : Pmode)/* 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, UNKNOWN if none.  */#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND/* 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/* 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 M32R doesn't have full 32 bit pointers, but making this PSImode has   it's own problems (you have to add extendpsisi2 and truncsipsi2).   Try to avoid it.  */#define Pmode SImode/* A function address in a call instruction.  */#define FUNCTION_MODE SImode/* 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 * m32r_compare_op0;extern struct rtx_def * m32r_compare_op1;/* M32R function types.  */enum m32r_function_type{  M32R_FUNCTION_UNKNOWN, M32R_FUNCTION_NORMAL, M32R_FUNCTION_INTERRUPT};#define M32R_INTERRUPT_P(TYPE) ((TYPE) == M32R_FUNCTION_INTERRUPT)/* 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							\{ "reg_or_zero_operand",        { REG, SUBREG, CONST_INT }},            \{ "conditional_move_operand",	{ REG, SUBREG, CONST_INT }},		\{ "carry_compare_operand",	{ EQ, NE }},				\{ "eqne_comparison_operator",	{ EQ, NE }},				\{ "signed_comparison_operator", { EQ, NE, LT, LE, GT, GE }},		\{ "move_dest_operand",		{ REG, SUBREG, MEM }},			\{ "move_src_operand",		{ REG, SUBREG, MEM, CONST_INT,		\				  CONST_DOUBLE, LABEL_REF, CONST,	\				  SYMBOL_REF }},			\{ "move_double_src_operand",	{ REG, SUBREG, MEM, CONST_INT,		\				  CONST_DOUBLE }},			\{ "two_insn_const_operand",	{ CONST_INT }},				\{ "symbolic_operand",		{ SYMBOL_REF, LABEL_REF, CONST }},	\{ "int8_operand",		{ CONST_INT }},				\{ "uint16_operand",		{ CONST_INT }},				\{ "reg_or_int16_operand",	{ REG, SUBREG, CONST_INT }},		\{ "reg_or_uint16_operand",	{ REG, SUBREG, CONST_INT }},		\{ "reg_or_cmp_int16_operand",	{ REG, SUBREG, CONST_INT }},		\{ "reg_or_eq_int16_operand",	{ REG, SUBREG, CONST_INT }},		\{ "cmp_int16_operand",		{ CONST_INT }},				\{ "call_address_operand",	{ SYMBOL_REF, LABEL_REF, CONST }},	\{ "extend_operand",		{ REG, SUBREG, MEM }},			\{ "small_insn_p",		{ INSN, CALL_INSN, JUMP_INSN }},	\{ "m32r_block_immediate_operand",{ CONST_INT }},			\{ "large_insn_p",		{ INSN, CALL_INSN, JUMP_INSN }},	\{ "seth_add3_operand",		{ SYMBOL_REF, LABEL_REF, CONST }},

⌨️ 快捷键说明

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