This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, i386] Committed: Macroize rint, lrint, round and lround patterns


Hello!

Attached patch macroizes rint, lrint, round and lround patterns (+ some whitespace cleanups). No functional change was introduced.

Patch was regression tested on x86_64-pc-linux-gnu, committed to mainline SVN.

2007-03-11 Uros Bizjak <ubizjak@gmail.com>

       * config/i386/i386.md (frndintxf2): Rename to ...
       (rintxf2): ... this. Remove expander having same name.
       (rintsf2, rintdf2): Implement using SSEMODEF macro.
       (roundsf2, rounddf2): Ditto.
       (lrint<mode>di2, lrint<mode>si2): Implement using SSEMODEI24 macro.
       (lround<mode>di2, lround<mode>si2): Ditto.

Uros.
Index: i386.md
===================================================================
--- i386.md	(revision 122814)
+++ i386.md	(working copy)
@@ -17318,27 +17318,28 @@
 })
 
 
-(define_insn "frndintxf2"
+(define_insn "rintxf2"
   [(set (match_operand:XF 0 "register_operand" "=f")
 	(unspec:XF [(match_operand:XF 1 "register_operand" "0")]
-	 UNSPEC_FRNDINT))]
+		   UNSPEC_FRNDINT))]
   "TARGET_USE_FANCY_MATH_387
    && flag_unsafe_math_optimizations"
   "frndint"
   [(set_attr "type" "fpspc")
    (set_attr "mode" "XF")])
 
-(define_expand "rintdf2"
-  [(use (match_operand:DF 0 "register_operand" ""))
-   (use (match_operand:DF 1 "register_operand" ""))]
+(define_expand "rint<mode>2"
+  [(use (match_operand:SSEMODEF 0 "register_operand" ""))
+   (use (match_operand:SSEMODEF 1 "register_operand" ""))]
   "(TARGET_USE_FANCY_MATH_387
-    && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
+    && (!(SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
+	|| TARGET_MIX_SSE_I387)
     && flag_unsafe_math_optimizations)
-   || (SSE_FLOAT_MODE_P (DFmode) && TARGET_SSE_MATH
+   || (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
        && !flag_trapping_math
        && !optimize_size)"
 {
-  if (SSE_FLOAT_MODE_P (DFmode) && TARGET_SSE_MATH
+  if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
       && !flag_trapping_math
       && !optimize_size)
     ix86_expand_rint (operand0, operand1);
@@ -17347,70 +17348,22 @@
       rtx op0 = gen_reg_rtx (XFmode);
       rtx op1 = gen_reg_rtx (XFmode);
 
-      emit_insn (gen_extenddfxf2 (op1, operands[1]));
-      emit_insn (gen_frndintxf2 (op0, op1));
+      emit_insn (gen_extend<mode>xf2 (op1, operands[1]));
+      emit_insn (gen_rintxf2 (op0, op1));
 
-      emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
+      emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
     }
   DONE;
 })
 
-(define_expand "rintsf2"
-  [(use (match_operand:SF 0 "register_operand" ""))
-   (use (match_operand:SF 1 "register_operand" ""))]
-  "(TARGET_USE_FANCY_MATH_387
-    && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
-    && flag_unsafe_math_optimizations)
-   || (SSE_FLOAT_MODE_P (SFmode) && TARGET_SSE_MATH
-       && !flag_trapping_math
-       && !optimize_size)"
-{
-  if (SSE_FLOAT_MODE_P (SFmode) && TARGET_SSE_MATH
-      && !flag_trapping_math
-      && !optimize_size)
-    ix86_expand_rint (operand0, operand1);
-  else
-    {
-      rtx op0 = gen_reg_rtx (XFmode);
-      rtx op1 = gen_reg_rtx (XFmode);
-
-      emit_insn (gen_extendsfxf2 (op1, operands[1]));
-      emit_insn (gen_frndintxf2 (op0, op1));
-
-      emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
-    }
-  DONE;
-})
-
-(define_expand "rintxf2"
-  [(use (match_operand:XF 0 "register_operand" ""))
-   (use (match_operand:XF 1 "register_operand" ""))]
-  "TARGET_USE_FANCY_MATH_387
-   && flag_unsafe_math_optimizations && !optimize_size"
-{
-  emit_insn (gen_frndintxf2 (operands[0], operands[1]));
-  DONE;
-})
-
-(define_expand "roundsf2"
-  [(match_operand:SF 0 "register_operand" "")
-   (match_operand:SF 1 "nonimmediate_operand" "")]
-  "SSE_FLOAT_MODE_P (SFmode) && TARGET_SSE_MATH
+(define_expand "round<mode>2"
+  [(match_operand:SSEMODEF 0 "register_operand" "")
+   (match_operand:SSEMODEF 1 "nonimmediate_operand" "")]
+  "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
    && !flag_trapping_math && !flag_rounding_math
    && !optimize_size"
 {
-  ix86_expand_round (operand0, operand1);
-  DONE;
-})
-
-(define_expand "rounddf2"
-  [(match_operand:DF 0 "register_operand" "")
-   (match_operand:DF 1 "nonimmediate_operand" "")]
-  "SSE_FLOAT_MODE_P (DFmode) && TARGET_SSE_MATH
-   && !flag_trapping_math && !flag_rounding_math
-   && !optimize_size"
-{
-  if (TARGET_64BIT)
+  if ((<MODE>mode != DFmode) || TARGET_64BIT)
     ix86_expand_round (operand0, operand1);
   else
     ix86_expand_rounddf_32 (operand0, operand1);
@@ -17420,7 +17373,7 @@
 (define_insn_and_split "*fistdi2_1"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
 	(unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
-	 UNSPEC_FIST))]
+		   UNSPEC_FIST))]
   "TARGET_USE_FANCY_MATH_387
    && !(reload_completed || reload_in_progress)"
   "#"
@@ -17443,7 +17396,7 @@
 (define_insn "fistdi2"
   [(set (match_operand:DI 0 "memory_operand" "=m")
 	(unspec:DI [(match_operand:XF 1 "register_operand" "f")]
-	 UNSPEC_FIST))
+		   UNSPEC_FIST))
    (clobber (match_scratch:XF 2 "=&1f"))]
   "TARGET_USE_FANCY_MATH_387"
   "* return output_fix_trunc (insn, operands, 0);"
@@ -17453,7 +17406,7 @@
 (define_insn "fistdi2_with_temp"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
 	(unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
-	 UNSPEC_FIST))
+		   UNSPEC_FIST))
    (clobber (match_operand:DI 2 "memory_operand" "=m,m"))
    (clobber (match_scratch:XF 3 "=&1f,&1f"))]
   "TARGET_USE_FANCY_MATH_387"
@@ -17464,7 +17417,7 @@
 (define_split
   [(set (match_operand:DI 0 "register_operand" "")
 	(unspec:DI [(match_operand:XF 1 "register_operand" "")]
-	 UNSPEC_FIST))
+		   UNSPEC_FIST))
    (clobber (match_operand:DI 2 "memory_operand" ""))
    (clobber (match_scratch 3 ""))]
   "reload_completed"
@@ -17476,7 +17429,7 @@
 (define_split
   [(set (match_operand:DI 0 "memory_operand" "")
 	(unspec:DI [(match_operand:XF 1 "register_operand" "")]
-	 UNSPEC_FIST))
+		   UNSPEC_FIST))
    (clobber (match_operand:DI 2 "memory_operand" ""))
    (clobber (match_scratch 3 ""))]
   "reload_completed"
@@ -17487,7 +17440,7 @@
 (define_insn_and_split "*fist<mode>2_1"
   [(set (match_operand:X87MODEI12 0 "register_operand" "=r")
 	(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
-	 UNSPEC_FIST))]
+			   UNSPEC_FIST))]
   "TARGET_USE_FANCY_MATH_387
    && !(reload_completed || reload_in_progress)"
   "#"
@@ -17505,7 +17458,7 @@
 (define_insn "fist<mode>2"
   [(set (match_operand:X87MODEI12 0 "memory_operand" "=m")
 	(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
-	 UNSPEC_FIST))]
+			   UNSPEC_FIST))]
   "TARGET_USE_FANCY_MATH_387"
   "* return output_fix_trunc (insn, operands, 0);"
   [(set_attr "type" "fpspc")
@@ -17514,7 +17467,7 @@
 (define_insn "fist<mode>2_with_temp"
   [(set (match_operand:X87MODEI12 0 "register_operand" "=r")
 	(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
-	 UNSPEC_FIST))
+			   UNSPEC_FIST))
    (clobber (match_operand:X87MODEI12 2 "memory_operand" "=m"))]
   "TARGET_USE_FANCY_MATH_387"
   "#"
@@ -17524,60 +17477,42 @@
 (define_split
   [(set (match_operand:X87MODEI12 0 "register_operand" "")
 	(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "")]
-	 UNSPEC_FIST))
+			   UNSPEC_FIST))
    (clobber (match_operand:X87MODEI12 2 "memory_operand" ""))]
   "reload_completed"
-  [(set (match_dup 2) (unspec:X87MODEI12 [(match_dup 1)]
-		       UNSPEC_FIST))
+  [(set (match_dup 2) (unspec:X87MODEI12 [(match_dup 1)] UNSPEC_FIST))
    (set (match_dup 0) (match_dup 2))]
   "")
 
 (define_split
   [(set (match_operand:X87MODEI12 0 "memory_operand" "")
 	(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "")]
-	 UNSPEC_FIST))
+			   UNSPEC_FIST))
    (clobber (match_operand:X87MODEI12 2 "memory_operand" ""))]
   "reload_completed"
-  [(set (match_dup 0) (unspec:X87MODEI12 [(match_dup 1)]
-		       UNSPEC_FIST))]
+  [(set (match_dup 0) (unspec:X87MODEI12 [(match_dup 1)] UNSPEC_FIST))]
   "")
 
 (define_expand "lrintxf<mode>2"
   [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "")
      (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "")]
-      UNSPEC_FIST))]
+		      UNSPEC_FIST))]
   "TARGET_USE_FANCY_MATH_387"
   "")
 
-(define_expand "lrint<mode>di2"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "")
-     (unspec:DI [(match_operand:SSEMODEF 1 "register_operand" "")]
-      UNSPEC_FIX_NOTRUNC))]
-  "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH && TARGET_64BIT"
+(define_expand "lrint<SSEMODEF:mode><SSEMODEI24:mode>2"
+  [(set (match_operand:SSEMODEI24 0 "nonimmediate_operand" "")
+     (unspec:SSEMODEI24 [(match_operand:SSEMODEF 1 "register_operand" "")]
+			UNSPEC_FIX_NOTRUNC))]
+  "SSE_FLOAT_MODE_P (<SSEMODEF:MODE>mode) && TARGET_SSE_MATH
+   && ((<SSEMODEI24:MODE>mode != DImode) || TARGET_64BIT)"
   "")
 
-(define_expand "lrint<mode>si2"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "")
-     (unspec:SI [(match_operand:SSEMODEF 1 "register_operand" "")]
-      UNSPEC_FIX_NOTRUNC))]
-  "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH"
-  "")
-
-(define_expand "lround<mode>di2"
-  [(match_operand:DI 0 "nonimmediate_operand" "")
+(define_expand "lround<SSEMODEF:mode><SSEMODEI24:mode>2"
+  [(match_operand:SSEMODEI24 0 "nonimmediate_operand" "")
    (match_operand:SSEMODEF 1 "register_operand" "")]
-  "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH && TARGET_64BIT
-   && !flag_trapping_math && !flag_rounding_math
-   && !optimize_size"
-{
-  ix86_expand_lround (operand0, operand1);
-  DONE;
-})
-
-(define_expand "lround<mode>si2"
-  [(match_operand:SI 0 "nonimmediate_operand" "")
-   (match_operand:SSEMODEF 1 "register_operand" "")]
   "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
+   && ((<SSEMODEI24:MODE>mode != DImode) || TARGET_64BIT)
    && !flag_trapping_math && !flag_rounding_math
    && !optimize_size"
 {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]