From: Richard Kenner Date: Tue, 7 Sep 1993 18:54:27 +0000 (-0400) Subject: (expand_binop): Must always widen second operand of shift. X-Git-Tag: misc/cutover-egcs-0~8667 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=943cc2426149ff3f490440e2cbae76a736613a48;p=thirdparty%2Fgcc.git (expand_binop): Must always widen second operand of shift. From-SVN: r5276 --- diff --git a/gcc/optabs.c b/gcc/optabs.c index cc742a405182..801b9456aee2 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -526,7 +526,12 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) no_extend = 1; xop0 = widen_operand (xop0, wider_mode, unsignedp, no_extend); - xop1 = widen_operand (xop1, wider_mode, unsignedp, no_extend); + + /* The second operand of a shift must always be extended. */ + xop1 = widen_operand (xop1, wider_mode, unsignedp, + no_extend && binoptab != ashl_optab + && binoptab != lshl_optab); + temp = expand_binop (wider_mode, binoptab, xop0, xop1, NULL_RTX, unsignedp, OPTAB_DIRECT); if (temp) @@ -1419,7 +1424,11 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) no_extend = 1; xop0 = widen_operand (xop0, wider_mode, unsignedp, no_extend); - xop1 = widen_operand (xop1, wider_mode, unsignedp, no_extend); + + /* The second operand of a shift must always be extended. */ + xop1 = widen_operand (xop1, wider_mode, unsignedp, + no_extend && binoptab != ashl_optab + && binoptab != lshl_optab); temp = expand_binop (wider_mode, binoptab, xop0, xop1, NULL_RTX, unsignedp, methods);