From 70cff8f545f04281a8cf0e8d6ee604ee8026fe32 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Tue, 16 Apr 1996 17:43:09 -0400 Subject: [PATCH] (addsidi3_2): Handle non-MEM overlap case. From-SVN: r11829 --- gcc/config/i386/i386.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 7f6cd8057b4..f307767df3a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -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); } -- 2.30.2