(aux_truncdfsf2): New pattern.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Jun 1995 21:42:08 +0000 (21:42 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Jun 1995 21:42:08 +0000 (21:42 +0000)
(movsf): Use it instead of invalid SUBREG and truncdfsf2.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9902 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/rs6000/rs6000.md

index 19d53d4..da113ed 100644 (file)
   "frsp %0,%1"
   [(set_attr "type" "fp")])
 
+(define_insn "aux_truncdfsf2"
+  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
+       (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] 0))]
+  "! TARGET_POWERPC && TARGET_HARD_FLOAT"
+  "frsp %0,%1"
+  [(set_attr "type" "fp")])
+
 (define_insn "negsf2"
   [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
        (neg:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
          /* If operands[1] is a register, it may have double-precision data
             in it, so truncate it to single precision.  We need not do
             this for POWERPC.  */
-         if (! TARGET_POWERPC && GET_CODE (operands[1]) == REG)
+         if (! TARGET_POWERPC && TARGET_HARD_FLOAT
+             && GET_CODE (operands[1]) == REG)
            {
-             rtx newreg = reload_in_progress ? operands[1] : gen_reg_rtx (SFmode);
-             emit_insn (gen_truncdfsf2 (newreg,
-                                        gen_rtx (SUBREG, DFmode, operands[1], 0)));
+             rtx newreg
+               = reload_in_progress ? operands[1] : gen_reg_rtx (SFmode);
+             emit_insn (gen_aux_truncdfsf2 (newreg, operands[1]));
              operands[1] = newreg;
            }