summaryrefslogtreecommitdiff
path: root/src/common/x64/cpu_detect.h
diff options
context:
space:
mode:
authorGravatar Wunkolo2022-03-09 18:11:46 -0800
committerGravatar Wunkolo2022-03-11 10:27:00 -0800
commitd248c1203ea15992e6ca3a087a02fac76490deba (patch)
tree1a7900363e7ea6672f2a07b8fe077e2fb0c479e8 /src/common/x64/cpu_detect.h
parentcommon/telemetry: Update `AddField` name type to `string_view` (diff)
downloadyuzu-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.h21
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/**