rs6000.md (movdf_hardfloat32): Revert previous patch.
authorDavid Edelsohn <edelsohn@gnu.org>
Thu, 24 Jun 1999 21:59:02 +0000 (21:59 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 24 Jun 1999 21:59:02 +0000 (15:59 -0600)
        * 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

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md

index 073362cc5b6009fed72ddb5a7371ea0b80b1624c..4caa20b65f87b5f7ff7973f68a70d0bb3ed17b0e 100644 (file)
@@ -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.
index 494b439d69ab526ec10e89528c09b1e85b82e11e..7d6faf5cb6c5b681796a96f262882d6dfc2b2790 100644 (file)
@@ -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)
index a95b3eeea3ccfeaa9b7addaf6b0917733f7ea7f6..a74b139ff0838865d31ed867edb4708e70de406a 100644 (file)
       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
                                 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
        {
            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 \"\";
        }