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

📄 crds.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
   '.' 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, $ in unos syntax).   '!' for the fpcr register (used in some float-to-fixed conversions).   '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.  */#undef PRINT_OPERAND_PUNCT_VALID_P#define PRINT_OPERAND_PUNCT_VALID_P(CODE)				\  ((CODE) == '.' || (CODE) == '#' || (CODE) == '-'			\   || (CODE) == '+' || (CODE) == '@' || (CODE) == '!')#undef PRINT_OPERAND#define PRINT_OPERAND(FILE, X, CODE)  \{ int i;								\  if (CODE == '.') ;							\  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 == '/')							\    ;									\  else if (GET_CODE (X) == REG)						\    { if (REGNO (X) < 16 && (CODE == 'y' || CODE == 'x') && GET_MODE (X) == DFmode)	\        fprintf (FILE, "%s:%s", reg_names[REGNO (X)], reg_names[REGNO (X)+1]); \      else								\        fprintf (FILE, "%s", reg_names[REGNO (X)]);			\    }									\  else if (GET_CODE (X) == MEM)						\    {									\      output_address (XEXP (X, 0));					\      if (CODE == 'd' && ! TARGET_68020					\	  && CONSTANT_ADDRESS_P (XEXP (X, 0)))				\	/* fprintf (FILE, ".l") */;					\    }									\  else if ((CODE == 'y' || CODE == 'w')					\	   && GET_CODE(X) == CONST_DOUBLE				\	   && (i = standard_sun_fpa_constant_p (X)))			\    fprintf (FILE, "%%%d", i & 0x1ff);					\  else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode)	\    { REAL_VALUE_TYPE r; long l;					\      REAL_VALUE_FROM_CONST_DOUBLE (r, X);				\      if (CODE == 'f')							\	ASM_OUTPUT_FLOAT_OPERAND (CODE, FILE, r);			\      else								\        { REAL_VALUE_TO_TARGET_SINGLE (r, l);				\          fprintf (FILE, "$0x%lx", l); } }				\  else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode)	\    { REAL_VALUE_TYPE r;						\      REAL_VALUE_FROM_CONST_DOUBLE (r, X);				\      ASM_OUTPUT_DOUBLE_OPERAND (FILE, r); }				\  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 { putc ('$', FILE); output_addr_const (FILE, X); }}#endif/* Note that this contains a kludge that knows that the only reason   we have an address (plus (label_ref...) (reg...))   is in the insn before a tablejump, and we know that m68k.md   generates a label LInnn: on such an insn.  */#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-LI%d-2(pc,%s.w",			\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     reg_names[REGNO (XEXP (ireg, 0))]); 		\	  else								\	    fprintf (FILE, "L%d-LI%d-2(pc,%s.l",			\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     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-LI%d-2(pc,%s.l",				\		   CODE_LABEL_NUMBER (XEXP (addr, 0)),			\		   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 ();		\	  if (addr != 0)						\	    output_addr_const (FILE, addr);				\	  fprintf (FILE, "(%s", reg_names[REGNO (breg)]);		\	  if (breg != 0 && 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-LI%d-2(pc,%s.l)",				\		   CODE_LABEL_NUMBER (XEXP (addr, 0)),			\		   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", INTVAL (addr));				\      else								\        output_addr_const (FILE, addr);					\    }}#define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \  do {	fprintf (FILE, "\t; file\t");			\	output_quoted_string (FILE, FILENAME);		\	fprintf (FILE, "\n");				\  } while (0)#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO)	\  fprintf (FILE, "\t; ln\t%d\n",			\	   (sdb_begin_function_line		\	    ? (LINENO) - sdb_begin_function_line : 1))/* Must put address in  %a0 , not  %d0 . -- LGM, 7/15/88 *//* UNOS ?? */#undef FUNCTION_PROFILER#define FUNCTION_PROFILER(FILE, LABEL_NO)	\    fprintf (FILE, "\tmovl &LP%%%d,%%a0\n\tjsr mcount\n", (LABEL_NO))

⌨️ 快捷键说明

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