libFLAC/cpu.c: Inline *_disable_avx()

Also only print out OS AVX status if AVX is actually enabled.
This commit is contained in:
Julian Calaby 2016-06-27 23:22:20 +10:00 committed by Erik de Castro Lopo
parent eae338e0e6
commit 42c5de6e44

View File

@ -128,24 +128,6 @@ ia32_disable_sse(FLAC__CPUInfo *info)
info->ia32.sse41 = false;
info->ia32.sse42 = false;
}
static void
ia32_disable_avx(FLAC__CPUInfo *info)
{
info->ia32.avx = false;
info->ia32.avx2 = false;
info->ia32.fma = false;
}
#endif
#if defined FLAC__CPU_X86_64
static void
x86_64_disable_avx(FLAC__CPUInfo *info)
{
info->x86.avx = false;
info->x86.avx2 = false;
info->x86.fma = false;
}
#endif
#if defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64
@ -334,16 +316,15 @@ ia32_cpu_info (FLAC__CPUInfo *info)
/*
* now have to check for OS support of AVX instructions
*/
if (FLAC__HAS_X86INTRIN && info->ia32.avx && ia32_osxsave) {
FLAC__uint32 ecr = cpu_xgetbv_x86();
if ((ecr & 0x6) != 0x6)
ia32_disable_avx(info);
dfprintf(stderr, " AVX OS sup . %c\n", info->ia32.avx ? 'Y' : 'n');
if (!FLAC__HAS_X86INTRIN || !info->ia32.avx || !ia32_osxsave || (cpu_xgetbv_x86() & 0x6) != 0x6) {
/* no OS AVX support */
info->ia32.avx = false;
info->ia32.avx2 = false;
info->ia32.fma = false;
}
else /* no OS AVX support */
ia32_disable_avx(info);
if (FLAC__HAS_X86INTRIN && FLAC__AVX_SUPPORTED)
dfprintf(stderr, " AVX OS sup . %c\n", info->ia32.avx ? 'Y' : 'n');
#else
info->use_asm = false;
#endif
@ -396,15 +377,15 @@ x86_64_cpu_info (FLAC__CPUInfo *info)
/*
* now have to check for OS support of AVX instructions
*/
if (info->x86.avx && x86_osxsave) {
FLAC__uint32 ecr = cpu_xgetbv_x86();
if ((ecr & 0x6) != 0x6)
x86_64_disable_avx(info);
dfprintf(stderr, " AVX OS sup . %c\n", info->x86.avx ? 'Y' : 'n');
if (!info->x86.avx || !x86_osxsave || (cpu_xgetbv_x86() & 0x6) != 0x6) {
/* no OS AVX support */
info->x86.avx = false;
info->x86.avx2 = false;
info->x86.fma = false;
}
else /* no OS AVX support */
x86_64_disable_avx(info);
if (FLAC__AVX_SUPPORTED)
dfprintf(stderr, " AVX OS sup . %c\n", info->x86.avx ? 'Y' : 'n');
#endif
}