From 0bbb7f4d247de49a2a322c384acddd11337b2e71 Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Sun, 13 Sep 1992 17:26:24 +0000 Subject: [PATCH] (expand_binop): Convert op1 of shift libcall to word_mode. From-SVN: r2117 --- gcc/optabs.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/optabs.c b/gcc/optabs.c index 390cb7297d2..5466892cd0e 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1059,14 +1059,23 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) { rtx insns; rtx funexp = binoptab->handlers[(int) mode].libfunc; + rtx op1x = op1; + enum machine_mode op1_mode = mode; start_sequence (); + if (shift_op) + { + op1_mode = word_mode; + /* Specify unsigned here, + since negative shift counts are meaningless. */ + op1x = convert_to_mode (word_mode, op1, 1); + } + /* Pass 1 for NO_QUEUE so we don't lose any increments if the libcall is cse'd or moved. */ emit_library_call (binoptab->handlers[(int) mode].libfunc, - 1, mode, 2, op0, mode, op1, - (shift_op ? word_mode : mode)); + 1, mode, 2, op0, mode, op1x, op1_mode); insns = get_insns (); end_sequence (); -- 2.30.2