OSDN Git Service

* config/sh/sh.md (divsi_inv_m3): Handle zero dividend
authorkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Nov 2007 21:15:19 +0000 (21:15 +0000)
committerkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Nov 2007 21:15:19 +0000 (21:15 +0000)
specially.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130357 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sh/sh.md

index 32c472e..2270e80 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-22  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * config/sh/sh.md (divsi_inv_m3): Handle zero dividend
+       specially.
+
 2007-11-22  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.h (TARGET_CPU_CPP_BUILTINS): Change checking
 2007-11-22  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.h (TARGET_CPU_CPP_BUILTINS): Change checking
index 90353b2..00221cc 100644 (file)
@@ -2471,6 +2471,12 @@ norm32: r25
   rtx scratch1 = operands[8];
   rtx scratch2 = operands[9];
 
   rtx scratch1 = operands[8];
   rtx scratch2 = operands[9];
 
+  if (satisfies_constraint_N (dividend))
+    {
+      emit_move_insn (result, dividend);
+      DONE;
+    }
+
   emit_insn (gen_mulsidi3_media (scratch0, inv1, dividend));
   emit_insn (gen_mulsidi3_media (scratch1, inv2, dividend));
   emit_insn (gen_ashrdi3_media (scratch2, scratch0, GEN_INT (63)));
   emit_insn (gen_mulsidi3_media (scratch0, inv1, dividend));
   emit_insn (gen_mulsidi3_media (scratch1, inv2, dividend));
   emit_insn (gen_ashrdi3_media (scratch2, scratch0, GEN_INT (63)));