m68k.md (movsf_cf_hard): Use fsmove instead of f%$smove and f%$move.
authorRichard Sandiford <richard@codesourcery.com>
Thu, 18 Jan 2007 19:49:17 +0000 (19:49 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 18 Jan 2007 19:49:17 +0000 (19:49 +0000)
gcc/
* config/m68k/m68k.md (movsf_cf_hard): Use fsmove instead of
f%$smove and f%$move.
(movdf_cf_hard): Use fdmove for cases 0 and 3 and fmove for case 1.
(extendsfdf2_cf): Use fdmove instead of f%&move.
(truncdfsf2_cf): Use fsmove instead of f%$smove.
(add<mode>3_cf, sub<mode>3_cf): Use <FP:prec> instead of <FP:round>.

From-SVN: r120924

gcc/ChangeLog
gcc/config/m68k/m68k.md

index 354fdf09dc51c9f2d6ff68ed25e9cc38a608f773..4f4801b7826b8d2b89ae71d5f33e965815d90c97 100644 (file)
@@ -1,3 +1,12 @@
+2007-01-18  Richard Sandiford  <richard@codesourcery.com>
+
+       * config/m68k/m68k.md (movsf_cf_hard): Use fsmove instead of
+       f%$smove and f%$move.
+       (movdf_cf_hard): Use fdmove for cases 0 and 3 and fmove for case 1.
+       (extendsfdf2_cf): Use fdmove instead of f%&move.
+       (truncdfsf2_cf): Use fsmove instead of f%$smove.
+       (add<mode>3_cf, sub<mode>3_cf): Use <FP:prec> instead of <FP:round>.
+
 2007-01-18  Richard Sandiford  <richard@codesourcery.com>
 
        * config/m68k/m68k.md (movdf_cf_hard): Use output_move_double for
index d54006ac01ce368de57b29d3c9e503e7bc592c01..35f944c790bec9289865289f51b4ee702d191f1e 100644 (file)
   if (FP_REG_P (operands[0]))
     {
       if (ADDRESS_REG_P (operands[1]))
-        return "move%.l %1,%-;f%$smove%.s %+,%0";
+        return "move%.l %1,%-;fsmove%.s %+,%0";
       if (FP_REG_P (operands[1]))
-        return "f%$move%.d %1,%0";
-      if (GET_CODE (operands[1]) == CONST_DOUBLE)
-        return output_move_const_single (operands);
-      return "f%$move%.s %f1,%0";
+        return "fsmove%.d %1,%0";
+      return "fsmove%.s %f1,%0";
     }
   if (FP_REG_P (operands[1]))
     {
   switch (which_alternative)
     {
     default:
+      return "fdmove%.d %1,%0";
+    case 1:
       return "fmove%.d %1,%0";
     case 2:
       return "fmove%.d %1,%-;move%.l %+,%0;move%.l %+,%R0";
     case 3:
-      return "move%.l %R1,%-;move%.l %1,%-;f%&move%.d %+,%0";
+      return "move%.l %R1,%-;move%.l %1,%-;fdmove%.d %+,%0";
     case 4: case 5: case 6:
       return output_move_double (operands);
     case 7:
          cc_status = cc_prev_status;
          return "";
        }
-      return "f%&move%.d %1,%0";
+      return "fdmove%.d %1,%0";
     }
-  return "f%&move%.s %f1,%0";
+  return "fdmove%.s %f1,%0";
 })
 
 ;; This cannot output into an f-reg because there is no way to be
          (match_operand:DF 1 "general_operand" "<Q>U,f")))]
   "TARGET_COLDFIRE_FPU"
   "@
-  f%$move%.d %1,%0
+  fsmove%.d %1,%0
   fmove%.s %1,%0")
 
 (define_insn ""
   "TARGET_COLDFIRE_FPU"
 {
   if (FP_REG_P (operands[2]))
-    return "f<FP:round>add%.d %2,%0";
-  return "f<FP:round>add%.<FP:prec> %2,%0";
+    return "f<FP:prec>add%.d %2,%0";
+  return "f<FP:prec>add%.<FP:prec> %2,%0";
 })
 \f
 ;; subtract instructions
   "TARGET_COLDFIRE_FPU"
 {
   if (FP_REG_P (operands[2]))
-    return "f<FP:round>sub%.d %2,%0";
-  return "f<FP:round>sub%.<FP:prec> %2,%0";
+    return "f<FP:prec>sub%.d %2,%0";
+  return "f<FP:prec>sub%.<FP:prec> %2,%0";
 })
 \f
 ;; multiply instructions