]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR bootstrap/56656
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 21 Mar 2013 09:31:52 +0000 (09:31 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 21 Mar 2013 09:31:52 +0000 (09:31 +0000)
* configure.ac (HAVE_AS_IX86_INTERUNIT_MOVQ): New test.
* configure: Regenerate.
* config.in: Regenerate.
* config/i386/i386.md (*movdf_internal): Use
HAVE_AS_IX86_INTERUNIT_MOVQ to handle broken assemblers that require
movd instead of movq mnemonic for interunit moves.
(*movdi_internal): Ditto.

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

gcc/ChangeLog
gcc/config.in
gcc/config/i386/i386.md
gcc/configure
gcc/configure.ac

index 0c7ce7a5abfd023a2324950c10ebaf791325635b..bdbe7671a77869cf4d2464c81892669ccf9cf5f9 100644 (file)
@@ -1,3 +1,14 @@
+2013-03-21  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR bootstrap/56656
+       * configure.ac (HAVE_AS_IX86_INTERUNIT_MOVQ): New test.
+       * configure: Regenerate.
+       * config.in: Regenerate.
+       * config/i386/i386.md (*movdf_internal): Use
+       HAVE_AS_IX86_INTERUNIT_MOVQ to handle broken assemblers that require
+       movd instead of movq mnemonic for interunit moves.
+       (*movdi_internal): Ditto.
+
 2013-03-21   Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
 
        * config/aarch64/aarch64-simd.md (simd_fabd): New Attribute.
index f1ab30d0cf98e683eeebd3b991aa6481bb46add4..223ce935d1e4c2f99cf479d18b6eb722e56fb210 100644 (file)
 #endif
 
 
+/* Define if your assembler supports interunit movq mnemonic. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_IX86_INTERUNIT_MOVQ
+#endif
+
+
 /* Define if your assembler supports the .quad directive. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AS_IX86_QUAD
index 2a2708ccaae1e023a7d12a6627cec848a40bcf77..d622346fe6f9cbc4264ac0b74c77dc83c6d75111 100644 (file)
       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]))
        return "movd\t{%1, %0|%0, %1}";
+#endif
       return "movq\t{%1, %0|%0, %1}";
 
     case TYPE_SSELOG1:
       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]))
            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}";
       return "pxor\t%0, %0";
 
     case TYPE_MMXMOV:
-      if (get_attr_mode (insn) == MODE_DI)
-       return "movq\t{%1, %0|%0, %1}";
-      return "movd\t{%1, %0|%0, %1}";
+      switch (get_attr_mode (insn))
+       {
+       case MODE_DI:
+         return "movq\t{%1, %0|%0, %1}";
+       case MODE_SI:
+         return "movd\t{%1, %0|%0, %1}";
+
+       default:
+         gcc_unreachable ();
+       }
 
     case TYPE_LEA:
       return "lea{l}\t{%E1, %0|%0, %E1}";
          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]))
            return "%vmovd\t{%1, %0|%0, %1}";
+#endif
          return "%vmovq\t{%1, %0|%0, %1}";
 
        default:
        }
 
     case TYPE_MMXMOV:
-      if (get_attr_mode (insn) == MODE_DI)
-       return "movq\t{%1, %0|%0, %1}";
-      return "movd\t{%1, %0|%0, %1}";
+      switch (get_attr_mode (insn))
+       {
+       case MODE_DI:
+         return "movq\t{%1, %0|%0, %1}";
+       case MODE_SI:
+         return "movd\t{%1, %0|%0, %1}";
+
+       default:
+         gcc_unreachable ();
+       }
 
     default:
       gcc_unreachable ();
index e0f323013c687e16f25cd686408a355137b4a3b3..69d99af62a615912de7efd1a7f5700f8d17e8c4d 100755 (executable)
@@ -24642,6 +24642,39 @@ if test $gcc_cv_as_ix86_sahf = yes; then
 
 $as_echo "#define HAVE_AS_IX86_SAHF 1" >>confdefs.h
 
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for interunit movq mnemonic" >&5
+$as_echo_n "checking assembler for interunit movq mnemonic... " >&6; }
+if test "${gcc_cv_as_ix86_interunit_movq+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_ix86_interunit_movq=no
+  if test x$gcc_cv_as != x; then
+    $as_echo '.code64
+       movq %mm0, %rax
+       movq %rax, %xmm0' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+       gcc_cv_as_ix86_interunit_movq=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_interunit_movq" >&5
+$as_echo "$gcc_cv_as_ix86_interunit_movq" >&6; }
+if test $gcc_cv_as_ix86_interunit_movq = yes; then
+
+$as_echo "#define HAVE_AS_IX86_INTERUNIT_MOVQ 1" >>confdefs.h
+
 fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for hle prefixes" >&5
index f783b61510dfaadc2d7ff9ac4d723a40f560f47d..53cea1d5f9ee313619bae09f170810f9428989cb 100644 (file)
@@ -3723,6 +3723,14 @@ foo:     nop
       [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
         [Define if your assembler supports the sahf mnemonic in 64bit mode.])])
 
+    gcc_GAS_CHECK_FEATURE([interunit movq mnemonic],
+      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.])])
+
     gcc_GAS_CHECK_FEATURE([hle prefixes],
       gcc_cv_as_ix86_hle,,,
       [lock xacquire cmpxchg %esi, (%ecx)],,