📄 ia64.c
字号:
name = XSTR (op, 0); /* The following code is borrowed from special_function_p in calls.c. */ /* Disregard prefix _, __ or __x. */ if (name[0] == '_') { if (name[1] == '_' && name[2] == 'x') name += 3; else if (name[1] == '_') name += 2; else name += 1; } if (name[0] == 's') { retval = ((name[1] == 'e' && (! strcmp (name, "setjmp") || ! strcmp (name, "setjmp_syscall"))) || (name[1] == 'i' && ! strcmp (name, "sigsetjmp")) || (name[1] == 'a' && ! strcmp (name, "savectx"))); } else if ((name[0] == 'q' && name[1] == 's' && ! strcmp (name, "qsetjmp")) || (name[0] == 'v' && name[1] == 'f' && ! strcmp (name, "vfork"))) retval = 1; return retval;}/* Return 1 if OP is a general operand, but when pic exclude symbolic operands. *//* ??? If we drop no-pic support, can delete SYMBOL_REF, CONST, and LABEL_REF from PREDICATE_CODES. */intmove_operand (op, mode) rtx op; enum machine_mode mode;{ if (! TARGET_NO_PIC && symbolic_operand (op, mode)) return 0; return general_operand (op, mode);}/* Return 1 if OP is a register operand that is (or could be) a GR reg. */intgr_register_operand (op, mode) rtx op; enum machine_mode mode;{ if (! register_operand (op, mode)) return 0; if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (GET_CODE (op) == REG) { unsigned int regno = REGNO (op); if (regno < FIRST_PSEUDO_REGISTER) return GENERAL_REGNO_P (regno); } return 1;}/* Return 1 if OP is a register operand that is (or could be) an FR reg. */intfr_register_operand (op, mode) rtx op; enum machine_mode mode;{ if (! register_operand (op, mode)) return 0; if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (GET_CODE (op) == REG) { unsigned int regno = REGNO (op); if (regno < FIRST_PSEUDO_REGISTER) return FR_REGNO_P (regno); } return 1;}/* Return 1 if OP is a register operand that is (or could be) a GR/FR reg. */intgrfr_register_operand (op, mode) rtx op; enum machine_mode mode;{ if (! register_operand (op, mode)) return 0; if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (GET_CODE (op) == REG) { unsigned int regno = REGNO (op); if (regno < FIRST_PSEUDO_REGISTER) return GENERAL_REGNO_P (regno) || FR_REGNO_P (regno); } return 1;}/* Return 1 if OP is a nonimmediate operand that is (or could be) a GR reg. */intgr_nonimmediate_operand (op, mode) rtx op; enum machine_mode mode;{ if (! nonimmediate_operand (op, mode)) return 0; if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (GET_CODE (op) == REG) { unsigned int regno = REGNO (op); if (regno < FIRST_PSEUDO_REGISTER) return GENERAL_REGNO_P (regno); } return 1;}/* Return 1 if OP is a nonimmediate operand that is (or could be) a FR reg. */intfr_nonimmediate_operand (op, mode) rtx op; enum machine_mode mode;{ if (! nonimmediate_operand (op, mode)) return 0; if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (GET_CODE (op) == REG) { unsigned int regno = REGNO (op); if (regno < FIRST_PSEUDO_REGISTER) return FR_REGNO_P (regno); } return 1;}/* Return 1 if OP is a nonimmediate operand that is a GR/FR reg. */intgrfr_nonimmediate_operand (op, mode) rtx op; enum machine_mode mode;{ if (! nonimmediate_operand (op, mode)) return 0; if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (GET_CODE (op) == REG) { unsigned int regno = REGNO (op); if (regno < FIRST_PSEUDO_REGISTER) return GENERAL_REGNO_P (regno) || FR_REGNO_P (regno); } return 1;}/* Return 1 if OP is a GR register operand, or zero. */intgr_reg_or_0_operand (op, mode) rtx op; enum machine_mode mode;{ return (op == const0_rtx || gr_register_operand (op, mode));}/* Return 1 if OP is a GR register operand, or a 5 bit immediate operand. */intgr_reg_or_5bit_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && INTVAL (op) >= 0 && INTVAL (op) < 32) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a GR register operand, or a 6 bit immediate operand. */intgr_reg_or_6bit_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_M (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a GR register operand, or an 8 bit immediate operand. */intgr_reg_or_8bit_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_K (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a GR/FR register operand, or an 8 bit immediate. */intgrfr_reg_or_8bit_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_K (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || grfr_register_operand (op, mode));}/* Return 1 if OP is a register operand, or an 8 bit adjusted immediate operand. */intgr_reg_or_8bit_adjusted_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_L (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a register operand, or is valid for both an 8 bit immediate and an 8 bit adjusted immediate operand. This is necessary because when we emit a compare, we don't know what the condition will be, so we need the union of the immediates accepted by GT and LT. */intgr_reg_or_8bit_and_adjusted_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_K (INTVAL (op)) && CONST_OK_FOR_L (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a register operand, or a 14 bit immediate operand. */intgr_reg_or_14bit_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_I (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a register operand, or a 22 bit immediate operand. */intgr_reg_or_22bit_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_J (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX || gr_register_operand (op, mode));}/* Return 1 if OP is a 6 bit immediate operand. */intshift_count_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED;{ return ((GET_CODE (op) == CONST_INT && CONST_OK_FOR_M (INTVAL (op))) || GET_CODE (op) == CONSTANT_P_RTX);}/* Return 1 if OP is a 5 bit immediate operand. */intshift_32bit_count_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED;{ return ((GET_CODE (op) == CONST_INT && (INTVAL (op) >= 0 && INTVAL (op) < 32)) || GET_CODE (op) == CONSTANT_P_RTX);}/* Return 1 if OP is a 2, 4, 8, or 16 immediate operand. */intshladd_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED;{ return (GET_CODE (op) == CONST_INT && (INTVAL (op) == 2 || INTVAL (op) == 4 || INTVAL (op) == 8 || INTVAL (op) == 16));}/* Return 1 if OP is a -16, -8, -4, -1, 1, 4, 8, or 16 immediate operand. */intfetchadd_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED;{ return (GET_CODE (op) == CONST_INT && (INTVAL (op) == -16 || INTVAL (op) == -8 || INTVAL (op) == -4 || INTVAL (op) == -1 || INTVAL (op) == 1 || INTVAL (op) == 4 || INTVAL (op) == 8 || INTVAL (op) == 16));}/* Return 1 if OP is a floating-point constant zero, one, or a register. */intfr_reg_or_fp01_operand (op, mode) rtx op; enum machine_mode mode;{ return ((GET_CODE (op) == CONST_DOUBLE && CONST_DOUBLE_OK_FOR_G (op)) || fr_register_operand (op, mode));}/* Like nonimmediate_operand, but don't allow MEMs that try to use a POST_MODIFY with a REG as displacement. */intdestination_operand (op, mode) rtx op; enum machine_mode mode;{ if (! nonimmediate_operand (op, mode)) return 0; if (GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) == POST_MODIFY && GET_CODE (XEXP (XEXP (XEXP (op, 0), 1), 1)) == REG) return 0; return 1;}/* Like memory_operand, but don't allow post-increments. */intnot_postinc_memory_operand (op, mode) rtx op; enum machine_mode mode;{ return (memory_operand (op, mode) && GET_RTX_CLASS (GET_CODE (XEXP (op, 0))) != 'a');}/* Return 1 if this is a comparison operator, which accepts an normal 8-bit signed immediate operand. */intnormal_comparison_operator (op, mode) register rtx op; enum machine_mode mode;{ enum rtx_code code = GET_CODE (op); return ((mode == VOIDmode || GET_MODE (op) == mode) && (code == EQ || code == NE || code == GT || code == LE || code == GTU || code == LEU));}/* Return 1 if this is a comparison operator, which accepts an adjusted 8-bit signed immediate operand. */intadjusted_comparison_operator (op, mode) register rtx op; enum machine_mode mode;{ enum rtx_code code = GET_CODE (op); return ((mode == VOIDmode || GET_MODE (op) == mode) && (code == LT || code == GE || code == LTU || code == GEU));}/* Return 1 if this is a signed inequality operator. */intsigned_inequality_operator (op, mode) register rtx op; enum machine_mode mode;{ enum rtx_code code = GET_CODE (op); return ((mode == VOIDmode || GET_MODE (op) == mode) && (code == GE || code == GT || code == LE || code == LT));}/* Return 1 if this operator is valid for predication. */intpredicate_operator (op, mode) register rtx op; enum machine_mode mode;{ enum rtx_code code = GET_CODE (op); return ((GET_MODE (op) == mode || mode == VOIDmode) && (code == EQ || code == NE));}/* Return 1 if this operator can be used in a conditional operation. */intcondop_operator (op, mode) register rtx op; enum machine_mode mode;{ enum rtx_code code = GET_CODE (op); return ((GET_MODE (op) == mode || mode == VOIDmode) && (code == PLUS || code == MINUS || code == AND || code == IOR || code == XOR));}/* Return 1 if this is the ar.lc register. */intar_lc_reg_operand (op, mode) register rtx op; enum machine_mode mode;{ return (GET_MODE (op) == DImode && (mode == DImode || mode == VOIDmode) && GET_CODE (op) == REG && REGNO (op) == AR_LC_REGNUM);}/* Return 1 if this is the ar.ccv register. */intar_ccv_reg_operand (op, mode) register rtx op; enum machine_mode mode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -