1 /*********************************************************************/
2 /* Copyright 2009, 2010 The University of Texas at Austin. */
3 /* All rights reserved. */
5 /* Redistribution and use in source and binary forms, with or */
6 /* without modification, are permitted provided that the following */
7 /* conditions are met: */
9 /* 1. Redistributions of source code must retain the above */
10 /* copyright notice, this list of conditions and the following */
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. */
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. */
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 /*********************************************************************/
42 #define VENDOR_INTEL 1
45 #define VENDOR_CYRIX 4
46 #define VENDOR_NEXGEN 5
47 #define VENDOR_CENTAUR 6
50 #define VENDOR_TRANSMETA 9
52 #define VENDOR_UNKNOWN 99
54 #define BITMASK(a, b, c) ((((a) >> (b)) & (c)))
56 #define FAMILY_80486 4
62 #if defined(__i386__) || defined(__x86_64__)
63 #define GET_EXFAMILY 1
71 #define GET_STEPPING 9
72 #define GET_BLANDID 10
73 #define GET_FEATURE 11
74 #define GET_NUMSHARE 12
75 #define GET_NUMCORES 13
82 #define GET_REVISION 4
86 #define CORE_UNKNOWN 0
91 #define CORE_COPPERMINE 5
92 #define CORE_NORTHWOOD 6
93 #define CORE_PRESCOTT 7
96 #define CORE_OPTERON 10
97 #define CORE_BARCELONA 11
100 #define CORE_CORE2 14
101 #define CORE_PENRYN 15
102 #define CORE_DUNNINGTON 16
103 #define CORE_NEHALEM 17
106 #define CORE_SANDYBRIDGE 20
107 #define CORE_BOBCAT 21
108 #define CORE_BULLDOZER CORE_BARCELONA
109 #define CORE_PILEDRIVER CORE_BARCELONA
110 #define CORE_HASWELL CORE_SANDYBRIDGE
112 #define HAVE_SSE (1 << 0)
113 #define HAVE_SSE2 (1 << 1)
114 #define HAVE_SSE3 (1 << 2)
115 #define HAVE_SSSE3 (1 << 3)
116 #define HAVE_SSE4_1 (1 << 4)
117 #define HAVE_SSE4_2 (1 << 5)
118 #define HAVE_SSE4A (1 << 6)
119 #define HAVE_SSE5 (1 << 7)
120 #define HAVE_MMX (1 << 8)
121 #define HAVE_3DNOW (1 << 9)
122 #define HAVE_3DNOWEX (1 << 10)
123 #define HAVE_CMOV (1 << 11)
124 #define HAVE_PSE (1 << 12)
125 #define HAVE_CFLUSH (1 << 13)
126 #define HAVE_HIT (1 << 14)
127 #define HAVE_MISALIGNSSE (1 << 15)
128 #define HAVE_128BITFPU (1 << 16)
129 #define HAVE_FASTMOVU (1 << 17)
130 #define HAVE_AVX (1 << 18)
131 #define HAVE_FMA4 (1 << 19)
132 #define HAVE_FMA3 (1 << 20)
134 #define CACHE_INFO_L1_I 1
135 #define CACHE_INFO_L1_D 2
136 #define CACHE_INFO_L2 3
137 #define CACHE_INFO_L3 4
138 #define CACHE_INFO_L1_ITB 5
139 #define CACHE_INFO_L1_DTB 6
140 #define CACHE_INFO_L1_LITB 7
141 #define CACHE_INFO_L1_LDTB 8
142 #define CACHE_INFO_L2_ITB 9
143 #define CACHE_INFO_L2_DTB 10
144 #define CACHE_INFO_L2_LITB 11
145 #define CACHE_INFO_L2_LDTB 12
154 #define CPUTYPE_UNKNOWN 0
155 #define CPUTYPE_INTEL_UNKNOWN 1
156 #define CPUTYPE_UMC_UNKNOWN 2
157 #define CPUTYPE_AMD_UNKNOWN 3
158 #define CPUTYPE_CYRIX_UNKNOWN 4
159 #define CPUTYPE_NEXGEN_UNKNOWN 5
160 #define CPUTYPE_CENTAUR_UNKNOWN 6
161 #define CPUTYPE_RISE_UNKNOWN 7
162 #define CPUTYPE_SIS_UNKNOWN 8
163 #define CPUTYPE_TRANSMETA_UNKNOWN 9
164 #define CPUTYPE_NSC_UNKNOWN 10
166 #define CPUTYPE_80386 11
167 #define CPUTYPE_80486 12
168 #define CPUTYPE_PENTIUM 13
169 #define CPUTYPE_PENTIUM2 14
170 #define CPUTYPE_PENTIUM3 15
171 #define CPUTYPE_PENTIUMM 16
172 #define CPUTYPE_PENTIUM4 17
173 #define CPUTYPE_CORE2 18
174 #define CPUTYPE_PENRYN 19
175 #define CPUTYPE_DUNNINGTON 20
176 #define CPUTYPE_NEHALEM 21
177 #define CPUTYPE_ATOM 22
178 #define CPUTYPE_ITANIUM 23
179 #define CPUTYPE_ITANIUM2 24
180 #define CPUTYPE_AMD5X86 25
181 #define CPUTYPE_AMDK6 26
182 #define CPUTYPE_ATHLON 27
183 #define CPUTYPE_DURON 28
184 #define CPUTYPE_OPTERON 29
185 #define CPUTYPE_BARCELONA 30
186 #define CPUTYPE_SHANGHAI 31
187 #define CPUTYPE_ISTANBUL 32
188 #define CPUTYPE_CYRIX5X86 33
189 #define CPUTYPE_CYRIXM1 34
190 #define CPUTYPE_CYRIXM2 35
191 #define CPUTYPE_NEXGENNX586 36
192 #define CPUTYPE_CENTAURC6 37
193 #define CPUTYPE_RISEMP6 38
194 #define CPUTYPE_SYS55X 39
195 #define CPUTYPE_CRUSOETM3X 40
196 #define CPUTYPE_NSGEODE 41
197 #define CPUTYPE_VIAC3 42
198 #define CPUTYPE_NANO 43
199 #define CPUTYPE_SANDYBRIDGE 44
200 #define CPUTYPE_BOBCAT 45
201 #define CPUTYPE_BULLDOZER CPUTYPE_BARCELONA
202 #define CPUTYPE_PILEDRIVER CPUTYPE_BARCELONA
203 // this define is because BLAS doesn't have haswell specific optimizations yet
204 #define CPUTYPE_HASWELL CPUTYPE_SANDYBRIDGE