Commit d0b50387 by Jakub Jelinek Committed by Jakub Jelinek

re PR driver/60233 (AVX instructions emitted with -march=native on host without AVX support)

	PR driver/60233
	* config/i386/driver-i386.c (host_detect_local_cpu): If
	YMM state is not saved by the OS, also clear has_f16c.  Move
	CPUID 0x80000001 handling before YMM state saving checking.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>

From-SVN: r207833
parent c4cd7435
2014-02-18 Jakub Jelinek <jakub@redhat.com>
Uros Bizjak <ubizjak@gmail.com>
PR driver/60233
* config/i386/driver-i386.c (host_detect_local_cpu): If
YMM state is not saved by the OS, also clear has_f16c. Move
CPUID 0x80000001 handling before YMM state saving checking.
2014-02-18 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/58960
......
......@@ -495,6 +495,28 @@ const char *host_detect_local_cpu (int argc, const char **argv)
has_xsaveopt = eax & bit_XSAVEOPT;
}
/* Check cpuid level of extended features. */
__cpuid (0x80000000, ext_level, ebx, ecx, edx);
if (ext_level > 0x80000000)
{
__cpuid (0x80000001, eax, ebx, ecx, edx);
has_lahf_lm = ecx & bit_LAHF_LM;
has_sse4a = ecx & bit_SSE4a;
has_abm = ecx & bit_ABM;
has_lwp = ecx & bit_LWP;
has_fma4 = ecx & bit_FMA4;
has_xop = ecx & bit_XOP;
has_tbm = ecx & bit_TBM;
has_lzcnt = ecx & bit_LZCNT;
has_prfchw = ecx & bit_PRFCHW;
has_longmode = edx & bit_LM;
has_3dnowp = edx & bit_3DNOWP;
has_3dnow = edx & bit_3DNOW;
}
/* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv. */
#define XCR_XFEATURE_ENABLED_MASK 0x0
#define XSTATE_FP 0x1
......@@ -513,33 +535,12 @@ const char *host_detect_local_cpu (int argc, const char **argv)
has_avx2 = 0;
has_fma = 0;
has_fma4 = 0;
has_f16c = 0;
has_xop = 0;
has_xsave = 0;
has_xsaveopt = 0;
}
/* Check cpuid level of extended features. */
__cpuid (0x80000000, ext_level, ebx, ecx, edx);
if (ext_level > 0x80000000)
{
__cpuid (0x80000001, eax, ebx, ecx, edx);
has_lahf_lm = ecx & bit_LAHF_LM;
has_sse4a = ecx & bit_SSE4a;
has_abm = ecx & bit_ABM;
has_lwp = ecx & bit_LWP;
has_fma4 = ecx & bit_FMA4;
has_xop = ecx & bit_XOP;
has_tbm = ecx & bit_TBM;
has_lzcnt = ecx & bit_LZCNT;
has_prfchw = ecx & bit_PRFCHW;
has_longmode = edx & bit_LM;
has_3dnowp = edx & bit_3DNOWP;
has_3dnow = edx & bit_3DNOW;
}
if (!arch)
{
if (vendor == signature_AMD_ebx
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment