From: David Edelsohn Date: Thu, 24 Jun 1999 21:59:02 +0000 (+0000) Subject: rs6000.md (movdf_hardfloat32): Revert previous patch. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2b97222d65935a0059fd9857ce1b9e2632b9cc03;p=gcc.git 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 From-SVN: r27752 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 073362cc5b6..4caa20b65f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Thu Jun 24 22:54:05 1999 David Edelsohn + Jeff Law + + * 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 * system.h (strstr): New external function declaration. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 494b439d69a..7d6faf5cb6c 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 a95b3eeea3c..a74b139ff08 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 \"\"; }