[PATCH, i386]: A couple of cleanups.

Uros Bizjak ubizjak@gmail.com
Thu Sep 15 20:40:00 GMT 2011


Hello!

No functional change.

2011-09-15  Uros Bizjak  <ubizjak@gmail.com>

	* config/i386/i386.c (output_fp_compare): Return %v prefixed
	instruction mnemonics for TARGET_AVX.

	* config/i386/i386.md (*movdf_internal_rex64): use cond RTX in
	"type" attribute calculation.
	(*movdf_internal): Ditto.
	(*movsf_internal): Ditto.

Tested on x86_64-pc-linux-gnu {,-m32}, committed to mainline SVN.

Uros.
-------------- next part --------------
Index: i386.md
===================================================================
--- i386.md	(revision 178889)
+++ i386.md	(working copy)
@@ -3028,7 +3030,17 @@
       gcc_unreachable();
     }
 }
-  [(set_attr "type" "fmov,fmov,fmov,imov,imov,imov,multi,sselog1,ssemov,ssemov,ssemov,ssemov,ssemov")
+  [(set (attr "type")
+	(cond [(eq_attr "alternative" "0,1,2")
+		 (const_string "fmov")
+	       (eq_attr "alternative" "3,4,5")
+		 (const_string "imov")
+	       (eq_attr "alternative" "6")
+		 (const_string "multi")
+	       (eq_attr "alternative" "7")
+		 (const_string "sselog1")
+	      ]
+	      (const_string "ssemov")))
    (set (attr "modrm")
      (if_then_else
        (and (eq_attr "alternative" "5") (eq_attr "type" "imov"))
@@ -3158,7 +3170,15 @@
      (if_then_else (eq_attr "alternative" "5,6,7,8")
        (const_string "sse2")
        (const_string "*")))
-   (set_attr "type" "fmov,fmov,fmov,multi,multi,sselog1,ssemov,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov")
+   (set (attr "type")
+	(cond [(eq_attr "alternative" "0,1,2")
+		 (const_string "fmov")
+	       (eq_attr "alternative" "3,4")
+		 (const_string "multi")
+	       (eq_attr "alternative" "5,9")
+		 (const_string "sselog1")
+	      ]
+	      (const_string "ssemov")))
    (set (attr "prefix")
      (if_then_else (eq_attr "alternative" "0,1,2,3,4")
        (const_string "orig")
@@ -3272,7 +3292,17 @@
       gcc_unreachable ();
     }
 }
-  [(set_attr "type" "fmov,fmov,fmov,imov,imov,sselog1,ssemov,ssemov,ssemov,mmxmov,mmxmov,mmxmov,ssemov,ssemov,mmxmov,mmxmov")
+  [(set (attr "type")
+	(cond [(eq_attr "alternative" "0,1,2")
+		 (const_string "fmov")
+	       (eq_attr "alternative" "3,4")
+		 (const_string "multi")
+	       (eq_attr "alternative" "5")
+		 (const_string "sselog1")
+	       (eq_attr "alternative" "9,10,11,14,15")
+		 (const_string "mmxmov")
+	      ]
+	      (const_string "ssemov")))
    (set (attr "prefix")
      (if_then_else (eq_attr "alternative" "5,6,7,8,12,13")
        (const_string "maybe_vex")
Index: i386.c
===================================================================
--- i386.c	(revision 178889)
+++ i386.c	(working copy)
@@ -14900,21 +14900,16 @@ output_fp_compare (rtx insn, rtx *operands, bool e
 
   if (is_sse)
     {
-      static const char ucomiss[] = "vucomiss\t{%1, %0|%0, %1}";
-      static const char ucomisd[] = "vucomisd\t{%1, %0|%0, %1}";
-      static const char comiss[] = "vcomiss\t{%1, %0|%0, %1}";
-      static const char comisd[] = "vcomisd\t{%1, %0|%0, %1}";
-
       if (GET_MODE (operands[0]) == SFmode)
 	if (unordered_p)
-	  return &ucomiss[TARGET_AVX ? 0 : 1];
+	  return "%vucomiss\t{%1, %0|%0, %1}";
 	else
-	  return &comiss[TARGET_AVX ? 0 : 1];
+	  return "%vcomiss\t{%1, %0|%0, %1}";
       else
 	if (unordered_p)
-	  return &ucomisd[TARGET_AVX ? 0 : 1];
+	  return "%vucomisd\t{%1, %0|%0, %1}";
 	else
-	  return &comisd[TARGET_AVX ? 0 : 1];
+	  return "%vcomisd\t{%1, %0|%0, %1}";
     }
 
   gcc_assert (STACK_TOP_P (cmp_op0));


More information about the Gcc-patches mailing list