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

📄 tm-hp9k320.h

📁 这是完整的gcc源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* 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)) + 12),	\  sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))/* This is how to output a command to make the user-level label named NAME   defined for reference from other files.  */#define ASM_GLOBALIZE_LABEL(FILE,NAME)	\  do { fputs ("\tglobal ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)	\do{  if (PREFIX[0] == 'L' && PREFIX[1] == 'I')		\    fprintf(FILE, "\tset %s%d,.+2\n", PREFIX, NUM);	\  else							\    fprintf (FILE, "%s%d:\n", PREFIX, NUM);		\} while(0)#define ASM_OUTPUT_DOUBLE(FILE, VALUE)					\  fprintf (FILE, "\tdouble 0f%.20g\n", (VALUE))#define ASM_OUTPUT_FLOAT(FILE, VALUE)					\  fprintf (FILE, "\tfloat 0f%.9g\n", (VALUE))/* This is how to output an assembler line defining an `int' constant.  */#define ASM_OUTPUT_INT(FILE,VALUE)  \( fprintf (FILE, "\tlong "),			\  output_addr_const (FILE, (VALUE)),		\  fprintf (FILE, "\n"))/* Likewise for `char' and `short' constants.  */#define ASM_OUTPUT_SHORT(FILE,VALUE)  \( fprintf (FILE, "\tshort "),			\  output_addr_const (FILE, (VALUE)),		\  fprintf (FILE, "\n"))#define ASM_OUTPUT_CHAR(FILE,VALUE)  \( fprintf (FILE, "\tbyte "),			\  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, "\tbyte 0x%x\n", (VALUE))#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \  fprintf (FILE, "\tlong L%d\n", VALUE)#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL)  \  fprintf (FILE, "\tshort L%d-L%d\n", VALUE, REL)#define ASM_OUTPUT_ALIGN(FILE,LOG)	\  if ((LOG) == 1)			\    fprintf (FILE, "\tlalign 2\n");	\  else if ((LOG) != 0)			\    abort ();#define ASM_OUTPUT_SKIP(FILE,SIZE)  \  fprintf (FILE, "\tspace %u\n", (SIZE))#define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME)#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO)#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, "%%cc");				\  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)	\    { union { double d; int i[2]; } u;					\      union { float f; int i; } u1;					\      u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X);	\      u1.f = u.d;							\      if (CODE == 'f')							\        fprintf (FILE, "&0f%.9g", u1.f);				\      else								\        fprintf (FILE, "&0x%x", u1.i); }				\  else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode)	\    { union { double d; int i[2]; } u;					\      u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X);	\      fprintf (FILE, "&0f%.20g", u.d); }				\  else { putc ('&', FILE); output_addr_const (FILE, X); }}#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)	\{ register int i;			\  int inside;				\  inside = FALSE;			\  for (i = 0; i < size; 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);			\}/* 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; }		\}/* Prevent output of `gcc_compiled.:'.  */#define ASM_IDENTIFY_GCC(FILE)#endif /* HPUX_ASM */

⌨️ 快捷键说明

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