* sh.c (gen_shl_sext): Fix case 5.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Fri, 25 Sep 1998 11:37:01 +0000 (11:37 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Fri, 25 Sep 1998 11:37:01 +0000 (12:37 +0100)
From-SVN: r22591

gcc/ChangeLog
gcc/config/sh/sh.c

index 0522454ac195b29c38b3b429214d55b9227b1fc7..a7f1b600a223cfd72f50bc959105c55491811f85 100644 (file)
@@ -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.
index b70d8e1a58743428ba52a4ed54f98afa8d8b75c2..12f1b74c317503cf726fafa6d31c0ab846e51aea 100644 (file)
@@ -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);