| 203 | } |
| 204 | |
| 205 | static bool TestFeature(CPUFeature feature) { |
| 206 | InitCPUIDInfo(); |
| 207 | // clang-format off |
| 208 | switch (feature) { |
| 209 | case ADX: return cpuid->have_adx_; |
| 210 | case AES: return cpuid->have_aes_; |
| 211 | case AVX2: return cpuid->have_avx2_; |
| 212 | case AVX: return cpuid->have_avx_; |
| 213 | case AVX512F: return cpuid->have_avx512f_; |
| 214 | case AVX512CD: return cpuid->have_avx512cd_; |
| 215 | case AVX512PF: return cpuid->have_avx512pf_; |
| 216 | case AVX512ER: return cpuid->have_avx512er_; |
| 217 | case AVX512VL: return cpuid->have_avx512vl_; |
| 218 | case AVX512BW: return cpuid->have_avx512bw_; |
| 219 | case AVX512DQ: return cpuid->have_avx512dq_; |
| 220 | case AVX512VBMI: return cpuid->have_avx512vbmi_; |
| 221 | case AVX512IFMA: return cpuid->have_avx512ifma_; |
| 222 | case AVX512_4VNNIW: return cpuid->have_avx512_4vnniw_; |
| 223 | case AVX512_4FMAPS: return cpuid->have_avx512_4fmaps_; |
| 224 | case BMI1: return cpuid->have_bmi1_; |
| 225 | case BMI2: return cpuid->have_bmi2_; |
| 226 | case CMOV: return cpuid->have_cmov_; |
| 227 | case CMPXCHG16B: return cpuid->have_cmpxchg16b_; |
| 228 | case CMPXCHG8B: return cpuid->have_cmpxchg8b_; |
| 229 | case F16C: return cpuid->have_f16c_; |
| 230 | case FMA: return cpuid->have_fma_; |
| 231 | case MMX: return cpuid->have_mmx_; |
| 232 | case PCLMULQDQ: return cpuid->have_pclmulqdq_; |
| 233 | case POPCNT: return cpuid->have_popcnt_; |
| 234 | case PREFETCHW: return cpuid->have_prefetchw_; |
| 235 | case PREFETCHWT1: return cpuid->have_prefetchwt1_; |
| 236 | case RDRAND: return cpuid->have_rdrand_; |
| 237 | case RDSEED: return cpuid->have_rdseed_; |
| 238 | case SMAP: return cpuid->have_smap_; |
| 239 | case SSE2: return cpuid->have_sse2_; |
| 240 | case SSE3: return cpuid->have_sse3_; |
| 241 | case SSE4_1: return cpuid->have_sse4_1_; |
| 242 | case SSE4_2: return cpuid->have_sse4_2_; |
| 243 | case SSE: return cpuid->have_sse_; |
| 244 | case SSSE3: return cpuid->have_ssse3_; |
| 245 | case HYPERVISOR: return cpuid->have_hypervisor_; |
| 246 | default: |
| 247 | break; |
| 248 | } |
| 249 | // clang-format on |
| 250 | return false; |
| 251 | } |
| 252 | |
| 253 | string vendor_str() const { return vendor_str_; } |
| 254 | int family() const { return family_; } |
nothing calls this directly
no test coverage detected