]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/x86/tst-get-cpu-features.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / x86 / tst-get-cpu-features.c
CommitLineData
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
36static const char * const cpu_kinds[] =
37{
38 "Unknown",
39 "Intel",
40 "AMD",
41 "Other",
42};
e2e4f560
L
43
44static int
45do_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>