aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c6
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)