* config/i386/i386.c (ix86_split_ashrdi): Optimize shift by 63.
authorRoger Sayle <roger@eyesopen.com>
Fri, 12 Mar 2004 17:21:32 +0000 (17:21 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Fri, 12 Mar 2004 17:21:32 +0000 (17:21 +0000)
From-SVN: r79397

gcc/ChangeLog
gcc/config/i386/i386.c

index e2821e3dedaf0e5b61b0fa0697b9a77157ee0861..ca4525cda39223aff2d9406c7f3e9781ee223189 100644 (file)
@@ -1,3 +1,7 @@
+2004-03-12  Roger Sayle  <roger@eyesopen.com>
+
+       * config/i386/i386.c (ix86_split_ashrdi): Optimize shift by 63.
+
 2004-03-12  Matt Austern  <austern@apple.com>
 
        * target.h (struct gcc_target): New target hook, unwind_label.
index 58e26333a5ca73a7ca70a4cbeee42972e6e3965b..dadd18def822602ebf5083eed1921c869c1560d9 100644 (file)
@@ -10873,7 +10873,14 @@ ix86_split_ashrdi (rtx *operands, rtx scratch)
       split_di (operands, 2, low, high);
       count = INTVAL (operands[2]) & 63;
 
-      if (count >= 32)
+      if (count == 63)
+       {
+         emit_move_insn (high[0], high[1]);
+         emit_insn (gen_ashrsi3 (high[0], high[0], GEN_INT (31)));
+         emit_move_insn (low[0], high[0]);
+
+       }
+      else if (count >= 32)
        {
          emit_move_insn (low[0], high[1]);