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

📄 alpha.c

📁 linux下的gcc编译器
💻 C
📖 第 1 页 / 共 5 页
字号:
    {      if (alpha_fprm == ALPHA_FPRM_MINF || alpha_fprm == ALPHA_FPRM_DYN)	{	  warning ("rounding mode not supported for VAX floats");	  alpha_fprm = ALPHA_FPRM_NORM;	}      if (alpha_fptm == ALPHA_FPTM_SUI)	{	  warning ("trap mode not supported for VAX floats");	  alpha_fptm = ALPHA_FPTM_SU;	}      if (target_flags_explicit & MASK_LONG_DOUBLE_128)	warning ("128-bit long double not supported for VAX floats");      target_flags &= ~MASK_LONG_DOUBLE_128;    }  {    char *end;    int lat;    if (!alpha_mlat_string)      alpha_mlat_string = "L1";    if (ISDIGIT ((unsigned char)alpha_mlat_string[0])	&& (lat = strtol (alpha_mlat_string, &end, 10), *end == '\0'))      ;    else if ((alpha_mlat_string[0] == 'L' || alpha_mlat_string[0] == 'l')	     && ISDIGIT ((unsigned char)alpha_mlat_string[1])	     && alpha_mlat_string[2] == '\0')      {	static int const cache_latency[][4] = 	{	  { 3, 30, -1 },	/* ev4 -- Bcache is a guess */	  { 2, 12, 38 },	/* ev5 -- Bcache from PC164 LMbench numbers */	  { 3, 12, 30 },	/* ev6 -- Bcache from DS20 LMbench.  */	};	lat = alpha_mlat_string[1] - '0';	if (lat <= 0 || lat > 3 || cache_latency[alpha_cpu][lat-1] == -1)	  {	    warning ("L%d cache latency unknown for %s",		     lat, alpha_cpu_name[alpha_cpu]);	    lat = 3;	  }	else	  lat = cache_latency[alpha_cpu][lat-1];      }    else if (! strcmp (alpha_mlat_string, "main"))      {	/* Most current memories have about 370ns latency.  This is	   a reasonable guess for a fast cpu.  */	lat = 150;      }    else      {	warning ("bad value `%s' for -mmemory-latency", alpha_mlat_string);	lat = 3;      }    alpha_memory_latency = lat;  }  /* Default the definition of "small data" to 8 bytes.  */  if (!g_switch_set)    g_switch_value = 8;  /* Infer TARGET_SMALL_DATA from -fpic/-fPIC.  */  if (flag_pic == 1)    target_flags |= MASK_SMALL_DATA;  else if (flag_pic == 2)    target_flags &= ~MASK_SMALL_DATA;  /* Align labels and loops for optimal branching.  */  /* ??? Kludge these by not doing anything if we don't optimize and also if     we are writing ECOFF symbols to work around a bug in DEC's assembler.  */  if (optimize > 0 && write_symbols != SDB_DEBUG)    {      if (align_loops <= 0)	align_loops = 16;      if (align_jumps <= 0)	align_jumps = 16;    }  if (align_functions <= 0)    align_functions = 16;  /* Acquire a unique set number for our register saves and restores.  */  alpha_sr_alias_set = new_alias_set ();  /* Register variables and functions with the garbage collector.  */  /* Set up function hooks.  */  init_machine_status = alpha_init_machine_status;  /* Tell the compiler when we're using VAX floating point.  */  if (TARGET_FLOAT_VAX)    {      real_format_for_mode[SFmode - QFmode] = &vax_f_format;      real_format_for_mode[DFmode - QFmode] = &vax_g_format;      real_format_for_mode[TFmode - QFmode] = NULL;    }}/* Returns 1 if VALUE is a mask that contains full bytes of zero or ones.  */intzap_mask (value)     HOST_WIDE_INT value;{  int i;  for (i = 0; i < HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;       i++, value >>= 8)    if ((value & 0xff) != 0 && (value & 0xff) != 0xff)      return 0;  return 1;}/* Returns 1 if OP is either the constant zero or a register.  If a   register, it must be in the proper mode unless MODE is VOIDmode.  */intreg_or_0_operand (op, mode)      register rtx op;      enum machine_mode mode;{  return op == CONST0_RTX (mode) || register_operand (op, mode);}/* Return 1 if OP is a constant in the range of 0-63 (for a shift) or   any register.  */intreg_or_6bit_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return ((GET_CODE (op) == CONST_INT	   && (unsigned HOST_WIDE_INT) INTVAL (op) < 64)	  || register_operand (op, mode));}/* Return 1 if OP is an 8-bit constant or any register.  */intreg_or_8bit_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return ((GET_CODE (op) == CONST_INT	   && (unsigned HOST_WIDE_INT) INTVAL (op) < 0x100)	  || register_operand (op, mode));}/* Return 1 if OP is a constant or any register.  */intreg_or_const_int_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return GET_CODE (op) == CONST_INT || register_operand (op, mode);}/* Return 1 if OP is an 8-bit constant.  */intcint8_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  return ((GET_CODE (op) == CONST_INT	   && (unsigned HOST_WIDE_INT) INTVAL (op) < 0x100));}/* Return 1 if the operand is a valid second operand to an add insn.  */intadd_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (GET_CODE (op) == CONST_INT)    /* Constraints I, J, O and P are covered by K.  */    return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'K')	    || CONST_OK_FOR_LETTER_P (INTVAL (op), 'L'));  return register_operand (op, mode);}/* Return 1 if the operand is a valid second operand to a sign-extending   add insn.  */intsext_add_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (GET_CODE (op) == CONST_INT)    return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'I')	    || CONST_OK_FOR_LETTER_P (INTVAL (op), 'O'));  return reg_not_elim_operand (op, mode);}/* Return 1 if OP is the constant 4 or 8.  */intconst48_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  return (GET_CODE (op) == CONST_INT	  && (INTVAL (op) == 4 || INTVAL (op) == 8));}/* Return 1 if OP is a valid first operand to an AND insn.  */intand_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == VOIDmode)    return (zap_mask (CONST_DOUBLE_LOW (op))	    && zap_mask (CONST_DOUBLE_HIGH (op)));  if (GET_CODE (op) == CONST_INT)    return ((unsigned HOST_WIDE_INT) INTVAL (op) < 0x100	    || (unsigned HOST_WIDE_INT) ~ INTVAL (op) < 0x100	    || zap_mask (INTVAL (op)));  return register_operand (op, mode);}/* Return 1 if OP is a valid first operand to an IOR or XOR insn.  */intor_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (GET_CODE (op) == CONST_INT)    return ((unsigned HOST_WIDE_INT) INTVAL (op) < 0x100	    || (unsigned HOST_WIDE_INT) ~ INTVAL (op) < 0x100);  return register_operand (op, mode);}/* Return 1 if OP is a constant that is the width, in bits, of an integral   mode smaller than DImode.  */intmode_width_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  return (GET_CODE (op) == CONST_INT	  && (INTVAL (op) == 8 || INTVAL (op) == 16	      || INTVAL (op) == 32 || INTVAL (op) == 64));}/* Return 1 if OP is a constant that is the width of an integral machine mode   smaller than an integer.  */intmode_mask_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  if (GET_CODE (op) == CONST_INT)    {      HOST_WIDE_INT value = INTVAL (op);      if (value == 0xff)	return 1;      if (value == 0xffff)	return 1;      if (value == 0xffffffff)	return 1;      if (value == -1)	return 1;    }  else if (HOST_BITS_PER_WIDE_INT == 32 && GET_CODE (op) == CONST_DOUBLE)    {      if (CONST_DOUBLE_LOW (op) == 0xffffffff && CONST_DOUBLE_HIGH (op) == 0)	return 1;    }  return 0;}/* Return 1 if OP is a multiple of 8 less than 64.  */intmul8_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  return (GET_CODE (op) == CONST_INT	  && (unsigned HOST_WIDE_INT) INTVAL (op) < 64	  && (INTVAL (op) & 7) == 0);}/* Return 1 if OP is the zero constant for MODE.  */intconst0_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return op == CONST0_RTX (mode);}/* Return 1 if OP is a hard floating-point register.  */inthard_fp_register_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))    return 0;  if (GET_CODE (op) == SUBREG)    op = SUBREG_REG (op);  return GET_CODE (op) == REG && REGNO_REG_CLASS (REGNO (op)) == FLOAT_REGS;}/* Return 1 if OP is a hard general register.  */inthard_int_register_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))    return 0;  if (GET_CODE (op) == SUBREG)    op = SUBREG_REG (op);  return GET_CODE (op) == REG && REGNO_REG_CLASS (REGNO (op)) == GENERAL_REGS;}/* Return 1 if OP is a register or a constant integer.  */intreg_or_cint_operand (op, mode)    register rtx op;    enum machine_mode mode;{     return (GET_CODE (op) == CONST_INT	     || register_operand (op, mode));}/* Return 1 if OP is something that can be reloaded into a register;   if it is a MEM, it need not be valid.  */intsome_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))    return 0;  switch (GET_CODE (op))    {    case REG:    case MEM:    case CONST_INT:    case CONST_DOUBLE:    case CONST_VECTOR:    case LABEL_REF:    case SYMBOL_REF:    case CONST:    case HIGH:      return 1;    case SUBREG:      return some_operand (SUBREG_REG (op), VOIDmode);    default:      break;    }  return 0;}/* Likewise, but don't accept constants.  */intsome_ni_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (GET_MODE (op) != mode && mode != VOIDmode)    return 0;  if (GET_CODE (op) == SUBREG)    op = SUBREG_REG (op);  return (GET_CODE (op) == REG || GET_CODE (op) == MEM);}/* Return 1 if OP is a valid operand for the source of a move insn.  */intinput_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))    return 0;  if (GET_MODE_CLASS (mode) == MODE_FLOAT && GET_MODE (op) != mode)    return 0;  switch (GET_CODE (op))    {    case LABEL_REF:    case SYMBOL_REF:    case CONST:      if (TARGET_EXPLICIT_RELOCS)	{	  /* We don't split symbolic operands into something unintelligable	     until after reload, but we do not wish non-small, non-global	     symbolic operands to be reconstructed from their high/lo_sum	     form.  */	  return (small_symbolic_operand (op, mode)		  || global_symbolic_operand (op, mode)		  || gotdtp_symbolic_operand (op, mode)		  || gottp_symbolic_operand (op, mode));	}      /* This handles both the Windows/NT and OSF cases.  */      return mode == ptr_mode || mode == DImode;    case HIGH:      return (TARGET_EXPLICIT_RELOCS	      && local_symbolic_operand (XEXP (op, 0), mode));    case REG:    case ADDRESSOF:      return 1;    case SUBREG:      if (register_operand (op, mode))	return 1;      /* ... fall through ...  */    case MEM:      return ((TARGET_BWX || (mode != HImode && mode != QImode))	      && general_operand (op, mode));    case CONST_DOUBLE:    case CONST_VECTOR:      return op == CONST0_RTX (mode);    case CONST_INT:      return mode == QImode || mode == HImode || add_operand (op, mode);    case CONSTANT_P_RTX:      return 1;    default:      break;    }  return 0;}/* Return 1 if OP is a SYMBOL_REF for a function known to be in this   file, and in the same section as the current function.  */intcurrent_file_function_operand (op, mode)     rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  if (GET_CODE (op) != SYMBOL_REF)    return 0;  /* Easy test for recursion.  */  if (op == XEXP (DECL_RTL (current_function_decl), 0))    return 1;  /* Otherwise, we need the DECL for the SYMBOL_REF, which we can't get.     So SYMBOL_REF_FLAG has been declared to imply that the function is     in the default text section.  So we must also check that the current     function is also in the text section.  */

⌨️ 快捷键说明

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