diff options
| author | 2022-03-09 18:11:46 -0800 | |
|---|---|---|
| committer | 2022-03-11 10:27:00 -0800 | |
| commit | d248c1203ea15992e6ca3a087a02fac76490deba (patch) | |
| tree | 1a7900363e7ea6672f2a07b8fe077e2fb0c479e8 /src/common/x64/cpu_detect.h | |
| parent | common/telemetry: Update `AddField` name type to `string_view` (diff) | |
| download | yuzu-d248c1203ea15992e6ca3a087a02fac76490deba.tar.gz yuzu-d248c1203ea15992e6ca3a087a02fac76490deba.tar.xz yuzu-d248c1203ea15992e6ca3a087a02fac76490deba.zip | |
cpu_detect: Add additional x86 flags and telemetry
Adds detection of additional CPU flags to cpu_detect and additions to telemetry output.
This is not exhaustive but guided by features that [dynarmic utilizes](https://github.com/merryhime/dynarmic/blob/bcfe377aaa5138af740e90af5be7a7dff7b62a52/src/dynarmic/backend/x64/host_feature.h#L12-L33) as well as features that are currently utilized but not reported to telemetry(invariant_tsc). This is intended to guide future optimizations.
AVX512 in particular is broken up into its individual subsets and some other processor features such as [sha](https://en.wikipedia.org/wiki/Intel_SHA_extensions) and [gfni](https://en.wikipedia.org/wiki/AVX-512#GFNI) are added to have some forward-facing data-points.
What used to be a single `CPU_Extension_x64_AVX512` telemetry field
is also broken up into individual `CPU_Extension_x64_AVX512{F,VL,CD,...}` fields.
Diffstat (limited to 'src/common/x64/cpu_detect.h')
| -rw-r--r-- | src/common/x64/cpu_detect.h | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/common/x64/cpu_detect.h b/src/common/x64/cpu_detect.h index 3e6d808f3..40c48b132 100644 --- a/src/common/x64/cpu_detect.h +++ b/src/common/x64/cpu_detect.h | |||
| @@ -35,16 +35,31 @@ struct CPUCaps { | |||
| 35 | bool ssse3 : 1; | 35 | bool ssse3 : 1; |
| 36 | bool sse4_1 : 1; | 36 | bool sse4_1 : 1; |
| 37 | bool sse4_2 : 1; | 37 | bool sse4_2 : 1; |
| 38 | bool lzcnt : 1; | 38 | |
| 39 | bool avx : 1; | 39 | bool avx : 1; |
| 40 | bool avx_vnni : 1; | ||
| 40 | bool avx2 : 1; | 41 | bool avx2 : 1; |
| 41 | bool avx512 : 1; | 42 | bool avx512f : 1; |
| 43 | bool avx512dq : 1; | ||
| 44 | bool avx512cd : 1; | ||
| 45 | bool avx512bw : 1; | ||
| 46 | bool avx512vl : 1; | ||
| 47 | bool avx512vbmi : 1; | ||
| 48 | bool avx512bitalg : 1; | ||
| 49 | |||
| 50 | bool aes : 1; | ||
| 42 | bool bmi1 : 1; | 51 | bool bmi1 : 1; |
| 43 | bool bmi2 : 1; | 52 | bool bmi2 : 1; |
| 53 | bool f16c : 1; | ||
| 44 | bool fma : 1; | 54 | bool fma : 1; |
| 45 | bool fma4 : 1; | 55 | bool fma4 : 1; |
| 46 | bool aes : 1; | 56 | bool gfni : 1; |
| 47 | bool invariant_tsc : 1; | 57 | bool invariant_tsc : 1; |
| 58 | bool lzcnt : 1; | ||
| 59 | bool movbe : 1; | ||
| 60 | bool pclmulqdq : 1; | ||
| 61 | bool popcnt : 1; | ||
| 62 | bool sha : 1; | ||
| 48 | }; | 63 | }; |
| 49 | 64 | ||
| 50 | /** | 65 | /** |