aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-02-13 08:31:00 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1995-02-13 08:31:00 -0500
commite8112008dd48f91425be8ef6cef2f0e583f3c141 (patch)
tree6e7e1d90954f7bcabb16b1d52c652e7d76cf5c83
parent98c76e3c9c879cdd6e1c8599b9196bbf86a20977 (diff)
downloadgcc-e8112008dd48f91425be8ef6cef2f0e583f3c141.zip
gcc-e8112008dd48f91425be8ef6cef2f0e583f3c141.tar.gz
gcc-e8112008dd48f91425be8ef6cef2f0e583f3c141.tar.bz2
(extendsfdf2): Undo 30 Nov 94 change.
(extendsfdf2): Undo 30 Nov 94 change. Use float_extend instead of SUBREG and restore fmr instruction for differing FPRs. From-SVN: r8923
-rw-r--r--gcc/config/rs6000/rs6000.md32
1 files changed, 10 insertions, 22 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 0593a1b..23279e7 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -1,5 +1,5 @@
;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
-;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
;; This file is part of GNU CC.
@@ -2500,10 +2500,6 @@
;; The only conversions we will do will be when storing to memory. In that
;; case, we will use the "frsp" instruction before storing.
;;
-;; SFmode values are stored in DFmode registers with the same format as
-;; DFmode values, so float_extend is a no-op: treat as paradoxical subreg
-;; using define_expand and define_split if made by combine.
-;;
;; Note that when we store into a single-precision memory location, we need to
;; use the frsp insn first. If the register being stored isn't dead, we
;; need a scratch register for the frsp. But this is difficult when the store
@@ -2511,26 +2507,18 @@
;; this case, we just lose precision that we would have otherwise gotten but
;; is not guaranteed. Perhaps this should be tightened up at some point.
-(define_expand "extendsfdf2"
+(define_insn "extendsfdf2"
[(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (match_operand:SF 1 "gpc_reg_operand" "f"))]
+ (float_extend:DF (match_operand:SF 1 "gpc_reg_operand" "f")))]
""
- "
-{
- if (GET_CODE (operands[1]) == SUBREG)
- operands[1] = force_reg (SFmode, operands[1]);
- operands[1] = gen_rtx (SUBREG, DFmode, operands[1], 0);
-}")
-
-(define_split
- [(set (match_operand:DF 0 "gpc_reg_operand" "")
- (float_extend:DF (match_operand:SF 1 "gpc_reg_operand" "")))]
- "GET_CODE (operands[1]) != SUBREG"
- [(set (match_dup 0) (match_dup 1))]
- "
+ "*
{
- operands[1] = gen_rtx (SUBREG, DFmode, operands[1], 0);
-}")
+ if (REGNO (operands[0]) == REGNO (operands[1]))
+ return \"\";
+ else
+ return \"fmr %0,%1\";
+}"
+ [(set_attr "type" "fp")])
(define_insn "truncdfsf2"
[(set (match_operand:SF 0 "gpc_reg_operand" "=f")