summaryrefslogtreecommitdiff
path: root/src/common/x64/cpu_detect.h
diff options
context:
space:
mode:
authorWunkolo <Wunkolo@gmail.com>2022-03-09 18:11:46 -0800
committerWunkolo <Wunkolo@gmail.com>2022-03-11 10:27:00 -0800
commitd248c1203ea15992e6ca3a087a02fac76490deba (patch)
tree1a7900363e7ea6672f2a07b8fe077e2fb0c479e8 /src/common/x64/cpu_detect.h
parent29a7a61806002bc1f8c9bcf0f84689f137cd41c0 (diff)
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 {
bool ssse3 : 1;
bool sse4_1 : 1;
bool sse4_2 : 1;
- bool lzcnt : 1;
+
bool avx : 1;
+ bool avx_vnni : 1;
bool avx2 : 1;
- bool avx512 : 1;
+ bool avx512f : 1;
+ bool avx512dq : 1;
+ bool avx512cd : 1;
+ bool avx512bw : 1;
+ bool avx512vl : 1;
+ bool avx512vbmi : 1;
+ bool avx512bitalg : 1;
+
+ bool aes : 1;
bool bmi1 : 1;
bool bmi2 : 1;
+ bool f16c : 1;
bool fma : 1;
bool fma4 : 1;
- bool aes : 1;
+ bool gfni : 1;
bool invariant_tsc : 1;
+ bool lzcnt : 1;
+ bool movbe : 1;
+ bool pclmulqdq : 1;
+ bool popcnt : 1;
+ bool sha : 1;
};
/**