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

📄 news.h

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
#if 0/* The NEWS assembler in version 3.4 complains about fmove.d, but this   macro proved not to work right.  3.4 is old, so forget about it. */#define ASM_OUTPUT_OPCODE(FILE, STRING) \{						\  if (!strncmp (STRING, "fmove.d", 7)		\      && CONSTANT_P (operands[1]))		\    {						\      fprintf (FILE, "fmove.x");		\      STRING += 7;				\    }						\}#endif/* 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)) + 13),	\  sprintf ((OUTPUT), "%s$$$%d", (NAME), (LABELNO)))/* 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, "%.9e", dstr);			\          if (REAL_VALUE_ISINF (VALUE) || REAL_VALUE_ISNAN (VALUE))	\	    {								\	      if (REAL_VALUE_NEGATIVE (VALUE))				\		fprintf (FILE, "#0f-99e999");				\	      else							\		fprintf (FILE, "#0f99e999");				\	    }								\          else if (REAL_VALUE_MINUS_ZERO (VALUE))			\            fprintf (FILE, "#0f-0.0");					\          else								\            fprintf (FILE, "#0f%s", dstr); 				\        }								\      else								\        {								\          long l;							\          REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);			\          fprintf (FILE, "#0x%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, "%.20e", dstr );			\      if (REAL_VALUE_ISINF (VALUE) || REAL_VALUE_ISNAN (VALUE))		\	{								\        if (REAL_VALUE_NEGATIVE (VALUE))				\          fprintf (FILE, "#0d-99e999");					\        else								\          fprintf (FILE, "#0d99e999");					\	}								\      else if (REAL_VALUE_MINUS_ZERO (VALUE))				\          fprintf (FILE, "#0d-0.0");					\      else								\          fprintf (FILE, "#0d%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, "%I0r%s", dstr);				\    } while (0)#if 0#undef PRINT_OPERAND#define PRINT_OPERAND(FILE, X, CODE)  \{ if (CODE == '.') fprintf (FILE, ".");					\  else if (CODE == '#') fprintf (FILE, "#");				\  else if (CODE == '-') fprintf (FILE, "-(sp)");			\  else if (CODE == '+') fprintf (FILE, "(sp)+");			\  else if (CODE == '@') fprintf (FILE, "(sp)");				\  else if (CODE == '!') fprintf (FILE, "fpcr");				\  else if (CODE == '$') {if (TARGET_68040_ONLY) fprintf (FILE, "s");}	\  else if (CODE == '&') {if (TARGET_68040_ONLY) fprintf (FILE, "d");}	\  else if (CODE == '/')							\    ;									\  else if (GET_CODE (X) == REG)						\    fprintf (FILE, "%s", reg_names[REGNO (X)]);				\  else if (GET_CODE (X) == MEM)						\    output_address (XEXP (X, 0));					\  else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode)	\    { REAL_VALUE_TYPE r;						\      REAL_VALUE_FROM_CONST_DOUBLE (r, X);				\      if (CODE == 'f')							\        { char dstr[30];						\          REAL_VALUE_TO_DECIMAL (r, "%.9e", dstr);			\          if (REAL_VALUE_ISINF (r) || REAL_VALUE_ISNAN (r)) {		\            if (REAL_VALUE_NEGATIVE (r))				\              fprintf (FILE, "#0f-99e999");				\            else							\              fprintf (FILE, "#0f99e999"); }				\          else if (REAL_VALUE_MINUS_ZERO (r))				\            fprintf (FILE, "#0f-0.0");					\          else								\            fprintf (FILE, "#0f%s", dstr); 				\        }								\      else								\        { long l;							\          REAL_VALUE_TO_TARGET_SINGLE (r, l);				\          fprintf (FILE, "#0x%x", l);					\        }}								\  else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode)	\    { REAL_VALUE_TYPE r;						\      REAL_VALUE_FROM_CONST_DOUBLE (r, X);				\      ASM_OUTPUT_LONG_DOUBLE_OPERAND (FILE, r); }			\  else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode)	\    { REAL_VALUE_TYPE r; char dstr[30];					\      REAL_VALUE_FROM_CONST_DOUBLE (r, X);				\      REAL_VALUE_TO_DECIMAL (r, "%.20e", dstr );			\      if (REAL_VALUE_ISINF (r) || REAL_VALUE_ISNAN (r)) {		\        if (REAL_VALUE_NEGATIVE (r))					\          fprintf (FILE, "#0d-99e999");					\        else								\          fprintf (FILE, "#0d99e999"); }				\      else if (REAL_VALUE_MINUS_ZERO (r))				\          fprintf (FILE, "#0d-0.0");					\      else								\          fprintf (FILE, "#0d%s", dstr); }				\  else if (CODE == 'b') output_addr_const (FILE, X);			\  else { putc ('#', FILE); output_addr_const (FILE, X); }}#endif#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; }	\      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.b,pc,%s.w",				\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     reg_names[REGNO (XEXP (ireg, 0))]); 		\	  else								\	    fprintf (FILE, "(L%d.b,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)	\        { fprintf (FILE, "(L%d.b,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 ();							\	  if (addr && GET_CODE (addr) == LABEL_REF) abort ();		\	  fprintf (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.b,pc,%s.l)",				\		   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);					\    }}#else /* Using GAS, which uses the MIT assembler syntax, like a Sun.  */#define FUNCTION_PROFILER(FILE, LABEL_NO) \   fprintf (FILE, "\tmovl #LP%d,d0\n\tjsr mcount\n", (LABEL_NO));#endif /* MOTOROLA */

⌨️ 快捷键说明

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