diff options
author | Richard Stallman <rms@gnu.org> | 1992-09-13 17:26:24 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-09-13 17:26:24 +0000 |
commit | 0bbb7f4d247de49a2a322c384acddd11337b2e71 (patch) | |
tree | ee3164c60acc9b22c7d1df2dbb15e6a220878a72 /gcc | |
parent | 304f705fef2dbd7ae4dec1b31f0543ec926acb94 (diff) | |
download | gcc-0bbb7f4d247de49a2a322c384acddd11337b2e71.zip gcc-0bbb7f4d247de49a2a322c384acddd11337b2e71.tar.gz gcc-0bbb7f4d247de49a2a322c384acddd11337b2e71.tar.bz2 |
(expand_binop): Convert op1 of shift libcall to word_mode.
From-SVN: r2117
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/optabs.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index 390cb72..5466892 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 (); |