From d248c1203ea15992e6ca3a087a02fac76490deba Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Wed, 9 Mar 2022 18:11:46 -0800 Subject: 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. --- src/common/x64/cpu_detect.h | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/common/x64/cpu_detect.h') 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; }; /** -- cgit v1.2.3