From e8ed18febaa046a3383a4b960517372a5bc554d1 Mon Sep 17 00:00:00 2001 From: Jonathan Li Date: Wed, 8 Aug 2018 01:19:50 +0100 Subject: [PATCH] common: Use GCC's _xgetbv definition from GCC 8.2 onwards The _xgetbv bug was fixed, so avoid using our own definition (again). --- common/include/x86emitter/x86_intrin.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/include/x86emitter/x86_intrin.h b/common/include/x86emitter/x86_intrin.h index 0031096ddc..78c68f3f3c 100644 --- a/common/include/x86emitter/x86_intrin.h +++ b/common/include/x86emitter/x86_intrin.h @@ -50,7 +50,8 @@ static __inline__ __attribute__((always_inline)) void cpuid(int CPUInfo[], const __cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); } -// _xgetbv on gcc 8 is broken (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85684). +#if defined(__clang__) || __GNUC__ < 8 || (__GNUC__ == 8 && __GNUC_MINOR__ < 2) +// _xgetbv on gcc 8.1 is broken (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85684). // It also isn't present on clang and earlier versions of gcc. static __inline__ __attribute__((always_inline)) unsigned long long xgetbv(unsigned int index) { @@ -60,6 +61,9 @@ static __inline__ __attribute__((always_inline)) unsigned long long xgetbv(unsig : "c"(index)); return ((unsigned long long)edx << 32) | eax; } +#else +#define xgetbv _xgetbv +#endif #endif