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

📄 alpha.c

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 C
📖 第 1 页 / 共 5 页
字号:
#if HOST_BITS_PER_WIDE_INT == 64	      || INTVAL (op) == -1#endif	      ));}/* 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 constant zero in floating-point.  */intfp0_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return (GET_MODE (op) == mode	  && GET_MODE_CLASS (mode) == MODE_FLOAT && op == CONST0_RTX (mode));}/* Return 1 if OP is the floating-point constant zero or a register.  */intreg_or_fp0_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return fp0_operand (op, mode) || register_operand (op, mode);}/* Return 1 if OP is a hard floating-point register.  */inthard_fp_register_operand (op, mode)     register rtx op;     enum machine_mode mode;{  return ((GET_CODE (op) == REG && REGNO_REG_CLASS (REGNO (op)) == FLOAT_REGS)	  || (GET_CODE (op) == SUBREG	      && hard_fp_register_operand (SUBREG_REG (op), mode)));}/* 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_DOUBLE:  case CONST_INT:  case LABEL_REF:    case SYMBOL_REF:  case CONST:      return 1;    case SUBREG:      return some_operand (SUBREG_REG (op), VOIDmode);    default:      break;    }  return 0;}/* 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:      /* This handles both the Windows/NT and OSF cases.  */      return mode == ptr_mode || mode == DImode;    case REG:      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:      return GET_MODE_CLASS (mode) == MODE_FLOAT && 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.  */intcurrent_file_function_operand (op, mode)     rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  return (GET_CODE (op) == SYMBOL_REF	  && ! profile_flag && ! profile_block_flag	  && (SYMBOL_REF_FLAG (op)	      || op == XEXP (DECL_RTL (current_function_decl), 0)));}/* Return 1 if OP is a valid operand for the MEM of a CALL insn.  */intcall_operand (op, mode)     rtx op;     enum machine_mode mode;{  if (mode != Pmode)    return 0;  return (GET_CODE (op) == SYMBOL_REF	  || (GET_CODE (op) == REG	      && (TARGET_OPEN_VMS || TARGET_WINDOWS_NT || REGNO (op) == 27)));}/* Return 1 if OP is a valid Alpha comparison operator.  Here we know which   comparisons are valid in which insn.  */intalpha_comparison_operator (op, mode)     register rtx op;     enum machine_mode mode;{  enum rtx_code code = GET_CODE (op);  if (mode != GET_MODE (op) || GET_RTX_CLASS (code) != '<')    return 0;  return (code == EQ || code == LE || code == LT	  || (mode == DImode && (code == LEU || code == LTU)));}/* Return 1 if OP is a valid Alpha swapped comparison operator.  */intalpha_swapped_comparison_operator (op, mode)     register rtx op;     enum machine_mode mode;{  enum rtx_code code = GET_CODE (op);  if (mode != GET_MODE (op) || GET_RTX_CLASS (code) != '<')    return 0;  code = swap_condition (code);  return (code == EQ || code == LE || code == LT	  || (mode == DImode && (code == LEU || code == LTU)));}/* Return 1 if OP is a signed comparison operation.  */intsigned_comparison_operator (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  switch (GET_CODE (op))    {    case EQ:  case NE:  case LE:  case LT:  case GE:   case GT:      return 1;    default:      break;    }  return 0;}/* Return 1 if this is a divide or modulus operator.  */intdivmod_operator (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  switch (GET_CODE (op))    {    case DIV:  case MOD:  case UDIV:  case UMOD:      return 1;    default:      break;    }  return 0;}/* Return 1 if this memory address is a known aligned register plus   a constant.  It must be a valid address.  This means that we can do   this as an aligned reference plus some offset.   Take into account what reload will do.  */intaligned_memory_operand (op, mode)     register rtx op;     enum machine_mode mode;{  rtx base;  if (reload_in_progress)    {      rtx tmp = op;      if (GET_CODE (tmp) == SUBREG)	tmp = SUBREG_REG (tmp);      if (GET_CODE (tmp) == REG	  && REGNO (tmp) >= FIRST_PSEUDO_REGISTER)	{	  op = reg_equiv_memory_loc[REGNO (tmp)];	  if (op == 0)	    return 0;	}    }  if (GET_CODE (op) != MEM      || GET_MODE (op) != mode)    return 0;  op = XEXP (op, 0);  /* LEGITIMIZE_RELOAD_ADDRESS creates (plus (plus reg const_hi) const_lo)     sorts of constructs.  Dig for the real base register.  */  if (reload_in_progress      && GET_CODE (op) == PLUS      && GET_CODE (XEXP (op, 0)) == PLUS)    base = XEXP (XEXP (op, 0), 0);  else    {      if (! memory_address_p (mode, op))	return 0;      base = (GET_CODE (op) == PLUS ? XEXP (op, 0) : op);    }  return (GET_CODE (base) == REG	  && REGNO_POINTER_ALIGN (REGNO (base)) >= 4);}/* Similar, but return 1 if OP is a MEM which is not alignable.  */intunaligned_memory_operand (op, mode)     register rtx op;     enum machine_mode mode;{  rtx base;  if (reload_in_progress)    {      rtx tmp = op;      if (GET_CODE (tmp) == SUBREG)	tmp = SUBREG_REG (tmp);      if (GET_CODE (tmp) == REG	  && REGNO (tmp) >= FIRST_PSEUDO_REGISTER)	{	  op = reg_equiv_memory_loc[REGNO (tmp)];	  if (op == 0)	    return 0;	}    }  if (GET_CODE (op) != MEM      || GET_MODE (op) != mode)    return 0;  op = XEXP (op, 0);  /* LEGITIMIZE_RELOAD_ADDRESS creates (plus (plus reg const_hi) const_lo)     sorts of constructs.  Dig for the real base register.  */  if (reload_in_progress      && GET_CODE (op) == PLUS      && GET_CODE (XEXP (op, 0)) == PLUS)    base = XEXP (XEXP (op, 0), 0);  else    {      if (! memory_address_p (mode, op))	return 0;      base = (GET_CODE (op) == PLUS ? XEXP (op, 0) : op);    }  return (GET_CODE (base) == REG	  && REGNO_POINTER_ALIGN (REGNO (base)) < 4);}/* Return 1 if OP is either a register or an unaligned memory location.  */intreg_or_unaligned_mem_operand (op, mode)     rtx op;     enum machine_mode mode;{  return register_operand (op, mode) || unaligned_memory_operand (op, mode);}/* Return 1 if OP is any memory location.  During reload a pseudo matches.  */intany_memory_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  return (GET_CODE (op) == MEM	  || (GET_CODE (op) == SUBREG && GET_CODE (SUBREG_REG (op)) == REG)	  || (reload_in_progress && GET_CODE (op) == REG	      && REGNO (op) >= FIRST_PSEUDO_REGISTER)	  || (reload_in_progress && GET_CODE (op) == SUBREG	      && GET_CODE (SUBREG_REG (op)) == REG	      && REGNO (SUBREG_REG (op)) >= FIRST_PSEUDO_REGISTER));}/* Returns 1 if OP is not an eliminable register.   This exists to cure a pathological abort in the s8addq (et al) patterns,	long foo () { long t; bar(); return (long) &t * 26107; }   which run afoul of a hack in reload to cure a (presumably) similar   problem with lea-type instructions on other targets.  But there is   one of us and many of them, so work around the problem by selectively   preventing combine from making the optimization.  */intreg_not_elim_operand (op, mode)      register rtx op;      enum machine_mode mode;{  rtx inner = op;  if (GET_CODE (op) == SUBREG)    inner = SUBREG_REG (op);  if (inner == frame_pointer_rtx || inner == arg_pointer_rtx)    return 0;  return register_operand (op, mode);}/* Return 1 is OP is a memory location that is not a reference (using   an AND) to an unaligned location.  Take into account what reload   will do.  */intnormal_memory_operand (op, mode)     register rtx op;     enum machine_mode mode ATTRIBUTE_UNUSED;{  if (reload_in_progress)    {      rtx tmp = op;      if (GET_CODE (tmp) == SUBREG)	tmp = SUBREG_REG (tmp);      if (GET_CODE (tmp) == REG	  && REGNO (tmp) >= FIRST_PSEUDO_REGISTER)	{	  op = reg_equiv_memory_loc[REGNO (tmp)];	  /* This may not have been assigned an equivalent address if it will	     be eliminated.  In that case, it doesn't matter what we do.  */	  if (op == 0)	    return 1;	}    }  return GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) != AND;}/* Accept a register, but not a subreg of any kind.  This allows us to   avoid pathological cases in reload wrt data movement common in    int->fp conversion.  */intreg_no_subreg_operand (op, mode)     register rtx op;     enum machine_mode mode;{  if (GET_CODE (op) == SUBREG)    return 0;  return register_operand (op, mode);}/* Return 1 if this function can directly return via $26.  */intdirect_return (){  return (! TARGET_OPEN_VMS && reload_completed && alpha_sa_size () == 0	  && get_frame_size () == 0	  && current_function_outgoing_args_size == 0	  && current_function_pretend_args_size == 0);}/* REF is an alignable memory location.  Place an aligned SImode   reference into *PALIGNED_MEM and the number of bits to shift into   *PBITNUM.  SCRATCH is a free register for use in reloading out   of range stack slots.  */voidget_aligned_mem (ref, paligned_mem, pbitnum)     rtx ref;     rtx *paligned_mem, *pbitnum;{  rtx base;  HOST_WIDE_INT offset = 0;  if (GET_CODE (ref) != MEM)    abort ();  if (reload_in_progress      && ! memory_address_p (GET_MODE (ref), XEXP (ref, 0)))    {      base = find_replacement (&XEXP (ref, 0));      if (! memory_address_p (GET_MODE (ref), base))	abort ();    }  else    {      base = XEXP (ref, 0);    }  if (GET_CODE (base) == PLUS)    offset += INTVAL (XEXP (base, 1)), base = XEXP (base, 0);  *paligned_mem = gen_rtx_MEM (SImode, plus_constant (base, offset & ~3));  MEM_COPY_ATTRIBUTES (*paligned_mem, ref);  RTX_UNCHANGING_P (*paligned_mem) = RTX_UNCHANGING_P (ref);  /* Sadly, we cannot use alias sets here because we may overlap other     data in a different alias set.  */  /* MEM_ALIAS_SET (*paligned_mem) = MEM_ALIAS_SET (ref); */  *pbitnum = GEN_INT ((offset & 3) * 8);}/* Similar, but just get the address.  Handle the two reload cases.     Add EXTRA_OFFSET to the address we return.  */rtxget_unaligned_address (ref, extra_offset)     rtx ref;

⌨️ 快捷键说明

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