aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1998-09-25 11:37:01 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1998-09-25 12:37:01 +0100
commit913d8e132065f31b1594add678621d6b3b573d51 (patch)
tree05b067e0b4c1b156c10c8f6a82cbacc72fd20ad8
parenta0e7ad89ab869a38605b9980817b40851e7f2f36 (diff)
downloadgcc-913d8e132065f31b1594add678621d6b3b573d51.zip
gcc-913d8e132065f31b1594add678621d6b3b573d51.tar.gz
gcc-913d8e132065f31b1594add678621d6b3b573d51.tar.bz2
* sh.c (gen_shl_sext): Fix case 5.
From-SVN: r22591
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/sh/sh.c12
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0522454..a7f1b60 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Fri Sep 25 19:30:19 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (gen_shl_sext): Fix case 5.
+
Fri Sep 25 17:35:23 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* reload1.c (reload_combine): Re-add line that got accidentally lost.
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index b70d8e1..12f1b74 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -1600,8 +1600,16 @@ gen_shl_sext (dest, left_rtx, size_rtx, source)
case 5:
{
int i = 16 - size;
- emit_insn (gen_shl_sext_ext (dest, source, GEN_INT (16 - insize),
- GEN_INT (16)));
+ if (! rtx_equal_function_value_matters
+ && ! reload_in_progress && ! reload_completed)
+ emit_insn (gen_shl_sext_ext (dest, source, left_rtx, size_rtx));
+ else
+ {
+ operands[0] = dest;
+ operands[2] = GEN_INT (16 - insize);
+ gen_shifty_hi_op (ASHIFT, operands);
+ emit_insn (gen_extendhisi2 (dest, gen_lowpart (HImode, dest)));
+ }
/* Don't use gen_ashrsi3 because it generates new pseudos. */
while (--i >= 0)
gen_ashift (ASHIFTRT, 1, dest);