aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-06-28 05:34:30 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-06-28 05:34:30 -0400
commit85fff2f3a06fd68f79ed0117d538fe6fc265bac6 (patch)
tree41af52eb27bd2e0b0201ad71b841fe4853712181 /gcc
parentab4a5fc941f08f7db76538aba22f91bc15fe7a17 (diff)
downloadgcc-85fff2f3a06fd68f79ed0117d538fe6fc265bac6.zip
gcc-85fff2f3a06fd68f79ed0117d538fe6fc265bac6.tar.gz
gcc-85fff2f3a06fd68f79ed0117d538fe6fc265bac6.tar.bz2
(movsf): Emit frsp if storing to memory and not PowerPC.
(movsf matcher): Remove explicit frsp. (store sf with update): Likewise. From-SVN: r7578
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.md21
1 files changed, 17 insertions, 4 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 747355a..0c4846f 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -3788,7 +3788,20 @@
}
if (GET_CODE (operands[0]) == MEM)
- operands[1] = force_reg (SFmode, operands[1]);
+ {
+ operands[1] = force_reg (SFmode, operands[1]);
+ if (! TARGET_POWERPC)
+ if (reload_in_progress || reload_completed)
+ emit_insn (gen_truncdfsf2 (operands[1],
+ gen_rtx (SUBREG, DFmode, operands[1], 0)));
+ else
+ {
+ rtx newreg = gen_reg_rtx (SFmode);
+ emit_insn (gen_truncdfsf2 (newreg,
+ gen_rtx (SUBREG, DFmode, operands[1], 0)));
+ operands[1] = newreg;
+ }
+ }
if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32)
{
@@ -3842,7 +3855,7 @@
"@
fmr %0,%1
lfs%U1%X1 %0,%1
- frsp %1,%1\;stfs%U0%X0 %1,%0"
+ stfs%U0%X0 %1,%0"
[(set_attr "type" "fp,fpload,*")
(set_attr "length" "*,*,8")])
@@ -4439,8 +4452,8 @@
(plus:SI (match_dup 1) (match_dup 2)))]
""
"@
- frsp %3,%3\;stfsux %3,%0,%2
- frsp %3,%3\;stfsu %3,%2(%0)")
+ stfsux %3,%0,%2
+ stfsu %3,%2(%0)")
(define_insn ""
[(set (match_operand:DF 3 "gpc_reg_operand" "=f,f")