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

📄 m68k.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 5 页
字号:
#define NOTICE_UPDATE_CC(EXP,INSN) notice_update_cc (EXP, INSN)#define OUTPUT_JUMP(NORMAL, FLOAT, NO_OV)  \{ if (cc_prev_status.flags & CC_IN_68881)			\    return FLOAT;						\  if (cc_prev_status.flags & CC_NO_OVERFLOW)			\    return NO_OV;						\  return NORMAL; }/* Control the assembler format that we output.  *//* Output at beginning of assembler file.  */#define ASM_FILE_START(FILE)	\  fprintf (FILE, "#NO_APP\n");/* 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"/* Output before read-only data.  */#define TEXT_SECTION_ASM_OP ".text"/* Output before writable data.  */#define DATA_SECTION_ASM_OP ".data"/* Here are four prefixes that are used by asm_fprintf to   facilitate customization for alternate assembler syntaxes.   Machines with no likelihood of an alternate syntax need not   define these and need not use asm_fprintf.  *//* The prefix for register names.  Note that REGISTER_NAMES   is supposed to include this prefix.  */#define REGISTER_PREFIX ""/* The prefix for local labels.  You should be able to define this as   an empty string, or any arbitrary string (such as ".", ".L%", etc)   without having to make any other changes to account for the specific   definition.  Note it is a string literal, not interpreted by printf   and friends. */#define LOCAL_LABEL_PREFIX ""/* The prefix to add to user-visible assembler symbols.  */#define USER_LABEL_PREFIX "_"/* The prefix for immediate operands.  */#define IMMEDIATE_PREFIX "#"/* How to refer to registers in assembler output.   This sequence is indexed by compiler's hard-register-number (see above).  */#ifndef SUPPORT_SUN_FPA#define REGISTER_NAMES \{"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",	\ "a0", "a1", "a2", "a3", "a4", "a5", "a6", "sp",	\ "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7" }#else /* SUPPORTED_SUN_FPA */#define REGISTER_NAMES \{"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",	\ "a0", "a1", "a2", "a3", "a4", "a5", "a6", "sp",	\ "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7", \ "fpa0", "fpa1", "fpa2", "fpa3", "fpa4", "fpa5", "fpa6", "fpa7", \ "fpa8", "fpa9", "fpa10", "fpa11", "fpa12", "fpa13", "fpa14", "fpa15", \ "fpa16", "fpa17", "fpa18", "fpa19", "fpa20", "fpa21", "fpa22", "fpa23", \ "fpa24", "fpa25", "fpa26", "fpa27", "fpa28", "fpa29", "fpa30", "fpa31" }#endif /* defined SUPPORT_SUN_FPA *//* How to renumber registers for dbx and gdb.   On the Sun-3, the floating point registers have numbers   18 to 25, not 16 to 23 as they do in the compiler.  */#define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 16 ? (REGNO) : (REGNO) + 2)/* 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 GLOBAL_ASM_OP ".globl"#define ASM_GLOBALIZE_LABEL(FILE,NAME)	\  do { fprintf (FILE, "%s ", GLOBAL_ASM_OP);		\       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.  */#define ASM_OUTPUT_LABELREF(FILE,NAME)	\  asm_fprintf (FILE, "%0U%s", NAME)/* This is how to output an internal numbered label where   PREFIX is the class of label and NUM is the number within the class.  */#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)	\  asm_fprintf (FILE, "%0L%s%d:\n", PREFIX, NUM)/* This is how to store into the string LABEL   the symbol_ref name of an internal numbered label where   PREFIX is the class of label and NUM is the number within the class.   This is suitable for output with `assemble_name'.  */#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)	\  sprintf (LABEL, "*%s%s%d", LOCAL_LABEL_PREFIX, PREFIX, NUM)/* This is how to output an assembler line defining a `double' constant.  */#define ASM_OUTPUT_DOUBLE(FILE,VALUE)  \  fprintf (FILE, "\t.double 0r%.20g\n", (VALUE))/* This is how to output an assembler line defining a `float' constant.  *//* Sun's assembler can't handle floating constants written as floating.   However, when cross-compiling, always use that in case format differs.  */#ifdef CROSS_COMPILE#define ASM_OUTPUT_FLOAT(FILE,VALUE)  \  fprintf (FILE, "\t.float 0r%.10g\n", (VALUE))#else#define ASM_OUTPUT_FLOAT(FILE,VALUE)  \do { union { float f; long l;} tem;			\     tem.f = (VALUE);					\     fprintf (FILE, "\t.long 0x%x\n", tem.l);	\   } while (0)#endif /* not CROSS_COMPILE *//* 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.word "),			\  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))/* This is how to output an insn to push a register on the stack.   It need not be very fast code.  */#define ASM_OUTPUT_REG_PUSH(FILE,REGNO)  \  asm_fprintf (FILE, "\tmovel %s,%Rsp@-\n", reg_names[REGNO])/* This is how to output an insn to pop a register from the stack.   It need not be very fast code.  */#define ASM_OUTPUT_REG_POP(FILE,REGNO)  \  asm_fprintf (FILE, "\tmovel %Rsp@+,%s\n", reg_names[REGNO])/* This is how to output an element of a case-vector that is absolute.   (The 68000 does not use such vectors,   but we must define this macro anyway.)  */#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \  asm_fprintf (FILE, "\t.long %LL%d\n", VALUE)/* This is how to output an element of a case-vector that is relative.  */#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL)  \  asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL)/* This is how to output an assembler line   that says to advance the location counter   to a multiple of 2**LOG bytes.  *//* We don't have a way to align to more than a two-byte boundary, so do the   best we can and don't complain.  */#define ASM_OUTPUT_ALIGN(FILE,LOG)	\  if ((LOG) >= 1)			\    fprintf (FILE, "\t.even\n");#define ASM_OUTPUT_SKIP(FILE,SIZE)  \  fprintf (FILE, "\t.skip %u\n", (SIZE))/* This says how to output an assembler line   to define a global common symbol.  */#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \( fputs (".comm ", (FILE)),			\  assemble_name ((FILE), (NAME)),		\  fprintf ((FILE), ",%u\n", (ROUNDED)))/* This says how to output an assembler line   to define a local common symbol.  */#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)  \( fputs (".lcomm ", (FILE)),			\  assemble_name ((FILE), (NAME)),		\  fprintf ((FILE), ",%u\n", (ROUNDED)))/* 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)))/* Define the parentheses used to group arithmetic operations   in assembler code.  */#define ASM_OPEN_PAREN "("#define ASM_CLOSE_PAREN ")"/* Define results of standard character escape sequences.  */#define TARGET_BELL 007#define TARGET_BS 010#define TARGET_TAB 011#define TARGET_NEWLINE 012#define TARGET_VT 013#define TARGET_FF 014#define TARGET_CR 015/* Output a float value (represented as a C double) as an immediate operand.   This macro is a 68k-specific macro.  */#define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE)				\  asm_fprintf (FILE, "%I0r%.9g", (VALUE))/* Output a double value (represented as a C double) as an immediate operand.   This macro is a 68k-specific macro.  */#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)				\  asm_fprintf (FILE, "%I0r%.20g", (VALUE))/* 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.   On the 68000, we use several CODE characters:   '.' for dot needed in Motorola-style opcode names.   '-' for an operand pushing on the stack:       sp@-, -(sp) or -(%sp) depending on the style of syntax.   '+' for an operand pushing on the stack:       sp@+, (sp)+ or (%sp)+ depending on the style of syntax.   '@' for a reference to the top word on the stack:       sp@, (sp) or (%sp) depending on the style of syntax.   '#' for an immediate operand prefix (# in MIT and Motorola syntax       but & in SGS syntax).   '!' for the fpcr register (used in some float-to-fixed conversions).   '$' for the letter `s' in an op code, but only on the 68040.   '&' for the letter `d' in an op code, but only on the 68040.   '/' for register prefix needed by longlong.h.   'b' for byte insn (no effect, on the Sun; this is for the ISI).   'd' to force memory addressing to be absolute, not relative.   'f' for float insn (print a CONST_DOUBLE as a float rather than in hex)   'w' for FPA insn (print a CONST_DOUBLE as a SunFPA constant rather       than directly).  Second part of 'y' below.   'x' for float insn (print a CONST_DOUBLE as a float rather than in hex),       or print pair of registers as rx:ry.   'y' for a FPA insn (print pair of registers as rx:ry).  This also outputs       CONST_DOUBLE's as SunFPA constant RAM registers if       possible, so it should not be used except for the SunFPA. */#define PRINT_OPERAND_PUNCT_VALID_P(CODE)				\  ((CODE) == '.' || (CODE) == '#' || (CODE) == '-'			\   || (CODE) == '+' || (CODE) == '@' || (CODE) == '!'			\   || (CODE) == '$' || (CODE) == '&' || (CODE) == '/')#ifdef HOST_WORDS_BIG_ENDIAN#define PRINT_OPERAND_EXTRACT_FLOAT(X)					\      u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X);#else#define PRINT_OPERAND_EXTRACT_FLOAT(X)					\      u.i[0] = CONST_DOUBLE_HIGH (X); u.i[1] = CONST_DOUBLE_LOW (X);#endif#ifdef CROSS_COMPILE#define PRINT_OPERAND_PRINT_FLOAT(CODE, FILE)   \  ASM_OUTPUT_FLOAT_OPERAND (FILE, u1.f);#else#define PRINT_OPERAND_PRINT_FLOAT(CODE, FILE)   \{ if (CODE == 'f')							\    ASM_OUTPUT_FLOAT_OPERAND (FILE, u1.f);				\  else									\    asm_fprintf (FILE, "%I0x%x", u1.i); }#endif/* 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.   See m68k.c for the m68k specific codes.  */#define PRINT_OPERAND(FILE, X, CODE) 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

⌨️ 快捷键说明

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