aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gnu.org>1995-02-06 21:51:57 +0000
committerTorbjorn Granlund <tege@gnu.org>1995-02-06 21:51:57 +0000
commit1371378157db76d104fa5b919c270a46924aa501 (patch)
tree4ea4d14b6f2c5c5f17b31e9bc0d96993cac08467
parenta343d371519a5ce6b70c33a9f63f49f6661ea816 (diff)
downloadgcc-1371378157db76d104fa5b919c270a46924aa501.zip
gcc-1371378157db76d104fa5b919c270a46924aa501.tar.gz
gcc-1371378157db76d104fa5b919c270a46924aa501.tar.bz2
(RTX_COSTS): Rewrite.
From-SVN: r8878
-rw-r--r--gcc/config/i386/i386.h33
1 files changed, 21 insertions, 12 deletions
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index a5623a7..9fc65dd 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1388,18 +1388,27 @@ while (0)
/* Provide the costs of a rtl expression. This is in the body of a
switch on CODE. */
-#define RTX_COSTS(X,CODE,OUTER_CODE) \
- case MULT: \
- return COSTS_N_INSNS (10); \
- case DIV: \
- case UDIV: \
- case MOD: \
- case UMOD: \
- return COSTS_N_INSNS (40); \
- case PLUS: \
- if (GET_CODE (XEXP (X, 0)) == REG \
- && GET_CODE (XEXP (X, 1)) == CONST_INT) \
- return 1; \
+#define RTX_COSTS(X,CODE,OUTER_CODE) \
+ case MULT: \
+ return COSTS_N_INSNS (20); \
+ case DIV: \
+ case UDIV: \
+ case MOD: \
+ case UMOD: \
+ return COSTS_N_INSNS (20); \
+ case ASHIFTRT: \
+ case LSHIFTRT: \
+ case ASHIFT: \
+ return (4 + rtx_cost (XEXP (X, 0), OUTER_CODE) \
+ + rtx_cost (XEXP (X, 1), OUTER_CODE)); \
+ case PLUS: \
+ if (GET_CODE (XEXP (X, 0)) == MULT \
+ && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT \
+ && (INTVAL (XEXP (XEXP (X, 0), 1)) == 2 \
+ || INTVAL (XEXP (XEXP (X, 0), 1)) == 4 \
+ || INTVAL (XEXP (XEXP (X, 0), 1)) == 8)) \
+ return (2 + rtx_cost (XEXP (XEXP (X, 0), 0), OUTER_CODE) \
+ + rtx_cost (XEXP (X, 1), OUTER_CODE)); \
break;