Commit 2b97222d by David Edelsohn Committed by Jeff Law

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
parent c22c8e60
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> Thu Jun 24 22:43:12 1999 Philippe De Muyter <phdm@macqel.be>
* system.h (strstr): New external function declaration. * system.h (strstr): New external function declaration.
......
...@@ -5690,9 +5690,6 @@ struct rtx_def * ...@@ -5690,9 +5690,6 @@ struct rtx_def *
find_addr_reg (addr) find_addr_reg (addr)
rtx addr; rtx addr;
{ {
if (GET_CODE (addr) == LO_SUM)
addr = XEXP (addr, 0);
while (GET_CODE (addr) == PLUS) while (GET_CODE (addr) == PLUS)
{ {
if (GET_CODE (XEXP (addr, 0)) == REG) if (GET_CODE (XEXP (addr, 0)) == REG)
......
...@@ -6327,7 +6327,9 @@ ...@@ -6327,7 +6327,9 @@
else else
return \"mr %0,%1\;mr %L0,%L1\"; return \"mr %0,%1\;mr %L0,%L1\";
case 1: 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 /* If the low-address word is used in the address, we must load
it last. Otherwise, load it first. Note that we cannot have it last. Otherwise, load it first. Note that we cannot have
...@@ -6353,21 +6355,23 @@ ...@@ -6353,21 +6355,23 @@
operands[1], 0)) operands[1], 0))
{ {
output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg); 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); output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
return \"{l%X1|lwz%X1} %0,%1\"; return \"{lx|lwzx} %0,%1\";
} }
else 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 (\"{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); output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
return \"\"; return \"\";
} }
} }
case 2: 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\"; return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
else else
{ {
...@@ -6378,9 +6382,9 @@ ...@@ -6378,9 +6382,9 @@
abort (); abort ();
addreg = find_addr_reg (XEXP (operands[0], 0)); 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 (\"{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); output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
return \"\"; return \"\";
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment