aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2004-03-12 17:21:32 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2004-03-12 17:21:32 +0000
commit8937b6a2095b723cbdb1fd2be7cd6011c52fce1a (patch)
tree6e220f8fca216ac71f052dffc290bc8aa6ad57fd /gcc
parentb8d5073947757bd6cdec3bcb2a12af9933747c92 (diff)
downloadgcc-8937b6a2095b723cbdb1fd2be7cd6011c52fce1a.zip
gcc-8937b6a2095b723cbdb1fd2be7cd6011c52fce1a.tar.gz
gcc-8937b6a2095b723cbdb1fd2be7cd6011c52fce1a.tar.bz2
* config/i386/i386.c (ix86_split_ashrdi): Optimize shift by 63.
From-SVN: r79397
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.c9
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e2821e3..ca4525c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 58e2633..dadd18d 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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]);