Commit 70cff8f5 by Richard Kenner

(addsidi3_2): Handle non-MEM overlap case.

From-SVN: r11829
parent 0500d6f9
......@@ -2764,6 +2764,36 @@
if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
{
if (rtx_equal_p (low[0], operands[2]))
{
output_asm_insn (AS2 (mov%L0,%2,%0), high);
output_asm_insn (AS2 (add%L0,%1,%0), low);
output_asm_insn (AS2 (adc%L0,%1,%0), high);
RET;
}
if (rtx_equal_p (high[0], operands[2]))
{
if (GET_CODE (operands[0]) != MEM)
{
output_asm_insn (AS2 (mov%L0,%2,%0), low);
output_asm_insn (AS2 (mov%L0,%2,%0), high);
output_asm_insn (AS2 (add%L0,%1,%0), low);
output_asm_insn (AS2 (adc%L0,%1,%0), high);
}
else
{
/* It's too late to ask for a scratch now - but this
will probably not happen too often. */
output_asm_insn (AS2 (add%L1,%2,%1), low);
output_asm_insn (AS2 (mov%L0,%1,%0), low);
output_asm_insn (AS2 (mov%L1,%2,%1), low);
output_asm_insn (AS2 (mov%L0,%2,%0), high);
output_asm_insn (AS2 (adc%L0,%1,%0), high);
output_asm_insn (AS2 (sub%L1,%0,%1), low);
output_asm_insn (AS1 (neg%L1,%1), low);
}
RET;
}
output_asm_insn (AS2 (mov%L1,%3,%1), xops);
output_asm_insn (AS2 (mov%L0,%2,%0), xops);
}
......
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