]>
Commit | Line | Data |
---|---|---|
e2e4f560 | 1 | /* Test case for x86 __get_cpu_features interface |
d614a753 | 2 | Copyright (C) 2015-2020 Free Software Foundation, Inc. |
e2e4f560 L |
3 | This file is part of the GNU C Library. |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
16 | License along with the GNU C Library; if not, see | |
5a82c748 | 17 | <https://www.gnu.org/licenses/>. */ |
e2e4f560 L |
18 | |
19 | #include <stdlib.h> | |
c22e4c2a | 20 | #include <stdio.h> |
e2e4f560 | 21 | #include <cpu-features.h> |
c22e4c2a L |
22 | #include <support/check.h> |
23 | ||
24 | #define CHECK_CPU_FEATURE(name) \ | |
25 | { \ | |
26 | if (HAS_CPU_FEATURE (name)) \ | |
27 | printf (" " #name "\n"); \ | |
28 | } | |
29 | ||
30 | #define CHECK_CPU_FEATURE_USABLE(name) \ | |
31 | { \ | |
32 | if (CPU_FEATURE_USABLE(name)) \ | |
33 | printf (" " #name "\n"); \ | |
34 | } | |
35 | ||
36 | static const char * const cpu_kinds[] = | |
37 | { | |
38 | "Unknown", | |
39 | "Intel", | |
40 | "AMD", | |
41 | "Other", | |
42 | }; | |
e2e4f560 L |
43 | |
44 | static int | |
45 | do_test (void) | |
46 | { | |
c22e4c2a L |
47 | const struct cpu_features *cpu_features = __get_cpu_features (); |
48 | ||
49 | switch (cpu_features->basic.kind) | |
50 | { | |
51 | case arch_kind_intel: | |
52 | case arch_kind_amd: | |
53 | case arch_kind_other: | |
54 | printf ("Vendor: %s\n", cpu_kinds[cpu_features->basic.kind]); | |
55 | printf ("Family: 0x%x\n", cpu_features->basic.family); | |
56 | printf ("Model: 0x%x\n", cpu_features->basic.model); | |
57 | printf ("Stepping: 0x%x\n", cpu_features->basic.stepping); | |
58 | break; | |
59 | ||
60 | default: | |
61 | abort (); | |
62 | } | |
63 | ||
64 | #ifdef __SSE2__ | |
65 | TEST_VERIFY_EXIT (HAS_CPU_FEATURE (SSE2)); | |
66 | #endif | |
67 | ||
68 | printf ("CPU features:\n"); | |
69 | CHECK_CPU_FEATURE (SSE3); | |
70 | CHECK_CPU_FEATURE (PCLMULQDQ); | |
71 | CHECK_CPU_FEATURE (DTES64); | |
72 | CHECK_CPU_FEATURE (MONITOR); | |
73 | CHECK_CPU_FEATURE (DS_CPL); | |
74 | CHECK_CPU_FEATURE (VMX); | |
75 | CHECK_CPU_FEATURE (SMX); | |
76 | CHECK_CPU_FEATURE (EST); | |
77 | CHECK_CPU_FEATURE (TM2); | |
78 | CHECK_CPU_FEATURE (SSSE3); | |
79 | CHECK_CPU_FEATURE (CNXT_ID); | |
80 | CHECK_CPU_FEATURE (SDBG); | |
81 | CHECK_CPU_FEATURE (FMA); | |
82 | CHECK_CPU_FEATURE (CMPXCHG16B); | |
83 | CHECK_CPU_FEATURE (XTPRUPDCTRL); | |
84 | CHECK_CPU_FEATURE (PDCM); | |
85 | CHECK_CPU_FEATURE (PCID); | |
86 | CHECK_CPU_FEATURE (DCA); | |
87 | CHECK_CPU_FEATURE (SSE4_1); | |
88 | CHECK_CPU_FEATURE (SSE4_2); | |
89 | CHECK_CPU_FEATURE (X2APIC); | |
90 | CHECK_CPU_FEATURE (MOVBE); | |
91 | CHECK_CPU_FEATURE (POPCNT); | |
92 | CHECK_CPU_FEATURE (TSC_DEADLINE); | |
93 | CHECK_CPU_FEATURE (AES); | |
94 | CHECK_CPU_FEATURE (XSAVE); | |
95 | CHECK_CPU_FEATURE (OSXSAVE); | |
96 | CHECK_CPU_FEATURE (AVX); | |
97 | CHECK_CPU_FEATURE (F16C); | |
98 | CHECK_CPU_FEATURE (RDRAND); | |
99 | CHECK_CPU_FEATURE (FPU); | |
100 | CHECK_CPU_FEATURE (VME); | |
101 | CHECK_CPU_FEATURE (DE); | |
102 | CHECK_CPU_FEATURE (PSE); | |
103 | CHECK_CPU_FEATURE (TSC); | |
104 | CHECK_CPU_FEATURE (MSR); | |
105 | CHECK_CPU_FEATURE (PAE); | |
106 | CHECK_CPU_FEATURE (MCE); | |
107 | CHECK_CPU_FEATURE (CX8); | |
108 | CHECK_CPU_FEATURE (APIC); | |
109 | CHECK_CPU_FEATURE (SEP); | |
110 | CHECK_CPU_FEATURE (MTRR); | |
111 | CHECK_CPU_FEATURE (PGE); | |
112 | CHECK_CPU_FEATURE (MCA); | |
113 | CHECK_CPU_FEATURE (CMOV); | |
114 | CHECK_CPU_FEATURE (PAT); | |
115 | CHECK_CPU_FEATURE (PSE_36); | |
116 | CHECK_CPU_FEATURE (PSN); | |
117 | CHECK_CPU_FEATURE (CLFSH); | |
118 | CHECK_CPU_FEATURE (DS); | |
119 | CHECK_CPU_FEATURE (ACPI); | |
120 | CHECK_CPU_FEATURE (MMX); | |
121 | CHECK_CPU_FEATURE (FXSR); | |
122 | CHECK_CPU_FEATURE (SSE); | |
123 | CHECK_CPU_FEATURE (SSE2); | |
124 | CHECK_CPU_FEATURE (SS); | |
125 | CHECK_CPU_FEATURE (HTT); | |
126 | CHECK_CPU_FEATURE (TM); | |
127 | CHECK_CPU_FEATURE (PBE); | |
128 | CHECK_CPU_FEATURE (FSGSBASE); | |
129 | CHECK_CPU_FEATURE (TSC_ADJUST); | |
130 | CHECK_CPU_FEATURE (SGX); | |
131 | CHECK_CPU_FEATURE (BMI1); | |
132 | CHECK_CPU_FEATURE (HLE); | |
133 | CHECK_CPU_FEATURE (AVX2); | |
134 | CHECK_CPU_FEATURE (SMEP); | |
135 | CHECK_CPU_FEATURE (BMI2); | |
136 | CHECK_CPU_FEATURE (ERMS); | |
137 | CHECK_CPU_FEATURE (INVPCID); | |
138 | CHECK_CPU_FEATURE (RTM); | |
139 | CHECK_CPU_FEATURE (PQM); | |
140 | CHECK_CPU_FEATURE (MPX); | |
141 | CHECK_CPU_FEATURE (PQE); | |
142 | CHECK_CPU_FEATURE (AVX512F); | |
143 | CHECK_CPU_FEATURE (AVX512DQ); | |
144 | CHECK_CPU_FEATURE (RDSEED); | |
145 | CHECK_CPU_FEATURE (ADX); | |
146 | CHECK_CPU_FEATURE (SMAP); | |
147 | CHECK_CPU_FEATURE (AVX512_IFMA); | |
148 | CHECK_CPU_FEATURE (CLFLUSHOPT); | |
149 | CHECK_CPU_FEATURE (CLWB); | |
150 | CHECK_CPU_FEATURE (TRACE); | |
151 | CHECK_CPU_FEATURE (AVX512PF); | |
152 | CHECK_CPU_FEATURE (AVX512ER); | |
153 | CHECK_CPU_FEATURE (AVX512CD); | |
154 | CHECK_CPU_FEATURE (SHA); | |
155 | CHECK_CPU_FEATURE (AVX512BW); | |
156 | CHECK_CPU_FEATURE (AVX512VL); | |
157 | CHECK_CPU_FEATURE (PREFETCHWT1); | |
158 | CHECK_CPU_FEATURE (AVX512_VBMI); | |
159 | CHECK_CPU_FEATURE (UMIP); | |
160 | CHECK_CPU_FEATURE (PKU); | |
161 | CHECK_CPU_FEATURE (OSPKE); | |
162 | CHECK_CPU_FEATURE (WAITPKG); | |
163 | CHECK_CPU_FEATURE (AVX512_VBMI2); | |
164 | CHECK_CPU_FEATURE (SHSTK); | |
165 | CHECK_CPU_FEATURE (GFNI); | |
166 | CHECK_CPU_FEATURE (VAES); | |
167 | CHECK_CPU_FEATURE (VPCLMULQDQ); | |
168 | CHECK_CPU_FEATURE (AVX512_VNNI); | |
169 | CHECK_CPU_FEATURE (AVX512_BITALG); | |
170 | CHECK_CPU_FEATURE (AVX512_VPOPCNTDQ); | |
171 | CHECK_CPU_FEATURE (RDPID); | |
172 | CHECK_CPU_FEATURE (CLDEMOTE); | |
173 | CHECK_CPU_FEATURE (MOVDIRI); | |
174 | CHECK_CPU_FEATURE (MOVDIR64B); | |
175 | CHECK_CPU_FEATURE (SGX_LC); | |
176 | CHECK_CPU_FEATURE (AVX512_4VNNIW); | |
177 | CHECK_CPU_FEATURE (AVX512_4FMAPS); | |
178 | CHECK_CPU_FEATURE (FSRM); | |
179 | CHECK_CPU_FEATURE (PCONFIG); | |
180 | CHECK_CPU_FEATURE (IBT); | |
181 | CHECK_CPU_FEATURE (IBRS_IBPB); | |
182 | CHECK_CPU_FEATURE (STIBP); | |
183 | CHECK_CPU_FEATURE (CAPABILITIES); | |
184 | CHECK_CPU_FEATURE (SSBD); | |
185 | CHECK_CPU_FEATURE (LAHF64_SAHF64); | |
186 | CHECK_CPU_FEATURE (SVM); | |
187 | CHECK_CPU_FEATURE (LZCNT); | |
188 | CHECK_CPU_FEATURE (SSE4A); | |
189 | CHECK_CPU_FEATURE (PREFETCHW); | |
190 | CHECK_CPU_FEATURE (XOP); | |
191 | CHECK_CPU_FEATURE (LWP); | |
192 | CHECK_CPU_FEATURE (FMA4); | |
193 | CHECK_CPU_FEATURE (TBM); | |
194 | CHECK_CPU_FEATURE (SYSCALL_SYSRET); | |
195 | CHECK_CPU_FEATURE (NX); | |
196 | CHECK_CPU_FEATURE (PAGE1GB); | |
197 | CHECK_CPU_FEATURE (RDTSCP); | |
198 | CHECK_CPU_FEATURE (LM); | |
199 | CHECK_CPU_FEATURE (XSAVEOPT); | |
200 | CHECK_CPU_FEATURE (XSAVEC); | |
201 | CHECK_CPU_FEATURE (XGETBV_ECX_1); | |
202 | CHECK_CPU_FEATURE (XSAVES); | |
203 | CHECK_CPU_FEATURE (INVARIANT_TSC); | |
204 | CHECK_CPU_FEATURE (WBNOINVD); | |
205 | ||
206 | printf ("Usable CPU features:\n"); | |
207 | CHECK_CPU_FEATURE_USABLE (SSE3); | |
208 | CHECK_CPU_FEATURE_USABLE (PCLMULQDQ); | |
209 | CHECK_CPU_FEATURE_USABLE (SSSE3); | |
210 | CHECK_CPU_FEATURE_USABLE (FMA); | |
211 | CHECK_CPU_FEATURE_USABLE (CMPXCHG16B); | |
212 | CHECK_CPU_FEATURE_USABLE (SSE4_1); | |
213 | CHECK_CPU_FEATURE_USABLE (SSE4_2); | |
214 | CHECK_CPU_FEATURE_USABLE (MOVBE); | |
215 | CHECK_CPU_FEATURE_USABLE (POPCNT); | |
216 | CHECK_CPU_FEATURE_USABLE (AES); | |
217 | CHECK_CPU_FEATURE_USABLE (XSAVE); | |
218 | CHECK_CPU_FEATURE_USABLE (OSXSAVE); | |
219 | CHECK_CPU_FEATURE_USABLE (AVX); | |
220 | CHECK_CPU_FEATURE_USABLE (F16C); | |
221 | CHECK_CPU_FEATURE_USABLE (RDRAND); | |
222 | CHECK_CPU_FEATURE_USABLE (FPU); | |
223 | CHECK_CPU_FEATURE_USABLE (TSC); | |
224 | CHECK_CPU_FEATURE_USABLE (MSR); | |
225 | CHECK_CPU_FEATURE_USABLE (CX8); | |
226 | CHECK_CPU_FEATURE_USABLE (SEP); | |
227 | CHECK_CPU_FEATURE_USABLE (CMOV); | |
228 | CHECK_CPU_FEATURE_USABLE (CLFSH); | |
229 | CHECK_CPU_FEATURE_USABLE (MMX); | |
230 | CHECK_CPU_FEATURE_USABLE (FXSR); | |
231 | CHECK_CPU_FEATURE_USABLE (SSE); | |
232 | CHECK_CPU_FEATURE_USABLE (SSE2); | |
233 | CHECK_CPU_FEATURE_USABLE (FSGSBASE); | |
234 | CHECK_CPU_FEATURE_USABLE (BMI1); | |
235 | CHECK_CPU_FEATURE_USABLE (HLE); | |
236 | CHECK_CPU_FEATURE_USABLE (AVX2); | |
237 | CHECK_CPU_FEATURE_USABLE (BMI2); | |
238 | CHECK_CPU_FEATURE_USABLE (ERMS); | |
239 | CHECK_CPU_FEATURE_USABLE (AVX512F); | |
240 | CHECK_CPU_FEATURE_USABLE (AVX512DQ); | |
241 | CHECK_CPU_FEATURE_USABLE (RDSEED); | |
242 | CHECK_CPU_FEATURE_USABLE (ADX); | |
243 | CHECK_CPU_FEATURE_USABLE (AVX512_IFMA); | |
244 | CHECK_CPU_FEATURE_USABLE (CLFLUSHOPT); | |
245 | CHECK_CPU_FEATURE_USABLE (CLWB); | |
246 | CHECK_CPU_FEATURE_USABLE (AVX512PF); | |
247 | CHECK_CPU_FEATURE_USABLE (AVX512ER); | |
248 | CHECK_CPU_FEATURE_USABLE (AVX512CD); | |
249 | CHECK_CPU_FEATURE_USABLE (SHA); | |
250 | CHECK_CPU_FEATURE_USABLE (AVX512BW); | |
251 | CHECK_CPU_FEATURE_USABLE (AVX512VL); | |
252 | CHECK_CPU_FEATURE_USABLE (PREFETCHWT1); | |
253 | CHECK_CPU_FEATURE_USABLE (AVX512_VBMI); | |
254 | CHECK_CPU_FEATURE_USABLE (AVX512_VBMI2); | |
255 | CHECK_CPU_FEATURE_USABLE (GFNI); | |
256 | CHECK_CPU_FEATURE_USABLE (VAES); | |
257 | CHECK_CPU_FEATURE_USABLE (VPCLMULQDQ); | |
258 | CHECK_CPU_FEATURE_USABLE (AVX512_VNNI); | |
259 | CHECK_CPU_FEATURE_USABLE (AVX512_BITALG); | |
260 | CHECK_CPU_FEATURE_USABLE (AVX512_VPOPCNTDQ); | |
261 | CHECK_CPU_FEATURE_USABLE (RDPID); | |
262 | CHECK_CPU_FEATURE_USABLE (CLDEMOTE); | |
263 | CHECK_CPU_FEATURE_USABLE (MOVDIRI); | |
264 | CHECK_CPU_FEATURE_USABLE (MOVDIR64B); | |
265 | CHECK_CPU_FEATURE_USABLE (AVX512_4VNNIW); | |
266 | CHECK_CPU_FEATURE_USABLE (AVX512_4FMAPS); | |
267 | CHECK_CPU_FEATURE_USABLE (FSRM); | |
268 | CHECK_CPU_FEATURE_USABLE (LAHF64_SAHF64); | |
269 | CHECK_CPU_FEATURE_USABLE (LZCNT); | |
270 | CHECK_CPU_FEATURE_USABLE (SSE4A); | |
271 | CHECK_CPU_FEATURE_USABLE (PREFETCHW); | |
272 | CHECK_CPU_FEATURE_USABLE (XOP); | |
273 | CHECK_CPU_FEATURE_USABLE (FMA4); | |
274 | CHECK_CPU_FEATURE_USABLE (TBM); | |
275 | CHECK_CPU_FEATURE_USABLE (SYSCALL_SYSRET); | |
276 | CHECK_CPU_FEATURE_USABLE (RDTSCP); | |
277 | CHECK_CPU_FEATURE_USABLE (XSAVEOPT); | |
278 | CHECK_CPU_FEATURE_USABLE (XSAVEC); | |
279 | CHECK_CPU_FEATURE_USABLE (XGETBV_ECX_1); | |
280 | CHECK_CPU_FEATURE_USABLE (XSAVES); | |
281 | CHECK_CPU_FEATURE_USABLE (INVARIANT_TSC); | |
282 | CHECK_CPU_FEATURE_USABLE (WBNOINVD); | |
283 | ||
e2e4f560 L |
284 | return 0; |
285 | } | |
286 | ||
c22e4c2a | 287 | #include <support/test-driver.c> |