diff options
author | Torbjorn Granlund <tege@gnu.org> | 1995-02-06 21:51:57 +0000 |
---|---|---|
committer | Torbjorn Granlund <tege@gnu.org> | 1995-02-06 21:51:57 +0000 |
commit | 1371378157db76d104fa5b919c270a46924aa501 (patch) | |
tree | 4ea4d14b6f2c5c5f17b31e9bc0d96993cac08467 | |
parent | a343d371519a5ce6b70c33a9f63f49f6661ea816 (diff) | |
download | gcc-1371378157db76d104fa5b919c270a46924aa501.zip gcc-1371378157db76d104fa5b919c270a46924aa501.tar.gz gcc-1371378157db76d104fa5b919c270a46924aa501.tar.bz2 |
(RTX_COSTS): Rewrite.
From-SVN: r8878
-rw-r--r-- | gcc/config/i386/i386.h | 33 |
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; |