]> gcc.gnu.org Git - gcc.git/commitdiff
re PR target/23268 (ICE using math functions log & rint, -ffast-math, -O1 (,2,3,s))
authorUros Bizjak <uros@kss-loka.si>
Wed, 17 Aug 2005 20:44:01 +0000 (22:44 +0200)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 17 Aug 2005 20:44:01 +0000 (13:44 -0700)
PR target/23268
* config/i386/i386.md ("*fist<mode>2_1"): New pattern.
("lrint<mode>2"): Change expander to use "*fist<mode>2_1" pattern.

From-SVN: r103224

gcc/ChangeLog
gcc/config/i386/i386.md

index 25c6dfd25b980a26751f136d64c3a3aec3ab055b..6fa630143dbf7ea13afe57f4ccfe8f36b88a886b 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-17  Uros Bizjak  <uros@kss-loka.si>
+
+       PR target/23268
+       * config/i386/i386.md ("*fist<mode>2_1"): New pattern.
+       ("lrint<mode>2"): Change expander to use "*fist<mode>2_1" pattern.
+
 2005-08-17  J"orn Rennecke <joern.rennecke@st.com>
 
        * varasm.c (decode_reg_name): Skip empty aqdditional register names.
index 9e7e92ce8e5516db7f193658017600e9b81b233c..88440d66183c15b7cec3202b6ee1c40d4bfa8dac 100644 (file)
   DONE;
 })
 
+(define_insn_and_split "*fist<mode>2_1"
+  [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "=m,?r")
+       (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "f,f")]
+        UNSPEC_FIST))]
+  "TARGET_USE_FANCY_MATH_387
+   && flag_unsafe_math_optimizations
+   && !(reload_completed || reload_in_progress)"
+  "#"
+  "&& 1"
+  [(const_int 0)]
+{
+  if (memory_operand (operands[0], VOIDmode))
+    emit_insn (gen_fist<mode>2 (operands[0], operands[1]));
+  else
+    {
+      operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
+      emit_insn (gen_fist<mode>2_with_temp (operands[0], operands[1],
+                                           operands[2]));
+    }
+  DONE;
+}
+  [(set_attr "type" "fpspc")
+   (set_attr "mode" "<MODE>")])
+
 (define_insn "fistdi2"
   [(set (match_operand:DI 0 "memory_operand" "=m")
        (unspec:DI [(match_operand:XF 1 "register_operand" "f")]
   "")
 
 (define_expand "lrint<mode>2"
-  [(use (match_operand:X87MODEI 0 "nonimmediate_operand" ""))
-   (use (match_operand:XF 1 "register_operand" ""))]
+  [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "")
+       (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "")]
+        UNSPEC_FIST))]
   "TARGET_USE_FANCY_MATH_387
    && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
-{
-  if (memory_operand (operands[0], VOIDmode))
-    emit_insn (gen_fist<mode>2 (operands[0], operands[1]));
-  else
-    {
-      rtx op = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
-      emit_insn (gen_fist<mode>2_with_temp (operands[0], operands[1],
-                                           op));
-    }
-  DONE;
-})
+  "")
 
 ;; Rounding mode control word calculation could clobber FLAGS_REG.
 (define_insn_and_split "frndintxf2_floor"
This page took 0.096738 seconds and 5 git commands to generate.