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
This commit is contained in:
David Edelsohn 1999-06-24 21:59:02 +00:00 committed by Jeff Law
parent c22c8e60a2
commit 2b97222d65
3 changed files with 19 additions and 11 deletions

View 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.

View 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)

View File

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