From 8937b6a2095b723cbdb1fd2be7cd6011c52fce1a Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Fri, 12 Mar 2004 17:21:32 +0000 Subject: [PATCH] * config/i386/i386.c (ix86_split_ashrdi): Optimize shift by 63. From-SVN: r79397 --- gcc/ChangeLog | 4 ++++ gcc/config/i386/i386.c | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e2821e3deda..ca4525cda39 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-03-12 Roger Sayle + + * config/i386/i386.c (ix86_split_ashrdi): Optimize shift by 63. + 2004-03-12 Matt Austern * 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 58e26333a5c..dadd18def82 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]); -- 2.30.2