]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.md (movdf_hardfloat32): Revert previous patch.
authorDavid Edelsohn <edelsohn@gnu.org>
Thu, 24 Jun 1999 21:56:38 +0000 (15:56 -0600)
committerJeff Law <law@gcc.gnu.org>
Thu, 24 Jun 1999 21:56:38 +0000 (15:56 -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.

From-SVN: r27751

gcc/config/rs6000/rs6000.md

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 \"\";
        }