diff options
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index 2b9091b..bad2776 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -857,12 +857,12 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) /* In case the insn wants input operands in modes different from the result, convert the operands. */ - if (GET_MODE (op0) != VOIDmode + if ((GET_MODE (op0) != VOIDmode || GET_CODE (op0) == CONST_INT) && GET_MODE (op0) != mode0 && mode0 != VOIDmode) xop0 = convert_to_mode (mode0, xop0, unsignedp); - if (GET_MODE (xop1) != VOIDmode + if ((GET_MODE (xop1) != VOIDmode || GET_CODE (xop1) == CONST_INT) && GET_MODE (xop1) != mode1 && mode1 != VOIDmode) xop1 = convert_to_mode (mode1, xop1, unsignedp); @@ -4231,7 +4231,7 @@ expand_fix (to, from, unsignedp) NULL_RTX, 0, OPTAB_LIB_WIDEN); expand_fix (to, target, 0); target = expand_binop (GET_MODE (to), xor_optab, to, - GEN_INT ((HOST_WIDE_INT) 1 << (bitsize - 1)), + GEN_INT ((HOST_WIDE_INT) -1 << (bitsize - 1)), to, 1, OPTAB_LIB_WIDEN); if (target != to) |