1 /************************************************************************** 2 * 3 * Copyright 2008 Dennis Smit 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * on the rights to use, copy, modify, merge, publish, distribute, sub 10 * license, and/or sell copies of the Software, and to permit persons to whom 11 * the Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the next 14 * paragraph) shall be included in all copies or substantial portions of the 15 * Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20 * AUTHORS, COPYRIGHT HOLDERS, AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 23 * USE OR OTHER DEALINGS IN THE SOFTWARE. 24 * 25 ***************************************************************************/ 26 27 /** 28 * @file 29 * CPU feature detection. 30 * 31 * @author Dennis Smit 32 * @author Based on the work of Eric Anholt <anholt@FreeBSD.org> 33 */ 34 35 #ifndef _UTIL_CPU_DETECT_H 36 #define _UTIL_CPU_DETECT_H 37 38 39 #include "pipe/p_compiler.h" 40 #include "pipe/p_config.h" 41 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 48 struct util_cpu_caps { 49 unsigned nr_cpus; 50 51 /* Feature flags */ 52 int x86_cpu_type; 53 unsigned cacheline; 54 55 unsigned has_intel:1; 56 unsigned has_tsc:1; 57 unsigned has_mmx:1; 58 unsigned has_mmx2:1; 59 unsigned has_sse:1; 60 unsigned has_sse2:1; 61 unsigned has_sse3:1; 62 unsigned has_ssse3:1; 63 unsigned has_sse4_1:1; 64 unsigned has_sse4_2:1; 65 unsigned has_popcnt:1; 66 unsigned has_avx:1; 67 unsigned has_avx2:1; 68 unsigned has_f16c:1; 69 unsigned has_fma:1; 70 unsigned has_3dnow:1; 71 unsigned has_3dnow_ext:1; 72 unsigned has_xop:1; 73 unsigned has_altivec:1; 74 unsigned has_daz:1; 75 76 unsigned has_avx512f:1; 77 unsigned has_avx512dq:1; 78 unsigned has_avx512ifma:1; 79 unsigned has_avx512pf:1; 80 unsigned has_avx512er:1; 81 unsigned has_avx512cd:1; 82 unsigned has_avx512bw:1; 83 unsigned has_avx512vl:1; 84 unsigned has_avx512vbmi:1; 85 }; 86 87 extern struct util_cpu_caps 88 util_cpu_caps; 89 90 void util_cpu_detect(void); 91 92 93 #ifdef __cplusplus 94 } 95 #endif 96 97 98 #endif /* _UTIL_CPU_DETECT_H */ 99