diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-09-25 11:37:01 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1998-09-25 12:37:01 +0100 |
commit | 913d8e132065f31b1594add678621d6b3b573d51 (patch) | |
tree | 05b067e0b4c1b156c10c8f6a82cbacc72fd20ad8 | |
parent | a0e7ad89ab869a38605b9980817b40851e7f2f36 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 12 |
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); |