GNU Radio's DVBS2RX Package
cpuinfo_x86.h
Go to the documentation of this file.
1// Copyright 2017 Google LLC
2// Copyright 2020 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#ifndef CPU_FEATURES_INCLUDE_CPUINFO_X86_H_
17#define CPU_FEATURES_INCLUDE_CPUINFO_X86_H_
18
20#include "cpu_features_macros.h"
21
23
24// CPUID Vendors
25#define CPU_FEATURES_VENDOR_GENUINE_INTEL "GenuineIntel"
26#define CPU_FEATURES_VENDOR_AUTHENTIC_AMD "AuthenticAMD"
27#define CPU_FEATURES_VENDOR_HYGON_GENUINE "HygonGenuine"
28
29// See https://en.wikipedia.org/wiki/CPUID for a list of x86 cpu features.
30// The field names are based on the short name provided in the wikipedia tables.
31typedef struct {
32 int fpu : 1;
33 int tsc : 1;
34 int cx8 : 1;
35 int clfsh : 1;
36 int mmx : 1;
37 int aes : 1;
38 int erms : 1;
39 int f16c : 1;
40 int fma4 : 1;
41 int fma3 : 1;
42 int vaes : 1;
43 int vpclmulqdq : 1;
44 int bmi1 : 1;
45 int hle : 1;
46 int bmi2 : 1;
47 int rtm : 1;
48 int rdseed : 1;
49 int clflushopt : 1;
50 int clwb : 1;
51
52 int sse : 1;
53 int sse2 : 1;
54 int sse3 : 1;
55 int ssse3 : 1;
56 int sse4_1 : 1;
57 int sse4_2 : 1;
58 int sse4a : 1;
59
60 int avx : 1;
61 int avx2 : 1;
62
63 int avx512f : 1;
64 int avx512cd : 1;
65 int avx512er : 1;
66 int avx512pf : 1;
67 int avx512bw : 1;
68 int avx512dq : 1;
69 int avx512vl : 1;
70 int avx512ifma : 1;
71 int avx512vbmi : 1;
72 int avx512vbmi2 : 1;
73 int avx512vnni : 1;
74 int avx512bitalg : 1;
80 int avx512_bf16 : 1;
82 int amx_bf16 : 1;
83 int amx_tile : 1;
84 int amx_int8 : 1;
85
86 int pclmulqdq : 1;
87 int smx : 1;
88 int sgx : 1;
89 int cx16 : 1; // aka. CMPXCHG16B
90 int sha : 1;
91 int popcnt : 1;
92 int movbe : 1;
93 int rdrnd : 1;
94
95 int dca : 1;
96 int ss : 1;
97 int adx : 1;
98 // Make sure to update X86FeaturesEnum below if you add a field here.
100
101typedef struct {
104 int model;
106 char vendor[13]; // 0 terminated string
107} X86Info;
108
109// Calls cpuid and returns an initialized X86info.
111
112// Returns cache hierarchy informations.
113// Can call cpuid multiple times.
114// Only works on Intel CPU at the moment.
116
117typedef enum {
119 INTEL_80486, // 80486
120 INTEL_P5, // P5
121 INTEL_LAKEMONT, // LAKEMONT
122 INTEL_CORE, // CORE
123 INTEL_PNR, // PENRYN
124 INTEL_NHM, // NEHALEM
125 INTEL_ATOM_BNL, // BONNELL
126 INTEL_WSM, // WESTMERE
127 INTEL_SNB, // SANDYBRIDGE
128 INTEL_IVB, // IVYBRIDGE
129 INTEL_ATOM_SMT, // SILVERMONT
130 INTEL_HSW, // HASWELL
131 INTEL_BDW, // BROADWELL
132 INTEL_SKL, // SKYLAKE
133 INTEL_ATOM_GMT, // GOLDMONT
134 INTEL_KBL, // KABY LAKE
135 INTEL_CFL, // COFFEE LAKE
136 INTEL_WHL, // WHISKEY LAKE
137 INTEL_CNL, // CANNON LAKE
138 INTEL_ICL, // ICE LAKE
139 INTEL_TGL, // TIGER LAKE
140 INTEL_SPR, // SAPPHIRE RAPIDS
141 INTEL_ADL, // ALDER LAKE
142 INTEL_RCL, // ROCKET LAKE
143 INTEL_KNIGHTS_M, // KNIGHTS MILL
144 INTEL_KNIGHTS_L, // KNIGHTS LANDING
145 INTEL_KNIGHTS_F, // KNIGHTS FERRY
146 INTEL_KNIGHTS_C, // KNIGHTS CORNER
147 INTEL_NETBURST, // NETBURST
148 AMD_HAMMER, // K8 HAMMER
149 AMD_K10, // K10
150 AMD_K11, // K11
151 AMD_K12, // K12
152 AMD_BOBCAT, // K14 BOBCAT
153 AMD_PILEDRIVER, // K15 PILEDRIVER
154 AMD_STREAMROLLER, // K15 STREAMROLLER
155 AMD_EXCAVATOR, // K15 EXCAVATOR
156 AMD_BULLDOZER, // K15 BULLDOZER
157 AMD_JAGUAR, // K16 JAGUAR
158 AMD_PUMA, // K16 PUMA
159 AMD_ZEN, // K17 ZEN
160 AMD_ZEN_PLUS, // K17 ZEN+
161 AMD_ZEN2, // K17 ZEN 2
162 AMD_ZEN3, // K19 ZEN 3
165
166// Returns the underlying microarchitecture by looking at X86Info's vendor,
167// family and model.
169
170// Calls cpuid and fills the brand_string.
171// - brand_string *must* be of size 49 (beware of array decaying).
172// - brand_string will be zero terminated.
173void FillX86BrandString(char brand_string[49]);
174
175////////////////////////////////////////////////////////////////////////////////
176// Introspection functions
177
178typedef enum {
242
244
246
248
250
251#if !defined(CPU_FEATURES_ARCH_X86)
252#error "Including cpuinfo_x86.h from a non-x86 target."
253#endif
254
255#endif // CPU_FEATURES_INCLUDE_CPUINFO_X86_H_
#define CPU_FEATURES_START_CPP_NAMESPACE
Definition cpu_features_macros.h:127
#define CPU_FEATURES_END_CPP_NAMESPACE
Definition cpu_features_macros.h:128
X86Microarchitecture
Definition cpuinfo_x86.h:117
@ INTEL_HSW
Definition cpuinfo_x86.h:130
@ INTEL_KNIGHTS_C
Definition cpuinfo_x86.h:146
@ INTEL_CFL
Definition cpuinfo_x86.h:135
@ INTEL_SKL
Definition cpuinfo_x86.h:132
@ INTEL_PNR
Definition cpuinfo_x86.h:123
@ AMD_ZEN2
Definition cpuinfo_x86.h:161
@ INTEL_KBL
Definition cpuinfo_x86.h:134
@ INTEL_RCL
Definition cpuinfo_x86.h:142
@ INTEL_SNB
Definition cpuinfo_x86.h:127
@ AMD_K11
Definition cpuinfo_x86.h:150
@ INTEL_ICL
Definition cpuinfo_x86.h:138
@ AMD_JAGUAR
Definition cpuinfo_x86.h:157
@ INTEL_ATOM_GMT
Definition cpuinfo_x86.h:133
@ INTEL_KNIGHTS_L
Definition cpuinfo_x86.h:144
@ INTEL_ATOM_SMT
Definition cpuinfo_x86.h:129
@ AMD_K10
Definition cpuinfo_x86.h:149
@ INTEL_KNIGHTS_F
Definition cpuinfo_x86.h:145
@ INTEL_WHL
Definition cpuinfo_x86.h:136
@ X86_MICROARCHITECTURE_LAST_
Definition cpuinfo_x86.h:163
@ INTEL_LAKEMONT
Definition cpuinfo_x86.h:121
@ INTEL_P5
Definition cpuinfo_x86.h:120
@ INTEL_CNL
Definition cpuinfo_x86.h:137
@ AMD_K12
Definition cpuinfo_x86.h:151
@ AMD_HAMMER
Definition cpuinfo_x86.h:148
@ INTEL_WSM
Definition cpuinfo_x86.h:126
@ AMD_STREAMROLLER
Definition cpuinfo_x86.h:154
@ INTEL_NHM
Definition cpuinfo_x86.h:124
@ AMD_BOBCAT
Definition cpuinfo_x86.h:152
@ INTEL_ATOM_BNL
Definition cpuinfo_x86.h:125
@ INTEL_BDW
Definition cpuinfo_x86.h:131
@ INTEL_IVB
Definition cpuinfo_x86.h:128
@ INTEL_SPR
Definition cpuinfo_x86.h:140
@ AMD_EXCAVATOR
Definition cpuinfo_x86.h:155
@ INTEL_CORE
Definition cpuinfo_x86.h:122
@ INTEL_NETBURST
Definition cpuinfo_x86.h:147
@ AMD_PILEDRIVER
Definition cpuinfo_x86.h:153
@ X86_UNKNOWN
Definition cpuinfo_x86.h:118
@ AMD_ZEN3
Definition cpuinfo_x86.h:162
@ INTEL_ADL
Definition cpuinfo_x86.h:141
@ AMD_ZEN_PLUS
Definition cpuinfo_x86.h:160
@ INTEL_TGL
Definition cpuinfo_x86.h:139
@ AMD_PUMA
Definition cpuinfo_x86.h:158
@ INTEL_KNIGHTS_M
Definition cpuinfo_x86.h:143
@ AMD_ZEN
Definition cpuinfo_x86.h:159
@ AMD_BULLDOZER
Definition cpuinfo_x86.h:156
@ INTEL_80486
Definition cpuinfo_x86.h:119
void FillX86BrandString(char brand_string[49])
const char * GetX86FeaturesEnumName(X86FeaturesEnum)
const char * GetX86MicroarchitectureName(X86Microarchitecture)
int GetX86FeaturesEnumValue(const X86Features *features, X86FeaturesEnum value)
X86Microarchitecture GetX86Microarchitecture(const X86Info *info)
CacheInfo GetX86CacheInfo(void)
X86Info GetX86Info(void)
X86FeaturesEnum
Definition cpuinfo_x86.h:178
@ X86_CLWB
Definition cpuinfo_x86.h:197
@ X86_FPU
Definition cpuinfo_x86.h:179
@ X86_RDRND
Definition cpuinfo_x86.h:236
@ X86_AVX512VNNI
Definition cpuinfo_x86.h:217
@ X86_AVX512VBMI
Definition cpuinfo_x86.h:215
@ X86_AVX512PF
Definition cpuinfo_x86.h:210
@ X86_SSE4A
Definition cpuinfo_x86.h:204
@ X86_AVX512_4FMAPS
Definition cpuinfo_x86.h:223
@ X86_CX16
Definition cpuinfo_x86.h:232
@ X86_VPCLMULQDQ
Definition cpuinfo_x86.h:190
@ X86_AVX512IFMA
Definition cpuinfo_x86.h:214
@ X86_AVX512_SECOND_FMA
Definition cpuinfo_x86.h:222
@ X86_BMI1
Definition cpuinfo_x86.h:191
@ X86_SGX
Definition cpuinfo_x86.h:231
@ X86_PCLMULQDQ
Definition cpuinfo_x86.h:229
@ X86_ERMS
Definition cpuinfo_x86.h:185
@ X86_SS
Definition cpuinfo_x86.h:238
@ X86_AVX2
Definition cpuinfo_x86.h:206
@ X86_AVX512VL
Definition cpuinfo_x86.h:213
@ X86_SSSE3
Definition cpuinfo_x86.h:201
@ X86_CX8
Definition cpuinfo_x86.h:181
@ X86_SHA
Definition cpuinfo_x86.h:233
@ X86_AVX512VBMI2
Definition cpuinfo_x86.h:216
@ X86_AVX512ER
Definition cpuinfo_x86.h:209
@ X86_AVX512BITALG
Definition cpuinfo_x86.h:218
@ X86_RDSEED
Definition cpuinfo_x86.h:195
@ X86_BMI2
Definition cpuinfo_x86.h:193
@ X86_SMX
Definition cpuinfo_x86.h:230
@ X86_F16C
Definition cpuinfo_x86.h:186
@ X86_AVX512_VP2INTERSECT
Definition cpuinfo_x86.h:225
@ X86_AVX512BW
Definition cpuinfo_x86.h:211
@ X86_POPCNT
Definition cpuinfo_x86.h:234
@ X86_FMA3
Definition cpuinfo_x86.h:188
@ X86_AES
Definition cpuinfo_x86.h:184
@ X86_MOVBE
Definition cpuinfo_x86.h:235
@ X86_AVX512VPOPCNTDQ
Definition cpuinfo_x86.h:219
@ X86_SSE4_2
Definition cpuinfo_x86.h:203
@ X86_MMX
Definition cpuinfo_x86.h:183
@ X86_DCA
Definition cpuinfo_x86.h:237
@ X86_VAES
Definition cpuinfo_x86.h:189
@ X86_AVX
Definition cpuinfo_x86.h:205
@ X86_AVX512_4VBMI2
Definition cpuinfo_x86.h:221
@ X86_SSE4_1
Definition cpuinfo_x86.h:202
@ X86_FMA4
Definition cpuinfo_x86.h:187
@ X86_SSE2
Definition cpuinfo_x86.h:199
@ X86_SSE3
Definition cpuinfo_x86.h:200
@ X86_LAST_
Definition cpuinfo_x86.h:240
@ X86_AVX512F
Definition cpuinfo_x86.h:207
@ X86_AMX_TILE
Definition cpuinfo_x86.h:227
@ X86_TSC
Definition cpuinfo_x86.h:180
@ X86_AVX512DQ
Definition cpuinfo_x86.h:212
@ X86_ADX
Definition cpuinfo_x86.h:239
@ X86_AVX512_BF16
Definition cpuinfo_x86.h:224
@ X86_AMX_INT8
Definition cpuinfo_x86.h:228
@ X86_HLE
Definition cpuinfo_x86.h:192
@ X86_RTM
Definition cpuinfo_x86.h:194
@ X86_CLFLUSHOPT
Definition cpuinfo_x86.h:196
@ X86_CLFSH
Definition cpuinfo_x86.h:182
@ X86_AVX512CD
Definition cpuinfo_x86.h:208
@ X86_AMX_BF16
Definition cpuinfo_x86.h:226
@ X86_AVX512_4VNNIW
Definition cpuinfo_x86.h:220
@ X86_SSE
Definition cpuinfo_x86.h:198
Definition cpu_features_cache_info.h:47
Definition cpuinfo_x86.h:31
int avx512_vp2intersect
Definition cpuinfo_x86.h:81
int pclmulqdq
Definition cpuinfo_x86.h:86
int ss
Definition cpuinfo_x86.h:96
int sse2
Definition cpuinfo_x86.h:53
int avx512ifma
Definition cpuinfo_x86.h:70
int avx512dq
Definition cpuinfo_x86.h:68
int avx512vbmi2
Definition cpuinfo_x86.h:72
int avx2
Definition cpuinfo_x86.h:61
int vaes
Definition cpuinfo_x86.h:42
int avx512_4vnniw
Definition cpuinfo_x86.h:76
int clwb
Definition cpuinfo_x86.h:50
int rdseed
Definition cpuinfo_x86.h:48
int bmi1
Definition cpuinfo_x86.h:44
int sse
Definition cpuinfo_x86.h:52
int adx
Definition cpuinfo_x86.h:97
int clfsh
Definition cpuinfo_x86.h:35
int vpclmulqdq
Definition cpuinfo_x86.h:43
int ssse3
Definition cpuinfo_x86.h:55
int avx512vpopcntdq
Definition cpuinfo_x86.h:75
int popcnt
Definition cpuinfo_x86.h:91
int aes
Definition cpuinfo_x86.h:37
int avx512_bf16
Definition cpuinfo_x86.h:80
int movbe
Definition cpuinfo_x86.h:92
int avx512bw
Definition cpuinfo_x86.h:67
int cx16
Definition cpuinfo_x86.h:89
int mmx
Definition cpuinfo_x86.h:36
int sse4_2
Definition cpuinfo_x86.h:57
int avx
Definition cpuinfo_x86.h:60
int bmi2
Definition cpuinfo_x86.h:46
int avx512_second_fma
Definition cpuinfo_x86.h:78
int sse4a
Definition cpuinfo_x86.h:58
int amx_int8
Definition cpuinfo_x86.h:84
int amx_bf16
Definition cpuinfo_x86.h:82
int fma4
Definition cpuinfo_x86.h:40
int amx_tile
Definition cpuinfo_x86.h:83
int rtm
Definition cpuinfo_x86.h:47
int avx512_4vbmi2
Definition cpuinfo_x86.h:77
int sse3
Definition cpuinfo_x86.h:54
int rdrnd
Definition cpuinfo_x86.h:93
int avx512er
Definition cpuinfo_x86.h:65
int dca
Definition cpuinfo_x86.h:95
int avx512f
Definition cpuinfo_x86.h:63
int avx512pf
Definition cpuinfo_x86.h:66
int smx
Definition cpuinfo_x86.h:87
int avx512vnni
Definition cpuinfo_x86.h:73
int clflushopt
Definition cpuinfo_x86.h:49
int fma3
Definition cpuinfo_x86.h:41
int sse4_1
Definition cpuinfo_x86.h:56
int cx8
Definition cpuinfo_x86.h:34
int erms
Definition cpuinfo_x86.h:38
int fpu
Definition cpuinfo_x86.h:32
int tsc
Definition cpuinfo_x86.h:33
int avx512_4fmaps
Definition cpuinfo_x86.h:79
int avx512cd
Definition cpuinfo_x86.h:64
int hle
Definition cpuinfo_x86.h:45
int sha
Definition cpuinfo_x86.h:90
int avx512vbmi
Definition cpuinfo_x86.h:71
int f16c
Definition cpuinfo_x86.h:39
int avx512bitalg
Definition cpuinfo_x86.h:74
int sgx
Definition cpuinfo_x86.h:88
int avx512vl
Definition cpuinfo_x86.h:69
Definition cpuinfo_x86.h:101
int model
Definition cpuinfo_x86.h:104
int family
Definition cpuinfo_x86.h:103
X86Features features
Definition cpuinfo_x86.h:102
int stepping
Definition cpuinfo_x86.h:105