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