(addsidi3_2): Handle non-MEM overlap case.

From-SVN: r11829
This commit is contained in:
Richard Kenner 1996-04-16 17:43:09 -04:00
parent 0500d6f9b2
commit 70cff8f545

View File

@ -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);
}