| Index: source/cpu_id.cc
|
| diff --git a/source/cpu_id.cc b/source/cpu_id.cc
|
| index 4fb168d740e38a9aac01b3bffcb5058924314a9f..0e5411967ebf5c769af2185d07621a35f152dcfd 100644
|
| --- a/source/cpu_id.cc
|
| +++ b/source/cpu_id.cc
|
| @@ -68,7 +68,7 @@ void CpuId(uint32 info_eax, uint32 info_ecx, uint32* cpu_info) {
|
| if (info_ecx == 0) {
|
| __cpuid((int*)(cpu_info), info_eax);
|
| } else {
|
| - cpu_info[3] = cpu_info[2] = cpu_info[1] = cpu_info[0] = 0;
|
| + cpu_info[3] = cpu_info[2] = cpu_info[1] = cpu_info[0] = 0u;
|
| }
|
| #endif
|
| // GCC version uses inline x86 assembly.
|
| @@ -114,7 +114,6 @@ void CpuId(uint32 eax, uint32 ecx, uint32* cpu_info) {
|
| #if (defined(_M_IX86) || defined(_M_X64) || \
|
| defined(__i386__) || defined(__x86_64__)) && \
|
| !defined(__pnacl__) && !defined(__CLR_VER) && !defined(__native_client__)
|
| -#define HAS_XGETBV
|
| // X86 CPUs have xgetbv to detect OS saves high parts of ymm registers.
|
| int GetXCR0() {
|
| uint32 xcr0 = 0u;
|
| @@ -125,6 +124,9 @@ int GetXCR0() {
|
| #endif // defined(__i386__) || defined(__x86_64__)
|
| return xcr0;
|
| }
|
| +#else
|
| +// xgetbv unavailable to query for OSSave support. Return 0.
|
| +#define GetXCR0() 0
|
| #endif // defined(_M_IX86) || defined(_M_X64) ..
|
| // Return optimization to previous setting.
|
| #if defined(_M_IX86) && (_MSC_VER < 1900)
|
| @@ -218,7 +220,6 @@ static LIBYUV_BOOL TestEnv(const char*) {
|
|
|
| LIBYUV_API SAFEBUFFERS
|
| int InitCpuFlags(void) {
|
| - // TODO(fbarchard): swap kCpuInit logic so 0 means uninitialized.
|
| int cpu_info = 0;
|
| #if !defined(__pnacl__) && !defined(__CLR_VER) && defined(CPU_X86)
|
| uint32 cpu_info0[4] = { 0, 0, 0, 0 };
|
| @@ -236,8 +237,7 @@ int InitCpuFlags(void) {
|
| ((cpu_info1[2] & 0x00100000) ? kCpuHasSSE42 : 0) |
|
| ((cpu_info7[1] & 0x00000200) ? kCpuHasERMS : 0);
|
|
|
| -#ifdef HAS_XGETBV
|
| - // AVX requires CPU has AVX, XSAVE and OSXSave for xgetbv
|
| + // AVX requires OS saves YMM registers.
|
| if (((cpu_info1[2] & 0x1c000000) == 0x1c000000) && // AVX and OSXSave
|
| ((GetXCR0() & 6) == 6)) { // Test OS saves YMM registers
|
| cpu_info |= kCpuHasAVX |
|
| @@ -250,7 +250,6 @@ int InitCpuFlags(void) {
|
| cpu_info |= (cpu_info7[1] & 0x40000000) ? kCpuHasAVX3 : 0;
|
| }
|
| }
|
| -#endif
|
|
|
| // Environment variable overrides for testing.
|
| if (TestEnv("LIBYUV_DISABLE_X86")) {
|
|
|