m68k.c (m68k_rtx_costs): Adjust mul/div costs for ColdFire cores.
authorBernardo Innocenti <bernie@develer.com>
Thu, 21 Aug 2003 17:47:41 +0000 (19:47 +0200)
committerBernardo Innocenti <bernie@gcc.gnu.org>
Thu, 21 Aug 2003 17:47:41 +0000 (19:47 +0200)
* config/m68k/m68k.c (m68k_rtx_costs): Adjust mul/div costs for
ColdFire cores.

Co-Authored-By: Paul Dale <pauli@snapgear.com>
Co-Authored-By: Peter Barada <peter@baradas.org>
From-SVN: r70653

gcc/ChangeLog
gcc/config/m68k/m68k.c

index db6b316c58607f478f52a6029890287f68896e00..6c4e28d4be1f61fe5159eb9759934151777457bf 100644 (file)
@@ -1,3 +1,10 @@
+2003-08-21  Bernardo Innocenti  <bernie@develer.com>
+            Paul Dale  <pauli@snapgear.com>
+            Peter Barada <peter@baradas.org>
+
+       * config/m68k/m68k.c (m68k_rtx_costs): Adjust mul/div costs for
+       ColdFire cores.
+
 2003-08-21  Zack Weinberg  <zack@codesourcery.com>
 
        * Makefile.in (INCLUDES): Remove -I$(srcdir)/config.
index e304a655962bebc6c5450425df73b2ce809fe593..9d142c57f04cc26a999499ae62d4fb54f10c9ce9 100644 (file)
@@ -1507,9 +1507,10 @@ m68k_rtx_costs (x, code, outer_code, total)
        for add and the time for shift, taking away a little more because
        sometimes move insns are needed.  */
     /* div?.w is relatively cheaper on 68000 counted in COSTS_N_INSNS terms.  */
-#define MULL_COST (TARGET_68060 ? 2 : TARGET_68040 ? 5 : 13)
-#define MULW_COST (TARGET_68060 ? 2 : TARGET_68040 ? 3 : TARGET_68020 ? 8 : 5)
-#define DIVW_COST (TARGET_68020 ? 27 : 12)
+#define MULL_COST (TARGET_68060 ? 2 : TARGET_68040 ? 5 : TARGET_CFV3 ? 3 : TARGET_COLDFIRE ? 10 : 13)
+#define MULW_COST (TARGET_68060 ? 2 : TARGET_68040 ? 3 : TARGET_68020 ? 8 : \
+                       TARGET_CFV3 ? 2 : 5)
+#define DIVW_COST (TARGET_68020 ? 27 : TARGET_CF_HWDIV ? 11 : 12)
 
     case PLUS:
       /* An lea costs about three times as much as a simple add.  */
@@ -1521,7 +1522,11 @@ m68k_rtx_costs (x, code, outer_code, total)
          && (INTVAL (XEXP (XEXP (x, 0), 1)) == 2
              || INTVAL (XEXP (XEXP (x, 0), 1)) == 4
              || INTVAL (XEXP (XEXP (x, 0), 1)) == 8))
-       *total = COSTS_N_INSNS (3);      /* lea an@(dx:l:i),am */
+       {
+           /* lea an@(dx:l:i),am */
+           *total = COSTS_N_INSNS (TARGET_COLDFIRE ? 2 : 3);
+           return true;
+       }
       return false;
 
     case ASHIFT:
@@ -1532,7 +1537,7 @@ m68k_rtx_costs (x, code, outer_code, total)
           *total = COSTS_N_INSNS(1);
          return true;
        }
-      if (! TARGET_68020)
+      if (! TARGET_68020 && ! TARGET_COLDFIRE)
         {
          if (GET_CODE (XEXP (x, 1)) == CONST_INT)
            {
@@ -1557,7 +1562,7 @@ m68k_rtx_costs (x, code, outer_code, total)
          && !(INTVAL (XEXP (x, 1)) > 0
               && INTVAL (XEXP (x, 1)) <= 8))
        {
-         *total = COSTS_N_INSNS (3);    /* lsr #i,dn */
+         *total = COSTS_N_INSNS (TARGET_COLDFIRE ? 1 : 3);      /* lsr #i,dn */
          return true;
        }
       return false;
@@ -1579,6 +1584,8 @@ m68k_rtx_costs (x, code, outer_code, total)
     case UMOD:
       if (GET_MODE (x) == QImode || GET_MODE (x) == HImode)
         *total = COSTS_N_INSNS (DIVW_COST);    /* div.w */
+      else if (TARGET_CF_HWDIV)
+        *total = COSTS_N_INSNS (18);
       else
        *total = COSTS_N_INSNS (43);            /* div.l */
       return true;