diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-06-27 19:16:01 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-06-27 19:16:01 -0400 |
commit | cb5b00cfa15f4dc709984e3f39d708e5ce985139 (patch) | |
tree | 2342e7f9be4757deda2178dfd0a1b013d45ad6dd /gcc/optabs.c | |
parent | dfaa6d72a3daba2accbbc2c47c7903dcbb49a96d (diff) | |
download | gcc-cb5b00cfa15f4dc709984e3f39d708e5ce985139.zip gcc-cb5b00cfa15f4dc709984e3f39d708e5ce985139.tar.gz gcc-cb5b00cfa15f4dc709984e3f39d708e5ce985139.tar.bz2 |
(expand_binop, multi-words shifts and rotates): Fix errors in last
change.
From-SVN: r7575
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index 011d3ff..7eaa809 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); } |