From: Richard Kenner Date: Mon, 27 Jun 1994 23:16:01 +0000 (-0400) Subject: (expand_binop, multi-words shifts and rotates): Fix errors in last X-Git-Tag: misc/cutover-egcs-0~6368 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb5b00cfa15f4dc709984e3f39d708e5ce985139;p=thirdparty%2Fgcc.git (expand_binop, multi-words shifts and rotates): Fix errors in last change. From-SVN: r7575 --- diff --git a/gcc/optabs.c b/gcc/optabs.c index 011d3ff8e0ef..7eaa809bbf0c 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -644,20 +644,20 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) GEN_INT (shift_count - BITS_PER_WORD), into_target, unsignedp, next_methods); - if (inter != 0) + if (inter != 0 && inter != into_target) emit_move_insn (into_target, inter); /* For a signed right shift, we must fill the word we are shifting out of with copies of the sign bit. Otherwise it is zeroed. */ - if (binoptab != ashr_optab) - emit_move_insn (outof_target, CONST0_RTX (word_mode)); + if (inter != 0 && binoptab != ashr_optab) + inter = CONST0_RTX (word_mode); else if (inter != 0) inter = expand_binop (word_mode, binoptab, outof_input, GEN_INT (BITS_PER_WORD - 1), outof_target, unsignedp, next_methods); - if (inter != 0) + if (inter != 0 && inter != outof_target) emit_move_insn (outof_target, inter); } else @@ -688,7 +688,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) inter = expand_binop (word_mode, binoptab, outof_input, op1, outof_target, unsignedp, next_methods); - if (inter != 0) + if (inter != 0 && inter != outof_target) emit_move_insn (outof_target, inter); if (inter != 0) @@ -699,7 +699,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) inter = expand_binop (word_mode, ior_optab, carries, inter, into_target, unsignedp, next_methods); - if (inter != 0) + if (inter != 0 && inter != into_target) emit_move_insn (into_target, inter); } @@ -798,7 +798,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) else inter = 0; - if (inter != 0) + if (inter != 0 && inter != into_target) emit_move_insn (into_target, inter); outof_temp1 = expand_binop (word_mode, unsigned_shift, @@ -813,7 +813,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) outof_temp1, outof_temp2, outof_target, unsignedp, next_methods); - if (inter != 0) + if (inter != 0 && inter != outof_target) emit_move_insn (outof_target, inter); }