--- gcc/config/i860.c 2018/04/24 17:59:43 1.1.1.3 +++ gcc/config/i860.c 2018/04/24 18:05:33 1.1.1.4 @@ -351,145 +351,6 @@ single_insn_src_p (op, mode) return 0; } } - -/* Nonzero only if this *really* is a single insn operand. */ -int -strict_single_insn_op_p (op, mode) - rtx op; - enum machine_mode mode; -{ - if (mode == VOIDmode) - mode = GET_MODE (op); - - switch (GET_CODE (op)) - { - case CC0: - return 1; - - case CONST_INT: - if (SMALL_INT (op)) - return 1; - /* We can put this set insn into delay slot, because this is one - insn; `orh'. */ - if ((INTVAL (op) & 0xffff) == 0) - return 1; - return 0; - - case SYMBOL_REF: - return 0; - - case REG: -#if 0 - /* This loses when moving an freg to a general reg. */ - return HARD_REGNO_NREGS (REGNO (op), mode) == 1; -#endif - return (mode != DFmode && mode != DImode); - - case MEM: - if (! CONSTANT_ADDRESS_P (XEXP (op, 0))) - return (mode != DFmode && mode != DImode); - return 0; - - /* We never need to negate or complement constants. */ - case NEG: - return (mode != DFmode); - case NOT: - case ZERO_EXTEND: - return 1; - - case PLUS: - case MINUS: - /* Detect cases that require multiple instructions. */ - if (CONSTANT_P (XEXP (op, 1)) - && !(GET_CODE (XEXP (op, 1)) == CONST_INT - && SMALL_INT (XEXP (op, 1)))) - return 0; - case EQ: - case NE: - case LT: - case GT: - case LE: - case GE: - case LTU: - case GTU: - case LEU: - case GEU: - return 1; - - case AND: - if (GET_CODE (XEXP (op, 1)) == NOT) - { - rtx arg = XEXP (XEXP (op, 1), 0); - if (CONSTANT_P (arg) - && !(GET_CODE (arg) == CONST_INT - && (SMALL_INT (arg) - || INTVAL (arg) & 0xffff == 0))) - return 0; - } - case IOR: - case XOR: - /* Both small and round numbers take one instruction; - others take two. */ - if (CONSTANT_P (XEXP (op, 1)) - && !(GET_CODE (XEXP (op, 1)) == CONST_INT - && (SMALL_INT (XEXP (op, 1)) - || INTVAL (XEXP (op, 1)) & 0xffff == 0))) - return 0; - - case LSHIFT: - case ASHIFT: - case ASHIFTRT: - case LSHIFTRT: - return 1; - - case SUBREG: - if (SUBREG_WORD (op) != 0) - return 0; - return strict_single_insn_op_p (SUBREG_REG (op), mode); - - case SIGN_EXTEND: - if (GET_CODE (XEXP (op, 0)) == MEM - && ! CONSTANT_ADDRESS_P (XEXP (XEXP (op, 0), 0))) - return 1; - return 0; - - /* Not doing floating point, since they probably - take longer than the branch slot they might fill. */ - case FLOAT_EXTEND: - case FLOAT_TRUNCATE: - case FLOAT: - case FIX: - case UNSIGNED_FLOAT: - case UNSIGNED_FIX: - return 0; - - default: - return 0; - } -} - -/* Return truth value of whether OP is a relational operator. */ -int -relop (op, mode) - rtx op; - enum machine_mode mode; -{ - switch (GET_CODE (op)) - { - case EQ: - case NE: - case GT: - case GE: - case LT: - case LE: - case GTU: - case GEU: - case LTU: - case LEU: - return 1; - } - return 0; -} /* Return non-zero only if OP is a register of mode MODE, or const0_rtx. */