Commit cb5b00cf by Richard Kenner

(expand_binop, multi-words shifts and rotates): Fix errors in last

change.

From-SVN: r7575
parent dfaa6d72
...@@ -644,20 +644,20 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) ...@@ -644,20 +644,20 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
GEN_INT (shift_count - BITS_PER_WORD), GEN_INT (shift_count - BITS_PER_WORD),
into_target, unsignedp, next_methods); into_target, unsignedp, next_methods);
if (inter != 0) if (inter != 0 && inter != into_target)
emit_move_insn (into_target, inter); emit_move_insn (into_target, inter);
/* For a signed right shift, we must fill the word we are shifting /* 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. */ out of with copies of the sign bit. Otherwise it is zeroed. */
if (binoptab != ashr_optab) if (inter != 0 && binoptab != ashr_optab)
emit_move_insn (outof_target, CONST0_RTX (word_mode)); inter = CONST0_RTX (word_mode);
else if (inter != 0) else if (inter != 0)
inter = expand_binop (word_mode, binoptab, inter = expand_binop (word_mode, binoptab,
outof_input, outof_input,
GEN_INT (BITS_PER_WORD - 1), GEN_INT (BITS_PER_WORD - 1),
outof_target, unsignedp, next_methods); outof_target, unsignedp, next_methods);
if (inter != 0) if (inter != 0 && inter != outof_target)
emit_move_insn (outof_target, inter); emit_move_insn (outof_target, inter);
} }
else else
...@@ -688,7 +688,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) ...@@ -688,7 +688,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
inter = expand_binop (word_mode, binoptab, outof_input, inter = expand_binop (word_mode, binoptab, outof_input,
op1, outof_target, unsignedp, next_methods); op1, outof_target, unsignedp, next_methods);
if (inter != 0) if (inter != 0 && inter != outof_target)
emit_move_insn (outof_target, inter); emit_move_insn (outof_target, inter);
if (inter != 0) if (inter != 0)
...@@ -699,7 +699,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) ...@@ -699,7 +699,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
inter = expand_binop (word_mode, ior_optab, carries, inter, inter = expand_binop (word_mode, ior_optab, carries, inter,
into_target, unsignedp, next_methods); into_target, unsignedp, next_methods);
if (inter != 0) if (inter != 0 && inter != into_target)
emit_move_insn (into_target, inter); emit_move_insn (into_target, inter);
} }
...@@ -798,7 +798,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) ...@@ -798,7 +798,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
else else
inter = 0; inter = 0;
if (inter != 0) if (inter != 0 && inter != into_target)
emit_move_insn (into_target, inter); emit_move_insn (into_target, inter);
outof_temp1 = expand_binop (word_mode, unsigned_shift, outof_temp1 = expand_binop (word_mode, unsigned_shift,
...@@ -813,7 +813,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) ...@@ -813,7 +813,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
outof_temp1, outof_temp2, outof_temp1, outof_temp2,
outof_target, unsignedp, next_methods); outof_target, unsignedp, next_methods);
if (inter != 0) if (inter != 0 && inter != outof_target)
emit_move_insn (outof_target, inter); emit_move_insn (outof_target, inter);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment