|
| 1 | +//===--- X86Target.def - X86 Feature/Processor Database ---------*- C++ -*-===// |
| 2 | +// |
| 3 | +// The LLVM Compiler Infrastructure |
| 4 | +// |
| 5 | +// This file is distributed under the University of Illinois Open Source |
| 6 | +// License. See LICENSE.TXT for details. |
| 7 | +// |
| 8 | +//===----------------------------------------------------------------------===// |
| 9 | +// |
| 10 | +// This file defines the X86-specific Features and Processors, as used by |
| 11 | +// the X86 Targets. |
| 12 | +// |
| 13 | +//===----------------------------------------------------------------------===// |
| 14 | + |
| 15 | + |
| 16 | +#ifndef PROC |
| 17 | +#define PROC(ENUM, STRING, IS64BIT) |
| 18 | +#endif |
| 19 | + |
| 20 | +#ifndef PROC_ALIAS |
| 21 | +#define PROC_ALIAS(ENUM, ALIAS) |
| 22 | +#endif |
| 23 | + |
| 24 | +#define PROC_64_BIT true |
| 25 | +#define PROC_32_BIT false |
| 26 | + |
| 27 | +/// \name i386 |
| 28 | +/// i386-generation processors. |
| 29 | +//@{ |
| 30 | +PROC(i386, "i386", PROC_32_BIT) |
| 31 | +//@} |
| 32 | + |
| 33 | +/// \name i486 |
| 34 | +/// i486-generation processors. |
| 35 | +//@{ |
| 36 | +PROC(i486, "i486", PROC_32_BIT) |
| 37 | +PROC(WinChipC6, "winchip-c6", PROC_32_BIT) |
| 38 | +PROC(WinChip2, "winchip2", PROC_32_BIT) |
| 39 | +PROC(C3, "c3", PROC_32_BIT) |
| 40 | +//@} |
| 41 | + |
| 42 | +/// \name i586 |
| 43 | +/// i586-generation processors, P5 microarchitecture based. |
| 44 | +//@{ |
| 45 | +PROC(i586, "i586", PROC_32_BIT) |
| 46 | +PROC(Pentium, "pentium", PROC_32_BIT) |
| 47 | +PROC(PentiumMMX, "pentium-mmx", PROC_32_BIT) |
| 48 | +//@} |
| 49 | + |
| 50 | +/// \name i686 |
| 51 | +/// i686-generation processors, P6 / Pentium M microarchitecture based. |
| 52 | +//@{ |
| 53 | +PROC(PentiumPro, "pentiumpro", PROC_32_BIT) |
| 54 | +PROC_ALIAS(PentiumPro, "i686") |
| 55 | +PROC(Pentium2, "pentium2", PROC_32_BIT) |
| 56 | +PROC(Pentium3, "pentium3", PROC_32_BIT) |
| 57 | +PROC_ALIAS(Pentium3, "pentium3m") |
| 58 | +PROC(PentiumM, "pentium-m", PROC_32_BIT) |
| 59 | +PROC(C3_2, "c3-2", PROC_32_BIT) |
| 60 | + |
| 61 | +/// This enumerator is a bit odd, as GCC no longer accepts -march=yonah. |
| 62 | +/// Clang however has some logic to support this. |
| 63 | +// FIXME: Warn, deprecate, and potentially remove this. |
| 64 | +PROC(Yonah, "yonah", PROC_32_BIT) |
| 65 | +//@} |
| 66 | + |
| 67 | +/// \name Netburst |
| 68 | +/// Netburst microarchitecture based processors. |
| 69 | +//@{ |
| 70 | +PROC(Pentium4, "pentium4", PROC_32_BIT) |
| 71 | +PROC_ALIAS(Pentium4, "pentium4m") |
| 72 | + |
| 73 | +PROC(Prescott, "prescott", PROC_32_BIT) |
| 74 | +PROC(Nocona, "nocona", PROC_64_BIT) |
| 75 | +//@} |
| 76 | + |
| 77 | +/// \name Core |
| 78 | +/// Core microarchitecture based processors. |
| 79 | +//@{ |
| 80 | +PROC(Core2, "core2", PROC_64_BIT) |
| 81 | + |
| 82 | +/// This enumerator, like Yonah, is a bit odd. It is another |
| 83 | +/// codename which GCC no longer accepts as an option to -march, but Clang |
| 84 | +/// has some logic for recognizing it. |
| 85 | +// FIXME: Warn, deprecate, and potentially remove this. |
| 86 | +PROC(Penryn, "penryn", PROC_64_BIT) |
| 87 | +//@} |
| 88 | + |
| 89 | +/// \name Atom |
| 90 | +/// Atom processors |
| 91 | +//@{ |
| 92 | +PROC(Bonnell, "bonnell", PROC_64_BIT) |
| 93 | +PROC_ALIAS(Bonnell, "atom") |
| 94 | + |
| 95 | +PROC(Silvermont, "silvermont", PROC_64_BIT) |
| 96 | +PROC_ALIAS(Silvermont, "slm") |
| 97 | + |
| 98 | +PROC(Goldmont, "goldmont", PROC_64_BIT) |
| 99 | +//@} |
| 100 | + |
| 101 | +/// \name Nehalem |
| 102 | +/// Nehalem microarchitecture based processors. |
| 103 | +PROC(Nehalem, "nehalem", PROC_64_BIT) |
| 104 | +PROC_ALIAS(Nehalem, "corei7") |
| 105 | + |
| 106 | +/// \name Westmere |
| 107 | +/// Westmere microarchitecture based processors. |
| 108 | +PROC(Westmere, "westmere", PROC_64_BIT) |
| 109 | + |
| 110 | +/// \name Sandy Bridge |
| 111 | +/// Sandy Bridge microarchitecture based processors. |
| 112 | +PROC(SandyBridge, "sandybridge", PROC_64_BIT) |
| 113 | +PROC_ALIAS(SandyBridge, "corei7-avx") |
| 114 | + |
| 115 | +/// \name Ivy Bridge |
| 116 | +/// Ivy Bridge microarchitecture based processors. |
| 117 | +PROC(IvyBridge, "ivybridge", PROC_64_BIT) |
| 118 | +PROC_ALIAS(IvyBridge, "core-avx-i") |
| 119 | + |
| 120 | +/// \name Haswell |
| 121 | +/// Haswell microarchitecture based processors. |
| 122 | +PROC(Haswell, "haswell", PROC_64_BIT) |
| 123 | +PROC_ALIAS(Haswell, "core-avx2") |
| 124 | + |
| 125 | +/// \name Broadwell |
| 126 | +/// Broadwell microarchitecture based processors. |
| 127 | +PROC(Broadwell, "broadwell", PROC_64_BIT) |
| 128 | + |
| 129 | +/// \name Skylake Client |
| 130 | +/// Skylake client microarchitecture based processors. |
| 131 | +PROC(SkylakeClient, "skylake", PROC_64_BIT) |
| 132 | + |
| 133 | +/// \name Skylake Server |
| 134 | +/// Skylake server microarchitecture based processors. |
| 135 | +PROC(SkylakeServer, "skylake-avx512", PROC_64_BIT) |
| 136 | +PROC_ALIAS(SkylakeServer, "skx") |
| 137 | + |
| 138 | +/// \name Cannonlake Client |
| 139 | +/// Cannonlake client microarchitecture based processors. |
| 140 | +PROC(Cannonlake, "cannonlake", PROC_64_BIT) |
| 141 | + |
| 142 | +/// \name Knights Landing |
| 143 | +/// Knights Landing processor. |
| 144 | +PROC(KNL, "knl", PROC_64_BIT) |
| 145 | + |
| 146 | +/// \name Knights Mill |
| 147 | +/// Knights Mill processor. |
| 148 | +PROC(KNM, "knm", PROC_64_BIT) |
| 149 | + |
| 150 | +/// \name Lakemont |
| 151 | +/// Lakemont microarchitecture based processors. |
| 152 | +PROC(Lakemont, "lakemont", PROC_32_BIT) |
| 153 | + |
| 154 | +/// \name K6 |
| 155 | +/// K6 architecture processors. |
| 156 | +//@{ |
| 157 | +PROC(K6, "k6", PROC_32_BIT) |
| 158 | +PROC(K6_2, "k6-2", PROC_32_BIT) |
| 159 | +PROC(K6_3, "k6-3", PROC_32_BIT) |
| 160 | +//@} |
| 161 | + |
| 162 | +/// \name K7 |
| 163 | +/// K7 architecture processors. |
| 164 | +//@{ |
| 165 | +PROC(Athlon, "athlon", PROC_32_BIT) |
| 166 | +PROC_ALIAS(Athlon, "athlon-tbird") |
| 167 | + |
| 168 | +PROC(AthlonXP, "athlon-xp", PROC_32_BIT) |
| 169 | +PROC_ALIAS(AthlonXP, "athlon-mp") |
| 170 | +PROC_ALIAS(AthlonXP, "athlon-4") |
| 171 | +//@} |
| 172 | + |
| 173 | +/// \name K8 |
| 174 | +/// K8 architecture processors. |
| 175 | +//@{ |
| 176 | +PROC(K8, "k8", PROC_64_BIT) |
| 177 | +PROC_ALIAS(K8, "athlon64") |
| 178 | +PROC_ALIAS(K8, "athlon-fx") |
| 179 | +PROC_ALIAS(K8, "opteron") |
| 180 | + |
| 181 | +PROC(K8SSE3, "k8-sse3", PROC_64_BIT) |
| 182 | +PROC_ALIAS(K8SSE3, "athlon64-sse3") |
| 183 | +PROC_ALIAS(K8SSE3, "opteron-sse3") |
| 184 | + |
| 185 | +PROC(AMDFAM10, "amdfam10", PROC_64_BIT) |
| 186 | +PROC_ALIAS(AMDFAM10, "barcelona") |
| 187 | +//@} |
| 188 | + |
| 189 | +/// \name Bobcat |
| 190 | +/// Bobcat architecture processors. |
| 191 | +//@{ |
| 192 | +PROC(BTVER1, "btver1", PROC_64_BIT) |
| 193 | +PROC(BTVER2, "btver2", PROC_64_BIT) |
| 194 | +//@} |
| 195 | + |
| 196 | +/// \name Bulldozer |
| 197 | +/// Bulldozer architecture processors. |
| 198 | +//@{ |
| 199 | +PROC(BDVER1, "bdver1", PROC_64_BIT) |
| 200 | +PROC(BDVER2, "bdver2", PROC_64_BIT) |
| 201 | +PROC(BDVER3, "bdver3", PROC_64_BIT) |
| 202 | +PROC(BDVER4, "bdver4", PROC_64_BIT) |
| 203 | +//@} |
| 204 | + |
| 205 | +/// \name zen |
| 206 | +/// Zen architecture processors. |
| 207 | +//@{ |
| 208 | +PROC(ZNVER1, "znver1", PROC_64_BIT) |
| 209 | +//@} |
| 210 | + |
| 211 | +/// This specification is deprecated and will be removed in the future. |
| 212 | +/// Users should prefer K8. |
| 213 | +// FIXME: Warn on this when the CPU is set to it. |
| 214 | +//@{ |
| 215 | +PROC(x86_64, "x86-64", PROC_64_BIT) |
| 216 | +//@} |
| 217 | + |
| 218 | +/// \name Geode |
| 219 | +/// Geode processors. |
| 220 | +//@{ |
| 221 | +PROC(Geode, "geode", PROC_32_BIT) |
| 222 | +//@} |
| 223 | + |
| 224 | + |
| 225 | +#undef PROC_64_BIT |
| 226 | +#undef PROC_32_BIT |
| 227 | +#undef PROC |
| 228 | +#undef PROC_ALIAS |
0 commit comments