aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.com>2001-09-20 14:25:11 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2001-09-20 15:25:11 +0100
commitc762ab6ebb62bc1e1d93b6d81b83737e39df2c01 (patch)
treedfb58441e92635e37ea1095ad3036416261b6212 /gcc
parented1a150e05a8bac9bc109a2e3644c9b13a566fd6 (diff)
downloadgcc-c762ab6ebb62bc1e1d93b6d81b83737e39df2c01.zip
gcc-c762ab6ebb62bc1e1d93b6d81b83737e39df2c01.tar.gz
gcc-c762ab6ebb62bc1e1d93b6d81b83737e39df2c01.tar.bz2
sh.c (shiftcosts): Don't use shiftcosts array for modes wider than SImode.
* sh.c (shiftcosts): Don't use shiftcosts array for modes wider than SImode. From-SVN: r45709
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sh/sh.c10
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b17a43..587e5d9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Sep 20 12:49:34 2001 J"orn Rennecke <amylaar@redhat.com>
+
+ * sh.c (shiftcosts): Don't use shiftcosts array for modes wider
+ than SImode.
+
Thu Sep 20 09:00:27 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* stor-layout.c (layout_type, case ARRAY_TYPE): Kludge to disable
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index fa39c74..53f8b12 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -1019,6 +1019,16 @@ shiftcosts (x)
{
int value;
+ if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
+ {
+ if (GET_MODE (x) == DImode
+ && GET_CODE (XEXP (x, 1)) == CONST_INT
+ && INTVAL (XEXP (x, 1)) == 1)
+ return 2;
+
+ /* Everything else is invalid, because there is no pattern for it. */
+ return 10000;
+ }
/* If shift by a non constant, then this will be expensive. */
if (GET_CODE (XEXP (x, 1)) != CONST_INT)
return SH_DYNAMIC_SHIFT_COST;