Commit d66dec28 by Jeff Law

pa.c (emit_move_sequence): Don't copy 0.0 (double precision) directly to memory...

        * pa/pa.c (emit_move_sequence): Don't copy 0.0 (double precision)
        directly to memory, go through a reg if reload hasn't started.
        * pa/pa.md (main movdf pattern): Don't allow 0.0 (double precision)
        to be copied directly to memory.

From-SVN: r13669
parent dd56b31f
...@@ -1192,6 +1192,15 @@ emit_move_sequence (operands, mode, scratch_reg) ...@@ -1192,6 +1192,15 @@ emit_move_sequence (operands, mode, scratch_reg)
} }
else if (GET_CODE (operand0) == MEM) else if (GET_CODE (operand0) == MEM)
{ {
if (mode == DFmode && operand1 == CONST0_RTX (mode)
&& !(reload_in_progress || reload_completed))
{
rtx temp = gen_reg_rtx (DFmode);
emit_insn (gen_rtx (SET, VOIDmode, temp, operand1));
emit_insn (gen_rtx (SET, VOIDmode, operand0, temp));
return 1;
}
if (register_operand (operand1, mode) || operand1 == CONST0_RTX (mode)) if (register_operand (operand1, mode) || operand1 == CONST0_RTX (mode))
{ {
/* Run this case quickly. */ /* Run this case quickly. */
......
...@@ -2237,6 +2237,8 @@ ...@@ -2237,6 +2237,8 @@
"fG,*rG,f,*r,*r,RQ,o,Q"))] "fG,*rG,f,*r,*r,RQ,o,Q"))]
"(register_operand (operands[0], DFmode) "(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode)) || reg_or_0_operand (operands[1], DFmode))
&& ! (GET_CODE (operands[1]) == CONST_DOUBLE
&& GET_CODE (operands[0]) == MEM)
&& ! TARGET_SOFT_FLOAT" && ! TARGET_SOFT_FLOAT"
"* "*
{ {
......
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