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

📄 i370.h

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 H
📖 第 1 页 / 共 4 页
字号:
}/* This outputs a byte sized integer.  */#define ASM_OUTPUT_CHAR(FILE, EXP)					\  fprintf (FILE, "\tDC\tX'%02X'\n", INTVAL (EXP) )#define ASM_OUTPUT_BYTE(FILE, VALUE)					\  fprintf (FILE, "\tDC\tX'%02X'\n", VALUE)/* This outputs a text string.  The string are chopped up to fit into   an 80 byte record.  Also, control and special characters, interpreted   by the IBM assembler, are output numerically.  */#define MVS_ASCII_TEXT_LENGTH 48#define ASM_OUTPUT_ASCII(FILE, PTR, LEN)				\{									\  int i, j;								\  int c;								\  for (j = 0, i = 0; i < LEN; j++, i++)					\    {									\      c = PTR[i];							\      if (iscntrl (c) || c == '&')					\	{								\	  if (j % MVS_ASCII_TEXT_LENGTH != 0 )				\	    fprintf (FILE, "'\n");					\	  j = -1;							\	  if (c == '&') c = MAP_CHARACTER (c);				\	  fprintf (FILE, "\tDC\tX'%X'\n", c );				\	}								\      else								\	{								\	  if (j % MVS_ASCII_TEXT_LENGTH == 0)				\            fprintf (FILE, "\tDC\tC'");					\          if ( c == '\'' )                                       	\	    fprintf (FILE, "%c%c", c, c);                        	\	  else                                                   	\	    fprintf (FILE, "%c", c);                             	\	  if (j % MVS_ASCII_TEXT_LENGTH == MVS_ASCII_TEXT_LENGTH - 1)	\	    fprintf (FILE, "'\n" );					\	}								\    }									\  if (j % MVS_ASCII_TEXT_LENGTH != 0)					\    fprintf (FILE, "'\n");						\}/* This is how to output an assembler line that says to advance the   location counter to a multiple of 2**LOG bytes.  */#define ASM_OUTPUT_ALIGN(FILE, LOG)					\  if (LOG)								\    {									\      if ((LOG) == 1)							\        fprintf (FILE, "\tDS\t0H\n" );					\      else 								\        fprintf (FILE, "\tDS\t0F\n" );					\    }									\/* The maximum length of memory that the IBM assembler will allow in one   DS operation.  */#define MAX_CHUNK 32767/* A C statement to output to the stdio stream FILE an assembler   instruction to advance the location counter by SIZE bytes. Those   bytes should be zero when loaded.  */#define ASM_OUTPUT_SKIP(FILE, SIZE)  					\{									\  int s, k;								\  for (s = (SIZE); s > 0; s -= MAX_CHUNK)				\    {									\      if (s > MAX_CHUNK)						\	k = MAX_CHUNK;							\      else								\	k = s;								\      fprintf (FILE, "\tDS\tXL%d\n", k);				\    }									\}/* A C statement (sans semicolon) to output to the stdio stream   FILE the assembler definition of a common-label named NAME whose   size is SIZE bytes.  The variable ROUNDED is the size rounded up   to whatever alignment the caller wants.  */#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) 			\{									\  fputs ("\tENTRY\t", FILE);						\  assemble_name (FILE, NAME);						\  fputs ("\n", FILE);							\  fprintf (FILE, "\tDS\t0F\n");						\  ASM_OUTPUT_LABEL (FILE,NAME);						\  ASM_OUTPUT_SKIP (FILE,SIZE);						\}/* A C statement (sans semicolon) to output to the stdio stream   FILE the assembler definition of a local-common-label named NAME   whose size is SIZE bytes.  The variable ROUNDED is the size   rounded up to whatever alignment the caller wants.  */#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) 			\{									\  fprintf (FILE, "\tDS\t0F\n");						\  ASM_OUTPUT_LABEL (FILE,NAME);						\  ASM_OUTPUT_SKIP (FILE,SIZE);						\}/* 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)) + 10);			\  sprintf ((OUTPUT), "%s%d", (NAME), (LABELNO));			\}/* Define the parentheses used to group arithmetic operations   in assembler code.  */#define ASM_OPEN_PAREN "("#define ASM_CLOSE_PAREN ")"/* Define results of standard character escape sequences.  */#define TARGET_BELL	47#define TARGET_BS	22#define TARGET_TAB	5#define TARGET_NEWLINE	21#define TARGET_VT	11#define TARGET_FF	12#define TARGET_CR	13/* Print operand X (an rtx) in assembler syntax to file FILE.   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.   For `%' followed by punctuation, CODE is the punctuation and X is null.  */#define PRINT_OPERAND(FILE, X, CODE)					\{									\  switch (GET_CODE (X))							\    {									\      static char curreg[4];						\      case REG:								\	if (CODE == 'N')						\	    strcpy (curreg, reg_names[REGNO (X) + 1]);			\	else								\	    strcpy (curreg, reg_names[REGNO (X)]);			\	fprintf (FILE, "%s", curreg);					\	break;								\      case MEM:								\	{								\	  rtx addr = XEXP (X, 0);					\	  if (CODE == 'O')						\	    {								\	      if (GET_CODE (addr) == PLUS)				\		fprintf (FILE, "%d", INTVAL (XEXP (addr, 1)));		\	      else							\		fprintf (FILE, "0");					\	    }								\	  else if (CODE == 'R')						\	    {								\	      if (GET_CODE (addr) == PLUS)				\		fprintf (FILE, "%s", reg_names[REGNO (XEXP (addr, 0))]);\	      else							\		fprintf (FILE, "%s", reg_names[REGNO (addr)]);		\	    }								\	  else								\	    output_address (XEXP (X, 0));				\	}								\	break;								\      case SYMBOL_REF:							\      case LABEL_REF:							\	mvs_page_lit += 4;						\	if (SYMBOL_REF_FLAG (X)) fprintf (FILE, "=V(");			\	else                     fprintf (FILE, "=A(");			\	output_addr_const (FILE, X);					\	fprintf (FILE, ")");						\	break;								\      case CONST_INT:					        	\	if (CODE == 'B')						\	  fprintf (FILE, "%d", INTVAL (X) & 0xff);			\	else if (CODE == 'X')						\	  fprintf (FILE, "%02X", INTVAL (X) & 0xff);			\	else if (CODE == 'h')						\	  fprintf (FILE, "%d", (INTVAL (X) << 16) >> 16);		\	else if (CODE == 'H')						\	  {								\	    mvs_page_lit += 2;						\	    fprintf (FILE, "=H'%d'", (INTVAL (X) << 16) >> 16);		\	  }								\	else								\	  {								\	    mvs_page_lit += 4;						\	    fprintf (FILE, "=F'%d'", INTVAL (X));			\	  }								\	break;								\      case CONST_DOUBLE:						\	if (GET_MODE (X) == DImode)					\	  {								\	    if (CODE == 'M')						\	      {								\		mvs_page_lit += 4;					\		fprintf (FILE, "=XL4'%08X'", CONST_DOUBLE_LOW (X));	\	      }								\	    else if (CODE == 'L')					\	      {								\		mvs_page_lit += 4;					\		fprintf (FILE, "=XL4'%08X'", CONST_DOUBLE_HIGH (X));	\	      }								\	    else							\	      {								\		mvs_page_lit += 8;					\		fprintf (FILE, "=XL8'%08X%08X'", CONST_DOUBLE_LOW (X),	\			CONST_DOUBLE_HIGH (X));				\	      }								\	  }								\	else								\	  { 								\	    union { double d; int i[2]; } u;				\	    u.i[0] = CONST_DOUBLE_LOW (X);				\	    u.i[1] = CONST_DOUBLE_HIGH (X);				\	    if (GET_MODE (X) == SFmode)					\	      {								\		mvs_page_lit += 4;					\		fprintf (FILE, "=E'%.9G'", u.d);			\	      }								\	    else							\	      {								\		mvs_page_lit += 8;					\		fprintf (FILE, "=D'%.18G'", u.d);			\	      }								\	  }								\	break;								\      case CONST:							\	if (GET_CODE (XEXP (X, 0)) == PLUS				\	   && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF)		\	  {								\	    mvs_page_lit += 4;						\	    if (SYMBOL_REF_FLAG (XEXP (XEXP (X, 0), 0)))		\	      {								\		fprintf (FILE, "=V(");					\		ASM_OUTPUT_LABELREF (FILE,				\				  XSTR (XEXP (XEXP (X, 0), 0), 0));	\		fprintf (FILE, ")\n\tA\t%s,=F'%d'", curreg,		\				  INTVAL (XEXP (XEXP (X, 0), 1)));	\	      }								\	    else							\	      {								\		fprintf (FILE, "=A(");					\		output_addr_const (FILE, X);				\		fprintf (FILE, ")");					\	      }								\	  }								\	else								\	  {								\	    mvs_page_lit += 4;						\	    fprintf (FILE, "=F'");					\	    output_addr_const (FILE, X);				\	    fprintf (FILE, "'");					\	  }								\	break;								\      default:								\	abort();							\    }									\}#define PRINT_OPERAND_ADDRESS(FILE, ADDR)				\{									\  rtx breg, xreg, offset, plus;						\  									\  switch (GET_CODE (ADDR))						\    {									\      case REG:								\	fprintf (FILE, "0(%s)", reg_names[REGNO (ADDR)]);		\	break;								\      case PLUS:							\	breg = 0;							\	xreg = 0;							\	offset = 0;							\	if (GET_CODE (XEXP (ADDR, 0)) == PLUS)				\	  {								\	    if (GET_CODE (XEXP (ADDR, 1)) == REG)			\	      breg = XEXP (ADDR, 1);					\	    else							\	      offset = XEXP (ADDR, 1);					\	    plus = XEXP (ADDR, 0);					\	  }								\	else								\	  {								\	    if (GET_CODE (XEXP (ADDR, 0)) == REG)			\	      breg = XEXP (ADDR, 0);					\	    else							\	      offset = XEXP (ADDR, 0);					\	    plus = XEXP (ADDR, 1);					\	  }								\	if (GET_CODE (plus) == PLUS)					\	  {								\	    if (GET_CODE (XEXP (plus, 0)) == REG)			\	      {								\		if (breg)						\		  xreg = XEXP (plus, 0);				\		else							\		  breg = XEXP (plus, 0);				\	      }								\	    else							\	      {								\		offset = XEXP (plus, 0);				\	      }								\	    if (GET_CODE (XEXP (plus, 1)) == REG)			\	      {								\		if (breg)						\		  xreg = XEXP (plus, 1);				\		else							\		  breg = XEXP (plus, 1);				\	      }								\	    else							\	      {								\		offset = XEXP (plus, 1);				\	      }								\	  }								\	else if (GET_CODE (plus) == REG)				\	  {								\	    if (breg)							\	      xreg = plus;						\	    else							\	      breg = plus;						\	  }								\	else								\	  {								\	    offset = plus;						\	  }								\	if (offset)							\	  {								\	    if (GET_CODE (offset) == LABEL_REF)				\	      fprintf (FILE, "L%d",					\			CODE_LABEL_NUMBER (XEXP (offset, 0)));		\	    else							\	      output_addr_const (FILE, offset);				\	  }								\	else								\	  fprintf (FILE, "0");						\	if (xreg)							\	    fprintf (FILE, "(%s,%s)",					\		    reg_names[REGNO (xreg)], reg_names[REGNO (breg)]); 	\	else								\	  fprintf (FILE, "(%s)", reg_names[REGNO (breg)]);		\	break;								\      default:								\	mvs_page_lit += 4;						\	if (SYMBOL_REF_FLAG (ADDR)) fprintf (FILE, "=V(");		\	else                        fprintf (FILE, "=A(");		\	output_addr_const (FILE, ADDR);					\	fprintf (FILE, ")");						\	break;								\    }									\}

⌨️ 快捷键说明

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