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

📄 hp320.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
     } while (0)#else#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)		\ do {								\      if (CODE == 'f')						\        {							\          char dstr[30];					\      	  real_to_decimal (dstr, &(VALUE), sizeof (dstr), 9, 0); \          fprintf ((FILE), "&0f%s", dstr);			\        }							\      else							\        {							\          long l;						\          REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);		\          fprintf ((FILE), "&0x%lx", l);			\        }							\     } while (0)#endif /* AS_BUG_FLOATING_CONSTANT *//* 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_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1);		\      fprintf (FILE, "&0f%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_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1);		\      fprintf (FILE, "&0f%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 == '/')							\    fprintf (FILE, "%%");						\  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;  long l;					\      REAL_VALUE_FROM_CONST_DOUBLE (r, X);				\      PRINT_OPERAND_FLOAT (CODE, FILE, r, l); }				\  else if (GET_CODE (X) == CONST_DOUBLE					\	   && (GET_MODE (X) == DFmode || GET_MODE (X) == XFmode))	\    { char dstr[30];							\      real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (X),		\		       sizeof (dstr), 0, 1);				\      fprintf (FILE, "&0f%s", dstr); }					\  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; }	\/*  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-LI%d(%%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(%%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 (ireg != 0 || breg != 0)					\	{ int scale = 1;						\	  if (breg == 0)						\	    abort ();							\	  if (addr != 0)						\	    output_addr_const (FILE, addr);				\	  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-LI%d(%%pc,%s.w)",				\		   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.w", INTVAL (addr));				\      else								\        output_addr_const (FILE, addr);					\    }}#define	ASM_OUTPUT_ASCII(f, p, SIZE)	\do { size_t i, limit = (SIZE);		\  int inside;				\  inside = FALSE;			\  for (i = 0; i < limit; i++) {	\    if (i % 8 == 0) {			\      if (i != 0) {			\	if (inside)			\	  putc('"', (f));		\	putc('\n', (f));		\	inside = FALSE;			\      }					\      fprintf((f), "%s", ASCII_DATA_ASM_OP);	\    }					\    if ((p)[i] < 32 || (p)[i] == '\\' || (p)[i] == '"' || (p)[i] == 127) {	\      if (inside) {			\	putc('"', (f));			\	inside = FALSE;			\      }					\      if (i % 8 != 0)			\	putc(',', (f));			\      fprintf((f), "%d", (p)[i]);	\    } else {				\      if (!inside) {			\	if (i % 8 != 0)			\	  putc(',', (f));		\	putc('"', (f));			\	inside = TRUE;			\      }					\      putc((p)[i], (f));		\    }					\  }					\  if (inside)				\    putc('"', (f));			\  putc('\n', (f));			\} while (0)/* Translate Motorola opcodes such as `jbeq'   into SGS opcodes such as `beq.w'.   Delete the `e' in `move...' and `fmove'.   Change `ftst' to `ftest'.  */#define ASM_OUTPUT_OPCODE(FILE, PTR)			\{ if ((PTR)[0] == 'j' && (PTR)[1] == 'b')		\    { ++(PTR);						\      while (*(PTR) != ' ')				\	{ putc (*(PTR), (FILE)); ++(PTR); }		\      fprintf ((FILE), ".w"); }				\  else if ((PTR)[0] == 'f')				\    {							\      if (!strncmp ((PTR), "fmove", 5))			\	{ fprintf ((FILE), "fmov"); (PTR) += 5; }	\      else if (!strncmp ((PTR), "ftst", 4))		\	{ fprintf ((FILE), "ftest"); (PTR) += 4; }	\    }							\  else if ((PTR)[0] == 'm' && (PTR)[1] == 'o'		\	   && (PTR)[2] == 'v' && (PTR)[3] == 'e')	\    { fprintf ((FILE), "mov"); (PTR) += 4; }		\}#else /* not HPUX_ASM */#undef FUNCTION_PROFILER/* HP-UX needs the call to mcount before the link instruction.   Copy the return address onto the stack before the call to fake it out.  */#define FUNCTION_PROFILER(FILE, LABEL_NO) \  fprintf (FILE, \	   "\tmovel a6@(4),sp@-\n\tmovl #LP%d,a0\n\tjsr mcount\n\taddqw #4,sp\n", \	   (LABEL_NO));#endif /* not HPUX_ASM *//* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an   operand of a function call.  */#undef LEGITIMATE_PIC_OPERAND_P#define LEGITIMATE_PIC_OPERAND_P(X) \  ((! symbolic_operand (X, VOIDmode) \    && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0	\	  && GET_CODE (mem_for_const_double (X)) == MEM			\	  && symbolic_operand (XEXP (mem_for_const_double (X), 0),	\			       VOIDmode))) 				\   || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X))       	\   || PCREL_GENERAL_OPERAND_OK)/* hpux8 and later have C++ compatible include files, so do not   pretend they are `extern "C"'.  */#define NO_IMPLICIT_EXTERN_C

⌨️ 快捷键说明

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