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

📄 tm-delta68k.h

📁 这是完整的gcc源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
	{								\	  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,%s.w",				\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     reg_names[REGNO (XEXP (ireg, 0))]); 		\	  else								\	    fprintf (FILE, "(L%%%d,%s.l",				\		     CODE_LABEL_NUMBER (XEXP (addr, 0)),		\		     reg_names[REGNO (ireg)]);				\	  if (scale != 1) fprintf (FILE, "*%d", scale);			\	  fprintf (FILE, ")");						\	  break; }							\      if (breg != 0 && ireg == 0 && GET_CODE (addr) == LABEL_REF)	\        { fprintf (FILE, "(L%%%d,%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 != 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(%%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", INTVAL (addr));				\      else								\        output_addr_const (FILE, addr);					\    }}#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)	\  sprintf ((LABEL), "%s%%%d", (PREFIX), (NUM))#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)	\    fprintf (FILE, "%s%%%d:\n", PREFIX, NUM)/* Must put address in  %a0 , not  %d0 . -- LGM, 7/15/88 */#define FUNCTION_PROFILER(FILE, LABEL_NO)	\    fprintf (FILE, "\tmov.l &LP%%%d,%%a0\n\tjsr mcount\n", (LABEL_NO))#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))/* ihnp4!lmayk!lgm says that `short 0' triggers assembler bug;   `short L%nn-L%nn' supposedly works.  */#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLE)			\    fprintf (FILE, "\tswbeg &%d\n%s%%%d:\n",				\	     XVECLEN (PATTERN (TABLE), 1), (PREFIX), (NUM));/* At end of a switch table, define LD%n iff the symbol LI%n was defined.  */#define ASM_OUTPUT_CASE_END(FILE,NUM,TABLE)		\  if (RTX_INTEGRATED_P (TABLE))				\    fprintf (FILE, "\tset LD%%%d,L%%%d-LI%%%d\n", (NUM), (NUM), (NUM))#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 (!strncmp ((PTR), "fbne", 4))		\	{ fprintf ((FILE), "fbgl"); (PTR) += 4; }	\      else if (!strncmp ((PTR), "fbeq", 4))		\	{ fprintf ((FILE), "fbngl"); (PTR) += 4; }	\    }							\/* MOVE, MOVEA, MOVEQ, MOVEC ==> MOV	*/		\  else if ((PTR)[0] == 'm' && (PTR)[1] == 'o'		\	   && (PTR)[2] == 'v' && (PTR)[3] == 'e')	\    { fprintf ((FILE), "mov"); (PTR) += 4;		\       if ((PTR)[0] == 'q' || (PTR)[0] == 'a' ||	\	   (PTR)[0] == 'c') (PTR)++; }			\/* SUB, SUBQ, SUBA, SUBI ==> SUB */			\  else if ((PTR)[0] == 's' && (PTR)[1] == 'u' 		\	   && (PTR)[2] == 'b')				\    { fprintf ((FILE), "sub"); (PTR) += 3;		\       if ((PTR)[0] == 'q' || (PTR)[0] == 'i' || 	\	   (PTR)[0] == 'a') (PTR)++; }			\/* CMP, CMPA, CMPI, CMPM ==> CMP	*/		\  else if ((PTR)[0] == 'c' && (PTR)[1] == 'm'		\	   && (PTR)[2] == 'p')				\    { fprintf ((FILE), "cmp"); (PTR) += 3;		\       if ((PTR)[0] == 'a' || (PTR)[0] == 'i' || 	\	   (PTR)[0] == 'm') (PTR)++; }			\}#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)  \( fputs ("\tlcomm ", (FILE)),			\  assemble_name ((FILE), (NAME)),		\  fprintf ((FILE), ",%d\n", (ROUNDED)))#define ASM_OUTPUT_LABELREF(FILE,NAME)	\  fprintf (FILE, "%s", NAME)/* Override usual definitions of SDB output macros.   These definitions differ only in the absence of the period   at the beginning of the name of the directive   and in the use of `~' as the symbol for the current location.  */#define PUT_SDB_SCL(a) fprintf(asm_out_file, "\tscl\t%d;", (a))#define PUT_SDB_INT_VAL(a) fprintf (asm_out_file, "\tval\t%d;", (a))#define PUT_SDB_VAL(a)				\( fputs ("\tval\t", asm_out_file),		\  output_addr_const (asm_out_file, (a)),	\  fputc (';', asm_out_file))#define PUT_SDB_DEF(a)				\do { fprintf (asm_out_file, "\tdef\t");	\     ASM_OUTPUT_LABELREF (asm_out_file, a); 	\     fprintf (asm_out_file, ";"); } while (0)#define PUT_SDB_PLAIN_DEF(a) fprintf(asm_out_file,"\tdef\t~%s;",a)#define PUT_SDB_ENDEF fputs("\tendef\n", asm_out_file)#define PUT_SDB_TYPE(a) fprintf(asm_out_file, "\ttype\t0%o;", a)#define PUT_SDB_SIZE(a) fprintf(asm_out_file, "\tsize\t%d;", a)#define PUT_SDB_START_DIM fprintf(asm_out_file, "\tdim\t")#define PUT_SDB_TAG(a)				\do { fprintf (asm_out_file, "\ttag\t");	\     ASM_OUTPUT_LABELREF (asm_out_file, a);	\     fprintf (asm_out_file, ";"); } while (0)#define PUT_SDB_BLOCK_START(LINE)		\  fprintf (asm_out_file,			\	   "\tdef\t~bb;\tval\t~;\tscl\t100;\tline\t%d;\tendef\n",	\	   (LINE))#define PUT_SDB_BLOCK_END(LINE)			\  fprintf (asm_out_file,			\	   "\tdef\t~eb;\tval\t~;\tscl\t100;\tline\t%d;\tendef\n",	\	   (LINE))#define PUT_SDB_FUNCTION_START(LINE)		\  fprintf (asm_out_file,			\	   "\tdef\t~bf;\tval\t~;\tscl\t101;\tline\t%d;\tendef\n",	\	   (LINE))#define PUT_SDB_FUNCTION_END(LINE)		\  fprintf (asm_out_file,			\	   "\tdef\t~ef;\tval\t~;\tscl\t101;\tline\t%d;\tendef\n",	\	   (LINE))#define PUT_SDB_EPILOGUE_END(NAME)		\  fprintf (asm_out_file,			\	   "\tdef\t%s;\tval\t~;\tscl\t-1;\tendef\n",	\	   (NAME))#define SDB_GENERATE_FAKE(BUFFER, NUMBER) \  sprintf ((BUFFER), "~%dfake", (NUMBER));#define LEGITIMATE_CONSTANT_P(X) (GET_CODE(X)==CONST_DOUBLE?0:1)#define ASM_RETURN_CASE_JUMP return "jmp (%0.w,%a1)"

⌨️ 快捷键说明

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