From: uros Date: Thu, 21 Mar 2013 09:31:52 +0000 (+0000) Subject: PR bootstrap/56656 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9e2820ab23ece243d5250f1ce98b59bbff2e44e4;p=thirdparty%2Fgcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196861 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c7ce7a5abfd..bdbe7671a778 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2013-03-21 Uros Bizjak + + 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 * config/aarch64/aarch64-simd.md (simd_fabd): New Attribute. diff --git a/gcc/config.in b/gcc/config.in index f1ab30d0cf98..223ce935d1e4 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -327,6 +327,12 @@ #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 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 2a2708ccaae1..d622346fe6f9 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1878,9 +1878,11 @@ 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: @@ -1890,9 +1892,11 @@ 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}"; @@ -2043,9 +2047,16 @@ 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}"; @@ -2797,9 +2808,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])) return "%vmovd\t{%1, %0|%0, %1}"; +#endif return "%vmovq\t{%1, %0|%0, %1}"; default: @@ -2952,9 +2965,16 @@ } 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 (); diff --git a/gcc/configure b/gcc/configure index e0f323013c68..69d99af62a61 100755 --- a/gcc/configure +++ b/gcc/configure @@ -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 diff --git a/gcc/configure.ac b/gcc/configure.ac index f783b61510df..53cea1d5f9ee 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -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)],,