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

📄 i370.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
{									\  size_t i, limit = (LEN);						\  int j;								\  for (j = 0, i = 0; i < limit; j++, i++)				\    {									\      int 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) 			\{									\  char temp[MAX_MVS_LABEL_SIZE + 1];					\  if (mvs_check_alias(NAME, temp) == 2)					\    {									\      fprintf (FILE, "%s\tALIAS\tC'%s'\n", temp, NAME);			\    }									\  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));			\}/* Print operand XV (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 XV is null.  */#define PRINT_OPERAND(FILE, XV, CODE)					\{									\  switch (GET_CODE (XV))						\    {									\      static char curreg[4];						\      case REG:								\	if (CODE == 'N')						\	    strcpy (curreg, reg_names[REGNO (XV) + 1]);			\	else								\	    strcpy (curreg, reg_names[REGNO (XV)]);			\	fprintf (FILE, "%s", curreg);					\	break;								\      case MEM:								\	{								\	  rtx addr = XEXP (XV, 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 (XV, 0));				\	}								\	break;								\      case SYMBOL_REF:							\      case LABEL_REF:							\	mvs_page_lit += 4;						\	if (SYMBOL_REF_FLAG (XV)) fprintf (FILE, "=V(");		\	else                      fprintf (FILE, "=A(");		\	output_addr_const (FILE, XV);					\	fprintf (FILE, ")");						\	break;								\      case CONST_INT:					        	\	if (CODE == 'B')						\	  fprintf (FILE, "%d", INTVAL (XV) & 0xff);			\	else if (CODE == 'X')						\	  fprintf (FILE, "%02X", INTVAL (XV) & 0xff);			\	else if (CODE == 'h')						\	  fprintf (FILE, "%d", (INTVAL (XV) << 16) >> 16);		\	else if (CODE == 'H')						\	  {								\	    mvs_page_lit += 2;						\	    fprintf (FILE, "=H'%d'", (INTVAL (XV) << 16) >> 16);	\	  }								\	else if (CODE == 'K')						\	  {								\            /* auto sign-extension of signed 16-bit to signed 32-bit */	\	    mvs_page_lit += 4;						\	    fprintf (FILE, "=F'%d'", (INTVAL (XV) << 16) >> 16);	\	  }								\	else if (CODE == 'W')						\	  {								\            /* hand-built sign-extension of signed 32-bit to 64-bit */	\	    mvs_page_lit += 8;						\	    if (0 <=  INTVAL (XV)) {					\	       fprintf (FILE, "=XL8'00000000");				\            } else {							\	       fprintf (FILE, "=XL8'FFFFFFFF");				\            }								\	    fprintf (FILE, "%08X'", INTVAL (XV));			\	  }								\	else								\	  {								\	    mvs_page_lit += 4;						\	    fprintf (FILE, "=F'%d'", INTVAL (XV));			\	  }								\	break;								\      case CONST_DOUBLE:						\	if (GET_MODE (XV) == DImode)					\	  {								\	    if (CODE == 'M')						\	      {								\		mvs_page_lit += 4;					\		fprintf (FILE, "=XL4'%08X'", CONST_DOUBLE_LOW (XV));	\	      }								\	    else if (CODE == 'L')					\	      {								\		mvs_page_lit += 4;					\		fprintf (FILE, "=XL4'%08X'", CONST_DOUBLE_HIGH (XV));	\	      }								\	    else							\	      {								\		mvs_page_lit += 8;					\		fprintf (FILE, "=XL8'%08X%08X'", CONST_DOUBLE_LOW (XV),	\			CONST_DOUBLE_HIGH (XV));			\	      }								\	  }								\	else								\	  { 								\            char buf[50];						\	    if (GET_MODE (XV) == SFmode)				\	      {								\		mvs_page_lit += 4;					\		real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (XV),	\				 sizeof (buf), 0, 1);			\		fprintf (FILE, "=E'%s'", buf);				\	      }								\	    else if (GET_MODE (XV) == DFmode)				\	      {								\		mvs_page_lit += 8;					\		real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (XV),	\				 sizeof (buf), 0, 1);			\		fprintf (FILE, "=D'%s'", buf);				\	      }								\	    else /* VOIDmode */						\	      {								\		mvs_page_lit += 8;					\		fprintf (FILE, "=XL8'%08X%08X'", 			\			CONST_DOUBLE_HIGH (XV), CONST_DOUBLE_LOW (XV));	\	      }								\	  }								\	break;								\      case CONST:							\	if (GET_CODE (XEXP (XV, 0)) == PLUS				\	   && GET_CODE (XEXP (XEXP (XV, 0), 0)) == SYMBOL_REF)		\	  {								\	    mvs_page_lit += 4;						\	    if (SYMBOL_REF_FLAG (XEXP (XEXP (XV, 0), 0)))		\	      {								\		fprintf (FILE, "=V(");					\		ASM_OUTPUT_LABELREF (FILE,				\				  XSTR (XEXP (XEXP (XV, 0), 0), 0));	\		fprintf (FILE, ")\n\tA\t%s,=F'%d'", curreg,		\				  INTVAL (XEXP (XEXP (XV, 0), 1)));	\	      }								\	    else							\	      {								\		fprintf (FILE, "=A(");					\		output_addr_const (FILE, XV);				\		fprintf (FILE, ")");					\	      }								\	  }								\	else								\	  {								\	    mvs_page_lit += 4;						\	    fprintf (FILE, "=F'");					\	    output_addr_const (FILE, XV);				\	    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;								\    }									\}#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)			\{									\  if (strlen (NAME) + 1 > mvs_function_name_length)			\    {									\      if (mvs_function_name)						\	free (mvs_function_name);					\      mvs_function_name = 0;						\    }									\  if (!mvs_function_name)						\    {									\      mvs_function_name_length = strlen (NAME) * 2 + 1;			\      mvs_function_name = (char *) xmalloc (mvs_function_name_length);	\    }									\  if (!strcmp (NAME, "main"))						\    strcpy (mvs_function_name, "gccmain");				\  else									\    strcpy (mvs_function_name, NAME);					\  fprintf (FILE, "\tDS\t0F\n");						\  assemble_name (FILE, mvs_function_name);				\  fputs ("\tRMODE\tANY\n", FILE);					\  assemble_name (FILE, mvs_function_name);				\  fputs ("\tCSECT\n", FILE);						\}/* Output assembler code to FILE to increment profiler label # LABELNO   for profiling a function entry.  */#define FUNCTION_PROFILER(FILE, LABELNO) 				\  fprintf (FILE, "Error: No profiling available.\n")#endif /* TARGET_HLASM *//* ======================================================== */

⌨️ 快捷键说明

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