Hello!

... so it can be used in insn output templates.

2013-11-01  Uros Bizjak  <ubiz...@gmail.com>

    * configure.ac (HAVE_AS_IX86_INTERUNIT_MOVQ): Always define as 0/1.
    * configure: Regenerate.
    * config/i386/i386.md (*movdi_internal): Change
    HAVE_AS_IX86_INTERUNIT_MOVQ to runtime check.
    (*movdf_internal): Ditto.
    * config/i386/mmx.md (*mov<mode>_internal): Ditto.
    * config/i386/sse.md (vec_concatv2di): Output interunit movq
    for HAVE_AS_IX86_INTERUNIT_MOVQ targets.

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

Uros.
Index: config/i386/i386.md
===================================================================
--- config/i386/i386.md (revision 204286)
+++ config/i386/i386.md (working copy)
@@ -2007,11 +2007,10 @@
       return "pxor\t%0, %0";
 
     case TYPE_MMXMOV:
-#ifndef HAVE_AS_IX86_INTERUNIT_MOVQ
       /* Handle broken assemblers that require movd instead of movq.  */
-      if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
+      if (!HAVE_AS_IX86_INTERUNIT_MOVQ
+         && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
        return "movd\t{%1, %0|%0, %1}";
-#endif
       return "movq\t{%1, %0|%0, %1}";
 
     case TYPE_SSELOG1:
@@ -2024,11 +2023,10 @@
       switch (get_attr_mode (insn))
        {
        case MODE_DI:
-#ifndef HAVE_AS_IX86_INTERUNIT_MOVQ
          /* Handle broken assemblers that require movd instead of movq.  */
-         if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
+         if (!HAVE_AS_IX86_INTERUNIT_MOVQ
+             && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
            return "%vmovd\t{%1, %0|%0, %1}";
-#endif
          return "%vmovq\t{%1, %0|%0, %1}";
        case MODE_TI:
          return "%vmovdqa\t{%1, %0|%0, %1}";
@@ -2944,12 +2942,11 @@
          return "movlpd\t{%1, %0|%0, %1}";
 
        case MODE_DI:
-#ifndef HAVE_AS_IX86_INTERUNIT_MOVQ
          /* Handle broken assemblers that require movd instead of movq.  */
-         if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
+         if (!HAVE_AS_IX86_INTERUNIT_MOVQ
+             && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
            return "%vmovd\t{%1, %0|%0, %1}";
-#endif
-         return "%vmovq\t{%1, %0|%0, %1}";
+         return "%vmovq\t{%1, %0|%0, %1}";
 
        default:
          gcc_unreachable ();
Index: config/i386/mmx.md
===================================================================
--- config/i386/mmx.md  (revision 204286)
+++ config/i386/mmx.md  (working copy)
@@ -99,11 +99,10 @@
       return "pxor\t%0, %0";
 
     case TYPE_MMXMOV:
-#ifndef HAVE_AS_IX86_INTERUNIT_MOVQ
       /* Handle broken assemblers that require movd instead of movq.  */
-      if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
+      if (!HAVE_AS_IX86_INTERUNIT_MOVQ
+         && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
        return "movd\t{%1, %0|%0, %1}";
-#endif
       return "movq\t{%1, %0|%0, %1}";
 
     case TYPE_SSECVT:
@@ -119,15 +118,13 @@
       switch (get_attr_mode (insn))
        {
        case MODE_DI:
-#ifndef HAVE_AS_IX86_INTERUNIT_MOVQ
          /* Handle broken assemblers that require movd instead of movq.  */
-         if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
+         if (!HAVE_AS_IX86_INTERUNIT_MOVQ
+             && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
            return "%vmovd\t{%1, %0|%0, %1}";
-#endif
          return "%vmovq\t{%1, %0|%0, %1}";
        case MODE_TI:
          return "%vmovdqa\t{%1, %0|%0, %1}";
-
        case MODE_XI:
          return "vmovdqa64\t{%g1, %g0|%g0, %g1}";
 
Index: config/i386/sse.md
===================================================================
--- config/i386/sse.md  (revision 204286)
+++ config/i386/sse.md  (working copy)
@@ -9489,7 +9489,7 @@
   "@
    pinsrq\t{$1, %2, %0|%0, %2, 1}
    vpinsrq\t{$1, %2, %1, %0|%0, %1, %2, 1}
-   %vmovd\t{%1, %0|%0, %1}
+   * return HAVE_AS_IX86_INTERUNIT_MOVQ ? \"%vmovq\t{%1, %0|%0, %1}\" : 
\"%vmovd\t{%1, %0|%0, %1}\";
    %vmovq\t{%1, %0|%0, %1}
    movq2dq\t{%1, %0|%0, %1}
    punpcklqdq\t{%2, %0|%0, %2}
Index: configure.ac
===================================================================
--- configure.ac        (revision 204286)
+++ configure.ac        (working copy)
@@ -3754,9 +3754,10 @@
       gcc_cv_as_ix86_interunit_movq,,,
       [.code64
        movq %mm0, %rax
-       movq %rax, %xmm0],,
-      [AC_DEFINE(HAVE_AS_IX86_INTERUNIT_MOVQ, 1,
-        [Define if your assembler supports interunit movq mnemonic.])])
+       movq %rax, %xmm0])
+    AC_DEFINE_UNQUOTED(HAVE_AS_IX86_INTERUNIT_MOVQ,
+      [`if test $gcc_cv_as_ix86_interunit_movq = yes; then echo 1; else echo 
0; fi`],
+      [Define if your assembler supports interunit movq mnemonic.])
 
     gcc_GAS_CHECK_FEATURE([hle prefixes],
       gcc_cv_as_ix86_hle,,,

Reply via email to