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

📄 alpha.c

📁 gcc3.2.1源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    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.  */#if TARGET_ABI_UNICOSMK  /* Set up function hooks.  */  init_machine_status = alpha_init_machine_status;  mark_machine_status = alpha_mark_machine_status;  free_machine_status = alpha_free_machine_status;#endif}/* 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 || 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 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 HOST_BITS_PER_WIDE_INT == 32  if (GET_CODE (op) == CONST_DOUBLE)    return (CONST_DOUBLE_LOW (op) == -1	    && (CONST_DOUBLE_HIGH (op) == -1		|| CONST_DOUBLE_HIGH (op) == 0));#else  if (GET_CODE (op) == CONST_DOUBLE)    return (CONST_DOUBLE_LOW (op) == -1 && CONST_DOUBLE_HIGH (op) == 0);#endif  return (GET_CODE (op) == CONST_INT	  && (INTVAL (op) == 0xff	      || INTVAL (op) == 0xffff	      || INTVAL (op) == (HOST_WIDE_INT)0xffffffff#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;{  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_DOUBLE:  case CONST_INT:  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));	}      /* 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:      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, 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.  */  if (SYMBOL_REF_FLAG (op) && decl_in_text_section (current_function_decl))    return 1;  return 0;}/* Return 1 if OP is a SYMBOL_REF for which we can make a call via bsr.  */intdirect_call_operand (op, mode)     rtx op;     enum machine_mode mode;{  /* Must be defined in this file.  */  if (! current_file_function_operand (op, mode))    return 0;  /* If profiling is implemented via linker tricks, we can't jump     to the nogp alternate entry point.  */  /* ??? TARGET_PROFILING_NEEDS_GP isn't really the right test,     but is approximately correct for the OSF ABIs.  Don't know     what to do for VMS, NT, or UMK.  */  if (! TARGET_PROFILING_NEEDS_GP      && ! current_function_profile)    return 0;  return 1;}/* Return true if OP is a LABEL_REF, or SYMBOL_REF or CONST referencing   a variable known to be defined in this file.  */static boollocal_symbol_p (op)     rtx op;{  const char *str = XSTR (op, 0);  /* ??? SYMBOL_REF_FLAG is set for local function symbols, but we     run into problems with the rtl inliner in that the symbol was     once external, but is local after inlining, which results in     unrecognizable insns.  */  return (CONSTANT_POOL_ADDRESS_P (op)	  /* If @, then ENCODE_SECTION_INFO sez it's local.  */	  || str[0] == '@'	  /* If *$, then ASM_GENERATE_INTERNAL_LABEL sez it's local.  */	  || (str[0] == '*' && str[1] == '$'));}intlocal_symbolic_operand (op, mode)     rtx op;     enum machine_mode mode;{  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))    return 0;  if (GET_CODE (op) == LABEL_REF)    return 1;  if (GET_CODE (op) == CONST      && GET_CODE (XEXP (op, 0)) == PLUS      && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)    op = XEXP (XEXP (op, 0), 0);  if (GET_CODE (op) != SYMBOL_REF)    return 0;

⌨️ 快捷键说明

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