summaryrefslogtreecommitdiff
blob: e90b0df9b6e2902b33834a2849aa7ace89ae163f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
From 171e7f016dc9e132f9faf40a22f0312d45d356a5 Mon Sep 17 00:00:00 2001
From: Jonathan Li <jonathan.li@hotmail.co.uk>
Date: Fri, 11 May 2018 01:42:27 +0100
Subject: [PATCH] common: Work around GCC8 _xgetbv bug

clang and earlier GCC versions do not provide the _xgetbv intrinsic.
GCC8 does, but unfortunately it's broken.
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85684).

Re-use our _xgetbv implementation to avoid the bug, but rename it to
avoid compilation errors as well.
---
 common/include/x86emitter/x86_intrin.h | 7 ++++---
 common/src/x86emitter/cpudetect.cpp    | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

--- a/common/include/intrin_x86.h
+++ b/common/include/intrin_x86.h
@@ -107 +107 @@ static __inline__ __attribute__((always_inline)) void __cpuidex(int CPUInfo[], c
-static __inline__ __attribute__((always_inline)) unsigned long long _xgetbv(unsigned int index)
+static __inline__ __attribute__((always_inline)) unsigned long long _xgetbv_pcsx2(unsigned int index)
--- a/common/src/x86emitter/cpudetect.cpp
+++ b/common/src/x86emitter/cpudetect.cpp
@@ -273 +276 @@ void x86capabilities::Identify()
-		if((_xgetbv(0) & 6) == 6) // XFEATURE_ENABLED_MASK[2:1] = '11b' (XMM state and YMM state are enabled by OS).
+		if((_xgetbv_pcsx2(0) & 6) == 6) // XFEATURE_ENABLED_MASK[2:1] = '11b' (XMM state and YMM state are enabled by OS).