diff options
| author | 2016-09-21 11:29:48 -0700 | |
|---|---|---|
| committer | 2016-09-21 11:29:48 -0700 | |
| commit | d5d2ca8058a0f1c00ab7ca9fe2c058ba47546c0a (patch) | |
| tree | 8a22ca73ff838f3f0090b29a548ae81087fc90ed /src/common/x64/cpu_detect.cpp | |
| parent | README: Specify master branch for Travis CI badge (diff) | |
| parent | Fix Travis clang-format check (diff) | |
| download | yuzu-d5d2ca8058a0f1c00ab7ca9fe2c058ba47546c0a.tar.gz yuzu-d5d2ca8058a0f1c00ab7ca9fe2c058ba47546c0a.tar.xz yuzu-d5d2ca8058a0f1c00ab7ca9fe2c058ba47546c0a.zip | |
Merge pull request #2086 from linkmauve/clang-format
Add clang-format as part of our {commit,travis}-time checks
Diffstat (limited to 'src/common/x64/cpu_detect.cpp')
| -rw-r--r-- | src/common/x64/cpu_detect.cpp | 94 |
1 files changed, 56 insertions, 38 deletions
diff --git a/src/common/x64/cpu_detect.cpp b/src/common/x64/cpu_detect.cpp index d9c430c67..6ddf9b70c 100644 --- a/src/common/x64/cpu_detect.cpp +++ b/src/common/x64/cpu_detect.cpp | |||
| @@ -5,9 +5,7 @@ | |||
| 5 | #include <cstring> | 5 | #include <cstring> |
| 6 | #include <string> | 6 | #include <string> |
| 7 | #include <thread> | 7 | #include <thread> |
| 8 | |||
| 9 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| 10 | |||
| 11 | #include "cpu_detect.h" | 9 | #include "cpu_detect.h" |
| 12 | 10 | ||
| 13 | namespace Common { | 11 | namespace Common { |
| @@ -15,8 +13,8 @@ namespace Common { | |||
| 15 | #ifndef _MSC_VER | 13 | #ifndef _MSC_VER |
| 16 | 14 | ||
| 17 | #ifdef __FreeBSD__ | 15 | #ifdef __FreeBSD__ |
| 18 | #include <sys/types.h> | ||
| 19 | #include <machine/cpufunc.h> | 16 | #include <machine/cpufunc.h> |
| 17 | #include <sys/types.h> | ||
| 20 | #endif | 18 | #endif |
| 21 | 19 | ||
| 22 | static inline void __cpuidex(int info[4], int function_id, int subfunction_id) { | 20 | static inline void __cpuidex(int info[4], int function_id, int subfunction_id) { |
| @@ -26,15 +24,9 @@ static inline void __cpuidex(int info[4], int function_id, int subfunction_id) { | |||
| 26 | #else | 24 | #else |
| 27 | info[0] = function_id; // eax | 25 | info[0] = function_id; // eax |
| 28 | info[2] = subfunction_id; // ecx | 26 | info[2] = subfunction_id; // ecx |
| 29 | __asm__( | 27 | __asm__("cpuid" |
| 30 | "cpuid" | 28 | : "=a"(info[0]), "=b"(info[1]), "=c"(info[2]), "=d"(info[3]) |
| 31 | : "=a" (info[0]), | 29 | : "a"(function_id), "c"(subfunction_id)); |
| 32 | "=b" (info[1]), | ||
| 33 | "=c" (info[2]), | ||
| 34 | "=d" (info[3]) | ||
| 35 | : "a" (function_id), | ||
| 36 | "c" (subfunction_id) | ||
| 37 | ); | ||
| 38 | #endif | 30 | #endif |
| 39 | } | 31 | } |
| 40 | 32 | ||
| @@ -88,14 +80,22 @@ static CPUCaps Detect() { | |||
| 88 | if (max_std_fn >= 1) { | 80 | if (max_std_fn >= 1) { |
| 89 | __cpuid(cpu_id, 0x00000001); | 81 | __cpuid(cpu_id, 0x00000001); |
| 90 | 82 | ||
| 91 | if ((cpu_id[3] >> 25) & 1) caps.sse = true; | 83 | if ((cpu_id[3] >> 25) & 1) |
| 92 | if ((cpu_id[3] >> 26) & 1) caps.sse2 = true; | 84 | caps.sse = true; |
| 93 | if ((cpu_id[2]) & 1) caps.sse3 = true; | 85 | if ((cpu_id[3] >> 26) & 1) |
| 94 | if ((cpu_id[2] >> 9) & 1) caps.ssse3 = true; | 86 | caps.sse2 = true; |
| 95 | if ((cpu_id[2] >> 19) & 1) caps.sse4_1 = true; | 87 | if ((cpu_id[2]) & 1) |
| 96 | if ((cpu_id[2] >> 20) & 1) caps.sse4_2 = true; | 88 | caps.sse3 = true; |
| 97 | if ((cpu_id[2] >> 22) & 1) caps.movbe = true; | 89 | if ((cpu_id[2] >> 9) & 1) |
| 98 | if ((cpu_id[2] >> 25) & 1) caps.aes = true; | 90 | caps.ssse3 = true; |
| 91 | if ((cpu_id[2] >> 19) & 1) | ||
| 92 | caps.sse4_1 = true; | ||
| 93 | if ((cpu_id[2] >> 20) & 1) | ||
| 94 | caps.sse4_2 = true; | ||
| 95 | if ((cpu_id[2] >> 22) & 1) | ||
| 96 | caps.movbe = true; | ||
| 97 | if ((cpu_id[2] >> 25) & 1) | ||
| 98 | caps.aes = true; | ||
| 99 | 99 | ||
| 100 | if ((cpu_id[3] >> 24) & 1) { | 100 | if ((cpu_id[3] >> 24) & 1) { |
| 101 | caps.fxsave_fxrstor = true; | 101 | caps.fxsave_fxrstor = true; |
| @@ -140,10 +140,14 @@ static CPUCaps Detect() { | |||
| 140 | if (max_ex_fn >= 0x80000001) { | 140 | if (max_ex_fn >= 0x80000001) { |
| 141 | // Check for more features | 141 | // Check for more features |
| 142 | __cpuid(cpu_id, 0x80000001); | 142 | __cpuid(cpu_id, 0x80000001); |
| 143 | if (cpu_id[2] & 1) caps.lahf_sahf_64 = true; | 143 | if (cpu_id[2] & 1) |
| 144 | if ((cpu_id[2] >> 5) & 1) caps.lzcnt = true; | 144 | caps.lahf_sahf_64 = true; |
| 145 | if ((cpu_id[2] >> 16) & 1) caps.fma4 = true; | 145 | if ((cpu_id[2] >> 5) & 1) |
| 146 | if ((cpu_id[3] >> 29) & 1) caps.long_mode = true; | 146 | caps.lzcnt = true; |
| 147 | if ((cpu_id[2] >> 16) & 1) | ||
| 148 | caps.fma4 = true; | ||
| 149 | if ((cpu_id[3] >> 29) & 1) | ||
| 150 | caps.long_mode = true; | ||
| 147 | } | 151 | } |
| 148 | 152 | ||
| 149 | return caps; | 153 | return caps; |
| @@ -162,24 +166,38 @@ std::string GetCPUCapsString() { | |||
| 162 | sum += caps.brand_string; | 166 | sum += caps.brand_string; |
| 163 | sum += ")"; | 167 | sum += ")"; |
| 164 | 168 | ||
| 165 | if (caps.sse) sum += ", SSE"; | 169 | if (caps.sse) |
| 170 | sum += ", SSE"; | ||
| 166 | if (caps.sse2) { | 171 | if (caps.sse2) { |
| 167 | sum += ", SSE2"; | 172 | sum += ", SSE2"; |
| 168 | if (!caps.flush_to_zero) sum += " (without DAZ)"; | 173 | if (!caps.flush_to_zero) |
| 174 | sum += " (without DAZ)"; | ||
| 169 | } | 175 | } |
| 170 | 176 | ||
| 171 | if (caps.sse3) sum += ", SSE3"; | 177 | if (caps.sse3) |
| 172 | if (caps.ssse3) sum += ", SSSE3"; | 178 | sum += ", SSE3"; |
| 173 | if (caps.sse4_1) sum += ", SSE4.1"; | 179 | if (caps.ssse3) |
| 174 | if (caps.sse4_2) sum += ", SSE4.2"; | 180 | sum += ", SSSE3"; |
| 175 | if (caps.avx) sum += ", AVX"; | 181 | if (caps.sse4_1) |
| 176 | if (caps.avx2) sum += ", AVX2"; | 182 | sum += ", SSE4.1"; |
| 177 | if (caps.bmi1) sum += ", BMI1"; | 183 | if (caps.sse4_2) |
| 178 | if (caps.bmi2) sum += ", BMI2"; | 184 | sum += ", SSE4.2"; |
| 179 | if (caps.fma) sum += ", FMA"; | 185 | if (caps.avx) |
| 180 | if (caps.aes) sum += ", AES"; | 186 | sum += ", AVX"; |
| 181 | if (caps.movbe) sum += ", MOVBE"; | 187 | if (caps.avx2) |
| 182 | if (caps.long_mode) sum += ", 64-bit support"; | 188 | sum += ", AVX2"; |
| 189 | if (caps.bmi1) | ||
| 190 | sum += ", BMI1"; | ||
| 191 | if (caps.bmi2) | ||
| 192 | sum += ", BMI2"; | ||
| 193 | if (caps.fma) | ||
| 194 | sum += ", FMA"; | ||
| 195 | if (caps.aes) | ||
| 196 | sum += ", AES"; | ||
| 197 | if (caps.movbe) | ||
| 198 | sum += ", MOVBE"; | ||
| 199 | if (caps.long_mode) | ||
| 200 | sum += ", 64-bit support"; | ||
| 183 | 201 | ||
| 184 | return sum; | 202 | return sum; |
| 185 | } | 203 | } |