diff --git a/core/sys/info/cpu_intel.odin b/core/sys/info/cpu_intel.odin index 8cd723203..e39dbc1a6 100644 --- a/core/sys/info/cpu_intel.odin +++ b/core/sys/info/cpu_intel.odin @@ -74,8 +74,15 @@ init_cpu_features :: proc "c" () { return } + // In certain rare cases (reason unknown), XGETBV generates an + // illegal instruction, even if OSXSAVE is set per CPUID. + // + // When Chrome ran into this problem, the problem went away + // after they started checking both OSXSAVE and XSAVE. + // + // See: crbug.com/375968 os_supports_avx := false - if .os_xsave in set { + if .os_xsave in set && is_set(26, ecx1) { eax, _ := xgetbv(0) os_supports_avx = is_set(1, eax) && is_set(2, eax) }