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

📄 dpx2.h

📁 gcc编译工具没有什么特别
💻 H
📖 第 1 页 / 共 3 页
字号:
  do { char dstr[30];						\       REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr);		\       fprintf (FILE, "\tdc.d %s\n", dstr);	        	\     } while (0)#endif#define ASM_OUTPUT_DOUBLE(FILE,VALUE)  \do { long l[2];								\     REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l);			        \     fprintf (FILE, "\tdc.l $%x,$%x\n", l[0], l[1]);            	\   } while (0)/* This is how to output an assembler line defining a `float' constant.  */#undef ASM_OUTPUT_FLOAT#define ASM_OUTPUT_FLOAT(FILE,VALUE)  \do { long l;						\     REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);		\     if (sizeof (int) == sizeof (long))			\       fprintf (FILE, "\tdc.l $%x\n", l);		\     else						\       fprintf (FILE, "\tdc.l $%lx\n", l);		\   } while (0)/* This is how to output an assembler line defining an `int' constant.  */#undef ASM_OUTPUT_INT #define ASM_OUTPUT_INT(FILE,VALUE)  \( fprintf (FILE, "\tdc.l "),			\  output_addr_const (FILE, (VALUE)),		\  fprintf (FILE, "\n"))/* Likewise for `char' and `short' constants.  */#undef ASM_OUTPUT_SHORT#define ASM_OUTPUT_SHORT(FILE,VALUE)  \( fprintf (FILE, "\tdc.w "),			\  output_addr_const (FILE, (VALUE)),		\  fprintf (FILE, "\n"))#undef ASM_OUTPUT_CHAR#define ASM_OUTPUT_CHAR(FILE,VALUE)  \( fprintf (FILE, "\tdc.b "),			\  output_addr_const (FILE, (VALUE)),		\  fprintf (FILE, "\n"))/* This is how to output an assembler line for a numeric constant byte.  */#undef ASM_OUTPUT_BYTE#define ASM_OUTPUT_BYTE(FILE,VALUE)  \  fprintf (FILE, "\tdc.b $%x\n", (VALUE))/* 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.)  */#undef ASM_OUTPUT_ADDR_VEC_ELT#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \  asm_fprintf (FILE, "\tdc.l %LL%d\n", VALUE)/* This is how to output an element of a case-vector that is relative.  */#undef ASM_OUTPUT_ADDR_DIFF_ELT#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)  \  asm_fprintf (FILE, "\tdc.w %LL%d-%LL%d\n", VALUE, REL)/* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to   keep switch tables in the text section. */#define JUMP_TABLES_IN_TEXT_SECTION 1/* Output a float value (represented as a C double) as an immediate operand.   This macro is a 68k-specific macro.  */#undef ASM_OUTPUT_FLOAT_OPERAND#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)		\ do {								\      if (CODE == 'f')						\        {							\          char dstr[30];					\          REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr);		\          asm_fprintf ((FILE), "%I%s", dstr);			\        }							\      else							\        {							\          long l;						\          REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);		\          if (sizeof (int) == sizeof (long))			\            asm_fprintf ((FILE), "%I$%x", l);			\          else							\            asm_fprintf ((FILE), "%I$%lx", l);			\        }							\     } while (0)/* Output a double value (represented as a C double) as an immediate operand.   This macro is a 68k-specific macro.  */#undef ASM_OUTPUT_DOUBLE_OPERAND #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)				\ do { char dstr[30];							\      REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr);			\      asm_fprintf (FILE, "%I%s", dstr);					\    } while (0)/* Note, long double immediate operands are not actually   generated by m68k.md.  */#undef ASM_OUTPUT_LONG_DOUBLE_OPERAND#define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE)			\ do { char dstr[30];							\      REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr);			\      asm_fprintf (FILE, "%I%s", dstr);					\    } while (0)#undef ASM_OUTPUT_COMMON#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \( fputs ("\t.comm ", (FILE)),			\  assemble_name ((FILE), (NAME)),		\  fprintf ((FILE), ",%u\n", (ROUNDED)))#undef ASM_OUTPUT_LOCAL#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)	\  do {							\    int align = exact_log2 (ROUNDED);			\    /*fprintf ((FILE), "\tsection 14\n");  */               \    data_section ();					\    ASM_OUTPUT_ALIGN ((FILE), align)                    \    ASM_OUTPUT_LABEL ((FILE), (NAME));			\    fprintf ((FILE), "\tdcb.b %u,0\n", (ROUNDED));	\    /* fprintf ((FILE), "\tsection 10\n"); */             \  } while (0)#undef PRINT_OPERAND_ADDRESS#define PRINT_OPERAND_ADDRESS(FILE, ADDR)  \{ register rtx reg1, reg2, breg, ireg;					\  register rtx addr = ADDR;						\  rtx offset;								\  switch (GET_CODE (addr))						\    {									\    case REG:								\      fprintf (FILE, "(%s)", reg_names[REGNO (addr)]);			\      break;								\    case PRE_DEC:							\      fprintf (FILE, "-(%s)", reg_names[REGNO (XEXP (addr, 0))]);	\      break;								\    case POST_INC:							\      fprintf (FILE, "(%s)+", reg_names[REGNO (XEXP (addr, 0))]);	\      break;								\    case PLUS:								\      reg1 = 0;	reg2 = 0;						\      ireg = 0;	breg = 0;						\      offset = 0;							\      if (CONSTANT_ADDRESS_P (XEXP (addr, 0)))				\	{								\	  offset = XEXP (addr, 0);					\	  addr = XEXP (addr, 1);					\	}								\      else if (CONSTANT_ADDRESS_P (XEXP (addr, 1)))			\	{								\	  offset = XEXP (addr, 1);					\	  addr = XEXP (addr, 0);					\	}								\      if (GET_CODE (addr) != PLUS) ;					\      else if (GET_CODE (XEXP (addr, 0)) == SIGN_EXTEND)		\	{								\	  reg1 = XEXP (addr, 0);					\	  addr = XEXP (addr, 1);					\	}								\      else if (GET_CODE (XEXP (addr, 1)) == SIGN_EXTEND)		\	{								\	  reg1 = XEXP (addr, 1);					\	  addr = XEXP (addr, 0);					\	}								\      else if (GET_CODE (XEXP (addr, 0)) == MULT)			\	{								\	  reg1 = XEXP (addr, 0);					\	  addr = XEXP (addr, 1);					\	}								\      else if (GET_CODE (XEXP (addr, 1)) == MULT)			\	{								\	  reg1 = XEXP (addr, 1);					\	  addr = XEXP (addr, 0);					\	}								\      else if (GET_CODE (XEXP (addr, 0)) == REG)			\	{								\	  reg1 = XEXP (addr, 0);					\	  addr = XEXP (addr, 1);					\	}								\      else if (GET_CODE (XEXP (addr, 1)) == REG)			\	{								\	  reg1 = XEXP (addr, 1);					\	  addr = XEXP (addr, 0);					\	}								\      if (GET_CODE (addr) == REG || GET_CODE (addr) == MULT		\	  || GET_CODE (addr) == SIGN_EXTEND)				\	{ if (reg1 == 0) reg1 = addr; else reg2 = addr; addr = 0; }	\/*  for OLD_INDEXING							\      else if (GET_CODE (addr) == PLUS)					\	{								\	  if (GET_CODE (XEXP (addr, 0)) == REG)				\	    {								\	      reg2 = XEXP (addr, 0);					\	      addr = XEXP (addr, 1);					\	    }								\	  else if (GET_CODE (XEXP (addr, 1)) == REG)			\	    {								\	      reg2 = XEXP (addr, 1);					\	      addr = XEXP (addr, 0);					\	    }								\	}								\  */									\      if (offset != 0) { if (addr != 0) abort (); addr = offset; }	\      if ((reg1 && (GET_CODE (reg1) == SIGN_EXTEND			\		    || GET_CODE (reg1) == MULT))			\	  || (reg2 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg2))))		\	{ breg = reg2; ireg = reg1; }					\      else if (reg1 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg1)))		\	{ breg = reg1; ireg = reg2; }					\      if (ireg != 0 && breg == 0 && GET_CODE (addr) == LABEL_REF)	\        { int scale = 1;						\	  if (GET_CODE (ireg) == MULT)					\	    { scale = INTVAL (XEXP (ireg, 1));				\	      ireg = XEXP (ireg, 0); }					\	  if (GET_CODE (ireg) == SIGN_EXTEND)				\	    fprintf (FILE, "(.L%d,pc,%s.w",				\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     reg_names[REGNO (XEXP (ireg, 0))]); 		\	  else								\	    fprintf (FILE, "(.L%d,pc,%s.l",				\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     reg_names[REGNO (ireg)]);				\	  if (scale != 1) fprintf (FILE, "*%d", scale);			\	  putc (')', FILE);						\	  break; }							\	if (breg != 0 && ireg == 0 && GET_CODE (addr) == LABEL_REF      \	    && ! (flag_pic && breg == pic_offset_table_rtx))            \	  {                                                             \	    fprintf (FILE, "(.L%d,pc,%s.l", 	                        \			 CODE_LABEL_NUMBER (XEXP (addr, 0)),            \			 reg_names[REGNO (breg)]);                      \	    putc (')', FILE);                                           \	    break; }                                                    \      if (ireg != 0 || breg != 0)					\	{ int scale = 1;						\	  if (breg == 0)						\	    abort ();							\          putc ('(', FILE); 	     				        \	  if (addr != 0)						\	    {                                                           \	      output_addr_const (FILE, addr);				\	      putc (',', FILE); 					\	    }    							\	  fprintf (FILE, "%s", reg_names[REGNO (breg)]);		\	  if (ireg != 0)						\	    putc (',', FILE);						\	  if (ireg != 0 && GET_CODE (ireg) == MULT)			\	    { scale = INTVAL (XEXP (ireg, 1));				\	      ireg = XEXP (ireg, 0); }					\	  if (ireg != 0 && GET_CODE (ireg) == SIGN_EXTEND)		\	    fprintf (FILE, "%s.w", reg_names[REGNO (XEXP (ireg, 0))]);	\	  else if (ireg != 0)						\	    fprintf (FILE, "%s.l", reg_names[REGNO (ireg)]);		\	  if (scale != 1) fprintf (FILE, "*%d", scale);			\	  putc (')', FILE);						\	  break;							\	}								\      else if (reg1 != 0 && GET_CODE (addr) == LABEL_REF)		\	{ fprintf (FILE, "(.L%d,pc,%s.w)",				\		   CODE_LABEL_NUMBER (XEXP (addr, 0)),			\		   reg_names[REGNO (reg1)]);				\	  break; }							\    default:								\      if (GET_CODE (addr) == CONST_INT					\	  && INTVAL (addr) < 0x8000					\	  && INTVAL (addr) >= -0x8000)					\	fprintf (FILE, "%d.w", INTVAL (addr));				\      else								\        output_addr_const (FILE, addr);					\    }}#endif /* ! use gas */			

⌨️ 快捷键说明

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