diff options
author | David Edelsohn <edelsohn@gnu.org> | 1999-06-24 21:59:02 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-06-24 15:59:02 -0600 |
commit | 2b97222d65935a0059fd9857ce1b9e2632b9cc03 (patch) | |
tree | 55e18cf5ea6ae29577d1e81e983063b3ee445e9b /gcc | |
parent | c22c8e60a262e715c20521619b99e4386d6b75a0 (diff) | |
download | gcc-2b97222d65935a0059fd9857ce1b9e2632b9cc03.zip gcc-2b97222d65935a0059fd9857ce1b9e2632b9cc03.tar.gz gcc-2b97222d65935a0059fd9857ce1b9e2632b9cc03.tar.bz2 |
rs6000.md (movdf_hardfloat32): Revert previous patch.
* rs6000.md (movdf_hardfloat32): Revert previous patch.
Handle LO_SUM the same as offsettable in cases 1 and 2.
* rs6000.c (find_addr_reg): Revert previous patch.
Co-Authored-By: Jeffrey A Law <law@cygnus.com>
From-SVN: r27752
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 3 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 20 |
3 files changed, 19 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 073362c..4caa20b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Thu Jun 24 22:54:05 1999 David Edelsohn <edelsohn@gnu.org> + Jeff Law <law@cygnus.com> + + * rs6000.md (movdf_hardfloat32): Revert previous patch. + Handle LO_SUM the same as offsettable in cases 1 and 2. + * rs6000.c (find_addr_reg): Revert previous patch. + Thu Jun 24 22:43:12 1999 Philippe De Muyter <phdm@macqel.be> * system.h (strstr): New external function declaration. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 494b439..7d6faf5 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -5690,9 +5690,6 @@ struct rtx_def * find_addr_reg (addr) rtx addr; { - if (GET_CODE (addr) == LO_SUM) - addr = XEXP (addr, 0); - while (GET_CODE (addr) == PLUS) { if (GET_CODE (XEXP (addr, 0)) == REG) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index a95b3ee..a74b139 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -6327,7 +6327,9 @@ else return \"mr %0,%1\;mr %L0,%L1\"; case 1: - if (offsettable_memref_p (operands[1])) + if (offsettable_memref_p (operands[1]) + || (GET_CODE (operands[1]) == MEM + && GET_CODE (XEXP (operands[1], 0)) == LO_SUM)) { /* If the low-address word is used in the address, we must load it last. Otherwise, load it first. Note that we cannot have @@ -6353,21 +6355,23 @@ operands[1], 0)) { output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg); - output_asm_insn (\"{l%X1|lwz%X1} %L0,%1\", operands); + output_asm_insn (\"{lx|lwzx} %L0,%1\", operands); output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg); - return \"{l%X1|lwz%X1} %0,%1\"; + return \"{lx|lwzx} %0,%1\"; } else { - output_asm_insn (\"{l%X1|lwz%X1} %0,%1\", operands); + output_asm_insn (\"{lx|lwzx} %0,%1\", operands); output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg); - output_asm_insn (\"{l%X1|lwz%X1} %L0,%1\", operands); + output_asm_insn (\"{lx|lwzx} %L0,%1\", operands); output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg); return \"\"; } } case 2: - if (offsettable_memref_p (operands[0])) + if (offsettable_memref_p (operands[0]) + || (GET_CODE (operands[0]) == MEM + && GET_CODE (XEXP (operands[0], 0)) == LO_SUM)) return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\"; else { @@ -6378,9 +6382,9 @@ abort (); addreg = find_addr_reg (XEXP (operands[0], 0)); - output_asm_insn (\"{st%X0|stw%X0} %1,%0\", operands); + output_asm_insn (\"{stx|stwx} %1,%0\", operands); output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg); - output_asm_insn (\"{st%X0|stw%X0} %L1,%0\", operands); + output_asm_insn (\"{stx|stwx} %L1,%0\", operands); output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg); return \"\"; } |