@@ -156,269 +156,116 @@ const typename InstructionSetBase<>::Data InstructionSetBase<>::data =
156156// https://docs.microsoft.com/fr-fr/cpp/intrinsics/cpuid-cpuidex?view=msvc-170
157157struct InstructionSet : public internal ::InstructionSetBase<>
158158{
159- static std::string vendor (void )
160- {
161- return internal::InstructionSetBase<>::data.vendor_ ;
162- }
163- static std::string brand (void )
164- {
165- return internal::InstructionSetBase<>::data.brand_ ;
166- }
159+ typedef internal::InstructionSetBase<> Base;
167160
168- static bool has_SSE3 (void )
169- {
170- return internal::InstructionSetBase<>::data.f_1_ECX_ [0 ];
171- }
172- static bool has_PCLMULQDQ (void )
173- {
174- return internal::InstructionSetBase<>::data.f_1_ECX_ [1 ];
175- }
176- static bool has_MONITOR (void )
177- {
178- return internal::InstructionSetBase<>::data.f_1_ECX_ [3 ];
179- }
180- static bool has_SSSE3 (void )
181- {
182- return internal::InstructionSetBase<>::data.f_1_ECX_ [9 ];
183- }
184- static bool has_FMA (void )
185- {
186- return internal::InstructionSetBase<>::data.f_1_ECX_ [12 ];
187- }
188- static bool has_CMPXCHG16B (void )
189- {
190- return internal::InstructionSetBase<>::data.f_1_ECX_ [13 ];
191- }
192- static bool has_SSE41 (void )
193- {
194- return internal::InstructionSetBase<>::data.f_1_ECX_ [19 ];
195- }
196- static bool has_SSE42 (void )
197- {
198- return internal::InstructionSetBase<>::data.f_1_ECX_ [20 ];
199- }
200- static bool has_MOVBE (void )
201- {
202- return internal::InstructionSetBase<>::data.f_1_ECX_ [22 ];
203- }
204- static bool has_POPCNT (void )
205- {
206- return internal::InstructionSetBase<>::data.f_1_ECX_ [23 ];
207- }
208- static bool has_AES (void )
209- {
210- return internal::InstructionSetBase<>::data.f_1_ECX_ [25 ];
211- }
212- static bool has_XSAVE (void )
213- {
214- return internal::InstructionSetBase<>::data.f_1_ECX_ [26 ];
215- }
216- static bool has_OSXSAVE (void )
217- {
218- return internal::InstructionSetBase<>::data.f_1_ECX_ [27 ];
219- }
220- static bool has_AVX (void )
221- {
222- return internal::InstructionSetBase<>::data.f_1_ECX_ [28 ];
223- }
224- static bool has_F16C (void )
225- {
226- return internal::InstructionSetBase<>::data.f_1_ECX_ [29 ];
227- }
228- static bool has_RDRAND (void )
229- {
230- return internal::InstructionSetBase<>::data.f_1_ECX_ [30 ];
231- }
161+ static std::string vendor (void ) { return Base::data.vendor_ ; }
162+ static std::string brand (void ) { return Base::data.brand_ ; }
232163
233- static bool has_MSR (void )
234- {
235- return internal::InstructionSetBase<>::data.f_1_EDX_ [5 ];
236- }
237- static bool has_CX8 (void )
238- {
239- return internal::InstructionSetBase<>::data.f_1_EDX_ [8 ];
240- }
241- static bool has_SEP (void )
242- {
243- return internal::InstructionSetBase<>::data.f_1_EDX_ [11 ];
244- }
245- static bool has_CMOV (void )
246- {
247- return internal::InstructionSetBase<>::data.f_1_EDX_ [15 ];
248- }
249- static bool has_CLFSH (void )
250- {
251- return internal::InstructionSetBase<>::data.f_1_EDX_ [19 ];
252- }
253- static bool has_MMX (void )
254- {
255- return internal::InstructionSetBase<>::data.f_1_EDX_ [23 ];
256- }
257- static bool has_FXSR (void )
258- {
259- return internal::InstructionSetBase<>::data.f_1_EDX_ [24 ];
260- }
261- static bool has_SSE (void )
262- {
263- return internal::InstructionSetBase<>::data.f_1_EDX_ [25 ];
264- }
265- static bool has_SSE2 (void )
266- {
267- return internal::InstructionSetBase<>::data.f_1_EDX_ [26 ];
268- }
164+ static bool has_SSE3 (void ) { return Base::data.f_1_ECX_ [0 ]; }
165+ static bool has_PCLMULQDQ (void ) { return Base::data.f_1_ECX_ [1 ]; }
166+ static bool has_MONITOR (void ) { return Base::data.f_1_ECX_ [3 ]; }
167+ static bool has_SSSE3 (void ) { return Base::data.f_1_ECX_ [9 ]; }
168+ static bool has_FMA (void ) { return Base::data.f_1_ECX_ [12 ]; }
169+ static bool has_CMPXCHG16B (void ) { return Base::data.f_1_ECX_ [13 ]; }
170+ static bool has_SSE41 (void ) { return Base::data.f_1_ECX_ [19 ]; }
171+ static bool has_SSE42 (void ) { return Base::data.f_1_ECX_ [20 ]; }
172+ static bool has_MOVBE (void ) { return Base::data.f_1_ECX_ [22 ]; }
173+ static bool has_POPCNT (void ) { return Base::data.f_1_ECX_ [23 ]; }
174+ static bool has_AES (void ) { return Base::data.f_1_ECX_ [25 ]; }
175+ static bool has_XSAVE (void ) { return Base::data.f_1_ECX_ [26 ]; }
176+ static bool has_OSXSAVE (void ) { return Base::data.f_1_ECX_ [27 ]; }
177+ static bool has_AVX (void ) { return Base::data.f_1_ECX_ [28 ]; }
178+ static bool has_F16C (void ) { return Base::data.f_1_ECX_ [29 ]; }
179+ static bool has_RDRAND (void ) { return Base::data.f_1_ECX_ [30 ]; }
269180
270- static bool has_FSGSBASE (void )
271- {
272- return internal::InstructionSetBase<>::data.f_7_EBX_ [0 ];
273- }
274- static bool has_AVX512VBMI (void )
275- {
276- return internal::InstructionSetBase<>::data.f_7_EBX_ [1 ];
277- }
278- static bool has_BMI1 (void )
279- {
280- return internal::InstructionSetBase<>::data.f_7_EBX_ [3 ];
281- }
181+ static bool has_MSR (void ) { return Base::data.f_1_EDX_ [5 ]; }
182+ static bool has_CX8 (void ) { return Base::data.f_1_EDX_ [8 ]; }
183+ static bool has_SEP (void ) { return Base::data.f_1_EDX_ [11 ]; }
184+ static bool has_CMOV (void ) { return Base::data.f_1_EDX_ [15 ]; }
185+ static bool has_CLFSH (void ) { return Base::data.f_1_EDX_ [19 ]; }
186+ static bool has_MMX (void ) { return Base::data.f_1_EDX_ [23 ]; }
187+ static bool has_FXSR (void ) { return Base::data.f_1_EDX_ [24 ]; }
188+ static bool has_SSE (void ) { return Base::data.f_1_EDX_ [25 ]; }
189+ static bool has_SSE2 (void ) { return Base::data.f_1_EDX_ [26 ]; }
190+
191+ static bool has_FSGSBASE (void ) { return Base::data.f_7_EBX_ [0 ]; }
192+ static bool has_AVX512VBMI (void ) { return Base::data.f_7_EBX_ [1 ]; }
193+ static bool has_BMI1 (void ) { return Base::data.f_7_EBX_ [3 ]; }
282194 static bool has_HLE (void )
283195 {
284- return internal::InstructionSetBase<>::data.isIntel_ &&
285- internal::InstructionSetBase<>::data.f_7_EBX_ [4 ];
286- }
287- static bool has_AVX2 (void )
288- {
289- return internal::InstructionSetBase<>::data.f_7_EBX_ [5 ];
290- }
291- static bool has_BMI2 (void )
292- {
293- return internal::InstructionSetBase<>::data.f_7_EBX_ [8 ];
294- }
295- static bool has_ERMS (void )
296- {
297- return internal::InstructionSetBase<>::data.f_7_EBX_ [9 ];
298- }
299- static bool has_INVPCID (void )
300- {
301- return internal::InstructionSetBase<>::data.f_7_EBX_ [10 ];
196+ return Base::data.isIntel_ && Base::data.f_7_EBX_ [4 ];
302197 }
198+ static bool has_AVX2 (void ) { return Base::data.f_7_EBX_ [5 ]; }
199+ static bool has_BMI2 (void ) { return Base::data.f_7_EBX_ [8 ]; }
200+ static bool has_ERMS (void ) { return Base::data.f_7_EBX_ [9 ]; }
201+ static bool has_INVPCID (void ) { return Base::data.f_7_EBX_ [10 ]; }
303202 static bool has_RTM (void )
304203 {
305- return internal::InstructionSetBase<>::data.isIntel_ &&
306- internal::InstructionSetBase<>::data.f_7_EBX_ [11 ];
307- }
308- static bool has_AVX512F (void )
309- {
310- return internal::InstructionSetBase<>::data.f_7_EBX_ [16 ];
311- }
312- static bool has_AVX512DQ (void )
313- {
314- return internal::InstructionSetBase<>::data.f_7_EBX_ [17 ];
315- }
316- static bool has_RDSEED (void )
317- {
318- return internal::InstructionSetBase<>::data.f_7_EBX_ [18 ];
319- }
320- static bool has_ADX (void )
321- {
322- return internal::InstructionSetBase<>::data.f_7_EBX_ [19 ];
323- }
324- static bool has_AVX512IFMA (void )
325- {
326- return internal::InstructionSetBase<>::data.f_7_EBX_ [21 ];
327- }
328- static bool has_AVX512PF (void )
329- {
330- return internal::InstructionSetBase<>::data.f_7_EBX_ [26 ];
331- }
332- static bool has_AVX512ER (void )
333- {
334- return internal::InstructionSetBase<>::data.f_7_EBX_ [27 ];
335- }
336- static bool has_AVX512CD (void )
337- {
338- return internal::InstructionSetBase<>::data.f_7_EBX_ [28 ];
339- }
340- static bool has_SHA (void )
341- {
342- return internal::InstructionSetBase<>::data.f_7_EBX_ [29 ];
343- }
344- static bool has_AVX512BW (void )
345- {
346- return internal::InstructionSetBase<>::data.f_7_EBX_ [30 ];
347- }
348- static bool has_AVX512VL (void )
349- {
350- return internal::InstructionSetBase<>::data.f_7_EBX_ [31 ];
351- }
204+ return Base::data.isIntel_ && Base::data.f_7_EBX_ [11 ];
205+ }
206+ static bool has_AVX512F (void ) { return Base::data.f_7_EBX_ [16 ]; }
207+ static bool has_AVX512DQ (void ) { return Base::data.f_7_EBX_ [17 ]; }
208+ static bool has_RDSEED (void ) { return Base::data.f_7_EBX_ [18 ]; }
209+ static bool has_ADX (void ) { return Base::data.f_7_EBX_ [19 ]; }
210+ static bool has_AVX512IFMA (void ) { return Base::data.f_7_EBX_ [21 ]; }
211+ static bool has_AVX512PF (void ) { return Base::data.f_7_EBX_ [26 ]; }
212+ static bool has_AVX512ER (void ) { return Base::data.f_7_EBX_ [27 ]; }
213+ static bool has_AVX512CD (void ) { return Base::data.f_7_EBX_ [28 ]; }
214+ static bool has_SHA (void ) { return Base::data.f_7_EBX_ [29 ]; }
215+ static bool has_AVX512BW (void ) { return Base::data.f_7_EBX_ [30 ]; }
216+ static bool has_AVX512VL (void ) { return Base::data.f_7_EBX_ [31 ]; }
352217
353- static bool has_PREFETCHWT1 (void )
354- {
355- return internal::InstructionSetBase<>::data.f_7_ECX_ [0 ];
356- }
218+ static bool has_PREFETCHWT1 (void ) { return Base::data.f_7_ECX_ [0 ]; }
357219
358- static bool has_LAHF (void )
359- {
360- return internal::InstructionSetBase<>::data.f_81_ECX_ [0 ];
361- }
220+ static bool has_LAHF (void ) { return Base::data.f_81_ECX_ [0 ]; }
362221 static bool has_LZCNT (void )
363222 {
364- return internal::InstructionSetBase<>::data.isIntel_ &&
365- internal::InstructionSetBase<>::data.f_81_ECX_ [5 ];
223+ return Base::data.isIntel_ && Base::data.f_81_ECX_ [5 ];
366224 }
367225 static bool has_ABM (void )
368226 {
369- return internal::InstructionSetBase<>::data.isAMD_ &&
370- internal::InstructionSetBase<>::data.f_81_ECX_ [5 ];
227+ return Base::data.isAMD_ && Base::data.f_81_ECX_ [5 ];
371228 }
372229 static bool has_SSE4a (void )
373230 {
374- return internal::InstructionSetBase<>::data.isAMD_ &&
375- internal::InstructionSetBase<>::data.f_81_ECX_ [6 ];
231+ return Base::data.isAMD_ && Base::data.f_81_ECX_ [6 ];
376232 }
377233 static bool has_XOP (void )
378234 {
379- return internal::InstructionSetBase<>::data.isAMD_ &&
380- internal::InstructionSetBase<>::data.f_81_ECX_ [11 ];
235+ return Base::data.isAMD_ && Base::data.f_81_ECX_ [11 ];
381236 }
382237 static bool has_FMA4 (void )
383238 {
384- return internal::InstructionSetBase<>::data.isAMD_ &&
385- internal::InstructionSetBase<>::data.f_81_ECX_ [16 ];
239+ return Base::data.isAMD_ && Base::data.f_81_ECX_ [16 ];
386240 }
387241 static bool has_TBM (void )
388242 {
389- return internal::InstructionSetBase<>::data.isAMD_ &&
390- internal::InstructionSetBase<>::data.f_81_ECX_ [21 ];
243+ return Base::data.isAMD_ && Base::data.f_81_ECX_ [21 ];
391244 }
392245
393246 static bool has_SYSCALL (void )
394247 {
395- return internal::InstructionSetBase<>::data.isIntel_ &&
396- internal::InstructionSetBase<>::data.f_81_EDX_ [11 ];
248+ return Base::data.isIntel_ && Base::data.f_81_EDX_ [11 ];
397249 }
398250 static bool has_MMXEXT (void )
399251 {
400- return internal::InstructionSetBase<>::data.isAMD_ &&
401- internal::InstructionSetBase<>::data.f_81_EDX_ [22 ];
252+ return Base::data.isAMD_ && Base::data.f_81_EDX_ [22 ];
402253 }
403254 static bool has_RDTSCP (void )
404255 {
405- return internal::InstructionSetBase<>::data.isIntel_ &&
406- internal::InstructionSetBase<>::data.f_81_EDX_ [27 ];
256+ return Base::data.isIntel_ && Base::data.f_81_EDX_ [27 ];
407257 }
408258 static bool has_x64 (void )
409259 {
410- return internal::InstructionSetBase<>::data.isIntel_ &&
411- internal::InstructionSetBase<>::data.f_81_EDX_ [29 ];
260+ return Base::data.isIntel_ && Base::data.f_81_EDX_ [29 ];
412261 }
413262 static bool has_3DNOWEXT (void )
414263 {
415- return internal::InstructionSetBase<>::data.isAMD_ &&
416- internal::InstructionSetBase<>::data.f_81_EDX_ [30 ];
264+ return Base::data.isAMD_ && Base::data.f_81_EDX_ [30 ];
417265 }
418266 static bool has_3DNOW (void )
419267 {
420- return internal::InstructionSetBase<>::data.isAMD_ &&
421- internal::InstructionSetBase<>::data.f_81_EDX_ [31 ];
268+ return Base::data.isAMD_ && Base::data.f_81_EDX_ [31 ];
422269 }
423270};
424271
0 commit comments