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:
parent
c22c8e60a2
commit
2b97222d65
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 \"\";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue