Merge pull request #3709 from nursik/develop
[platform/upstream/openblas.git] / cpuid.h
1 /*********************************************************************/
2 /* Copyright 2009, 2010 The University of Texas at Austin.           */
3 /* All rights reserved.                                              */
4 /*                                                                   */
5 /* Redistribution and use in source and binary forms, with or        */
6 /* without modification, are permitted provided that the following   */
7 /* conditions are met:                                               */
8 /*                                                                   */
9 /*   1. Redistributions of source code must retain the above         */
10 /*      copyright notice, this list of conditions and the following  */
11 /*      disclaimer.                                                  */
12 /*                                                                   */
13 /*   2. Redistributions in binary form must reproduce the above      */
14 /*      copyright notice, this list of conditions and the following  */
15 /*      disclaimer in the documentation and/or other materials       */
16 /*      provided with the distribution.                              */
17 /*                                                                   */
18 /*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
19 /*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
20 /*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
21 /*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
22 /*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
23 /*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
24 /*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
25 /*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
26 /*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
27 /*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
28 /*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
29 /*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
30 /*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
31 /*    POSSIBILITY OF SUCH DAMAGE.                                    */
32 /*                                                                   */
33 /* The views and conclusions contained in the software and           */
34 /* documentation are those of the authors and should not be          */
35 /* interpreted as representing official policies, either expressed   */
36 /* or implied, of The University of Texas at Austin.                 */
37 /*********************************************************************/
38
39 #ifndef CPUID_H
40 #define CPUID_H
41
42 #if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)
43 #define INTEL_AMD
44 #endif
45
46 #define VENDOR_INTEL      1
47 #define VENDOR_UMC        2
48 #define VENDOR_AMD        3
49 #define VENDOR_CYRIX      4
50 #define VENDOR_NEXGEN     5
51 #define VENDOR_CENTAUR    6
52 #define VENDOR_RISE       7
53 #define VENDOR_SIS        8
54 #define VENDOR_TRANSMETA  9
55 #define VENDOR_NSC       10
56 #define VENDOR_HYGON     11
57 #define VENDOR_ZHAOXIN   12
58 #define VENDOR_UNKNOWN   99
59
60 #define BITMASK(a, b, c) ((((a) >> (b)) & (c)))
61
62 #define FAMILY_80486  4
63 #define FAMILY_P5     5
64 #define FAMILY_P6     6
65 #define FAMILY_PM     7
66 #define FAMILY_IA64   8
67
68 #ifdef INTEL_AMD
69 #define GET_EXFAMILY  1
70 #define GET_EXMODEL   2
71 #define GET_TYPE      3
72 #define GET_FAMILY    4
73 #define GET_MODEL     5
74 #define GET_APICID    6
75 #define GET_LCOUNT    7
76 #define GET_CHUNKS    8
77 #define GET_STEPPING  9
78 #define GET_BLANDID  10
79 #define GET_FEATURE  11
80 #define GET_NUMSHARE 12
81 #define GET_NUMCORES 13
82 #endif
83
84 #ifdef __ia64__
85 #define GET_ARCHREV   1
86 #define GET_FAMILY    2
87 #define GET_MODEL     3
88 #define GET_REVISION  4
89 #define GET_NUMBER    5
90 #endif
91
92 #define CORE_UNKNOWN     0
93 #define CORE_80486       1
94 #define CORE_P5          2
95 #define CORE_P6          3
96 #define CORE_KATMAI      4
97 #define CORE_COPPERMINE  5
98 #define CORE_NORTHWOOD   6
99 #define CORE_PRESCOTT    7
100 #define CORE_BANIAS      8
101 #define CORE_ATHLON      9
102 #define CORE_OPTERON    10
103 #define CORE_BARCELONA  11
104 #define CORE_VIAC3      12
105 #define CORE_YONAH      13
106 #define CORE_CORE2      14
107 #define CORE_PENRYN     15
108 #define CORE_DUNNINGTON 16
109 #define CORE_NEHALEM    17
110 #define CORE_ATOM       18
111 #define CORE_NANO       19
112 #define CORE_SANDYBRIDGE 20
113 #define CORE_BOBCAT      21
114 #define CORE_BULLDOZER   22
115 #define CORE_PILEDRIVER  23
116 #define CORE_HASWELL     24
117 #define CORE_STEAMROLLER 25
118 #define CORE_EXCAVATOR   26
119 #define CORE_ZEN         27
120 #define CORE_SKYLAKEX    28
121 #define CORE_DHYANA      29
122 #define CORE_COOPERLAKE  30
123 #define CORE_SAPPHIRERAPIDS  31
124
125 #define HAVE_SSE      (1 <<  0)
126 #define HAVE_SSE2     (1 <<  1)
127 #define HAVE_SSE3     (1 <<  2)
128 #define HAVE_SSSE3    (1 <<  3)
129 #define HAVE_SSE4_1   (1 <<  4)
130 #define HAVE_SSE4_2   (1 <<  5)
131 #define HAVE_SSE4A    (1 <<  6)
132 #define HAVE_SSE5     (1 <<  7)
133 #define HAVE_MMX      (1 <<  8)
134 #define HAVE_3DNOW    (1 <<  9)
135 #define HAVE_3DNOWEX  (1 << 10)
136 #define HAVE_CMOV     (1 << 11)
137 #define HAVE_PSE      (1 << 12)
138 #define HAVE_CFLUSH   (1 << 13)
139 #define HAVE_HIT      (1 << 14)
140 #define HAVE_MISALIGNSSE (1 << 15)
141 #define HAVE_128BITFPU   (1 << 16)
142 #define HAVE_FASTMOVU    (1 << 17)
143 #define HAVE_AVX      (1 << 18)
144 #define HAVE_FMA4     (1 << 19)
145 #define HAVE_FMA3     (1 << 20)
146 #define HAVE_AVX512VL (1 << 21)
147 #define HAVE_AVX2     (1 << 22)
148 #define HAVE_AVX512BF16  (1 << 23)
149 #define HAVE_AMXBF16  (1 << 24)
150
151 #define CACHE_INFO_L1_I     1
152 #define CACHE_INFO_L1_D     2
153 #define CACHE_INFO_L2       3
154 #define CACHE_INFO_L3       4
155 #define CACHE_INFO_L1_ITB   5
156 #define CACHE_INFO_L1_DTB   6
157 #define CACHE_INFO_L1_LITB  7
158 #define CACHE_INFO_L1_LDTB  8
159 #define CACHE_INFO_L2_ITB   9
160 #define CACHE_INFO_L2_DTB  10
161 #define CACHE_INFO_L2_LITB 11
162 #define CACHE_INFO_L2_LDTB 12
163
164 typedef struct {
165   int size;
166   int associative;
167   int linesize;
168   int shared;
169 } cache_info_t;
170
171 #define CPUTYPE_UNKNOWN                  0
172 #define CPUTYPE_INTEL_UNKNOWN            1
173 #define CPUTYPE_UMC_UNKNOWN              2
174 #define CPUTYPE_AMD_UNKNOWN              3
175 #define CPUTYPE_CYRIX_UNKNOWN            4
176 #define CPUTYPE_NEXGEN_UNKNOWN           5
177 #define CPUTYPE_CENTAUR_UNKNOWN          6
178 #define CPUTYPE_RISE_UNKNOWN             7
179 #define CPUTYPE_SIS_UNKNOWN              8
180 #define CPUTYPE_TRANSMETA_UNKNOWN        9
181 #define CPUTYPE_NSC_UNKNOWN             10
182
183 #define CPUTYPE_80386                   11
184 #define CPUTYPE_80486                   12
185 #define CPUTYPE_PENTIUM                 13
186 #define CPUTYPE_PENTIUM2                14
187 #define CPUTYPE_PENTIUM3                15
188 #define CPUTYPE_PENTIUMM                16
189 #define CPUTYPE_PENTIUM4                17
190 #define CPUTYPE_CORE2                   18
191 #define CPUTYPE_PENRYN                  19
192 #define CPUTYPE_DUNNINGTON              20
193 #define CPUTYPE_NEHALEM                 21
194 #define CPUTYPE_ATOM                    22
195 #define CPUTYPE_ITANIUM                 23
196 #define CPUTYPE_ITANIUM2                24
197 #define CPUTYPE_AMD5X86                 25
198 #define CPUTYPE_AMDK6                   26
199 #define CPUTYPE_ATHLON                  27
200 #define CPUTYPE_DURON                   28
201 #define CPUTYPE_OPTERON                 29
202 #define CPUTYPE_BARCELONA               30
203 #define CPUTYPE_SHANGHAI                31
204 #define CPUTYPE_ISTANBUL                32
205 #define CPUTYPE_CYRIX5X86               33
206 #define CPUTYPE_CYRIXM1                 34
207 #define CPUTYPE_CYRIXM2                 35
208 #define CPUTYPE_NEXGENNX586             36
209 #define CPUTYPE_CENTAURC6               37
210 #define CPUTYPE_RISEMP6                 38
211 #define CPUTYPE_SYS55X                  39
212 #define CPUTYPE_CRUSOETM3X              40
213 #define CPUTYPE_NSGEODE                 41
214 #define CPUTYPE_VIAC3                   42
215 #define CPUTYPE_NANO                    43
216 #define CPUTYPE_SANDYBRIDGE             44
217 #define CPUTYPE_BOBCAT                  45
218 #define CPUTYPE_BULLDOZER               46
219 #define CPUTYPE_PILEDRIVER              47
220 #define CPUTYPE_HASWELL                 48
221 #define CPUTYPE_STEAMROLLER             49
222 #define CPUTYPE_EXCAVATOR               50
223 #define CPUTYPE_ZEN                     51
224 #define CPUTYPE_SKYLAKEX                52
225 #define CPUTYPE_DHYANA                  53
226 #define CPUTYPE_COOPERLAKE              54
227 #define CPUTYPE_SAPPHIRERAPIDS          55
228
229 #define CPUTYPE_HYGON_UNKNOWN           99
230
231 #endif