mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 15:00:55 +08:00
(addsidi3_2): Handle non-MEM overlap case.
From-SVN: r11829
This commit is contained in:
parent
0500d6f9b2
commit
70cff8f545
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user