1 | //===- X86TargetParser.def - X86 target parsing defines ---------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file provides defines to build up the X86 target parser's logic. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | // NOTE: NO INCLUDE GUARD DESIRED! |
14 | |
15 | #ifndef X86_VENDOR |
16 | #define X86_VENDOR(ENUM, STR) |
17 | #endif |
18 | X86_VENDOR(VENDOR_INTEL, "intel" ) |
19 | X86_VENDOR(VENDOR_AMD, "amd" ) |
20 | #undef X86_VENDOR |
21 | |
22 | // This macro is used for cpu types present in compiler-rt/libgcc. |
23 | #ifndef X86_CPU_TYPE |
24 | #define X86_CPU_TYPE(ENUM, STR) |
25 | #endif |
26 | |
27 | #ifndef X86_CPU_TYPE_ALIAS |
28 | #define X86_CPU_TYPE_ALIAS(ENUM, STR) |
29 | #endif |
30 | |
31 | // This list must match what is implemented in libgcc and compilert-rt. Clang |
32 | // uses this to know how to implement __builtin_cpu_is. |
33 | X86_CPU_TYPE(INTEL_BONNELL, "bonnell" ) |
34 | X86_CPU_TYPE(INTEL_CORE2, "core2" ) |
35 | X86_CPU_TYPE(INTEL_COREI7, "corei7" ) |
36 | X86_CPU_TYPE(AMDFAM10H, "amdfam10h" ) |
37 | X86_CPU_TYPE(AMDFAM15H, "amdfam15h" ) |
38 | X86_CPU_TYPE(INTEL_SILVERMONT, "silvermont" ) |
39 | X86_CPU_TYPE(INTEL_KNL, "knl" ) |
40 | X86_CPU_TYPE(AMD_BTVER1, "btver1" ) |
41 | X86_CPU_TYPE(AMD_BTVER2, "btver2" ) |
42 | X86_CPU_TYPE(AMDFAM17H, "amdfam17h" ) |
43 | X86_CPU_TYPE(INTEL_KNM, "knm" ) |
44 | X86_CPU_TYPE(INTEL_GOLDMONT, "goldmont" ) |
45 | X86_CPU_TYPE(INTEL_GOLDMONT_PLUS, "goldmont-plus" ) |
46 | X86_CPU_TYPE(INTEL_TREMONT, "tremont" ) |
47 | X86_CPU_TYPE(AMDFAM19H, "amdfam19h" ) |
48 | X86_CPU_TYPE(ZHAOXIN_FAM7H, "zhaoxin_fam7h" ) |
49 | X86_CPU_TYPE(INTEL_SIERRAFOREST, "sierraforest" ) |
50 | X86_CPU_TYPE(INTEL_GRANDRIDGE, "grandridge" ) |
51 | X86_CPU_TYPE(INTEL_CLEARWATERFOREST, "clearwaterforest" ) |
52 | |
53 | // Alternate names supported by __builtin_cpu_is and target multiversioning. |
54 | X86_CPU_TYPE_ALIAS(INTEL_BONNELL, "atom" ) |
55 | X86_CPU_TYPE_ALIAS(AMDFAM10H, "amdfam10" ) |
56 | X86_CPU_TYPE_ALIAS(AMDFAM15H, "amdfam15" ) |
57 | X86_CPU_TYPE_ALIAS(INTEL_SILVERMONT, "slm" ) |
58 | |
59 | #undef X86_CPU_TYPE_ALIAS |
60 | #undef X86_CPU_TYPE |
61 | |
62 | // This macro is used for cpu subtypes present in compiler-rt/libgcc. |
63 | #ifndef X86_CPU_SUBTYPE |
64 | #define X86_CPU_SUBTYPE(ENUM, STR) |
65 | #endif |
66 | |
67 | #ifndef X86_CPU_SUBTYPE_ALIAS |
68 | #define X86_CPU_SUBTYPE_ALIAS(ENUM, STR) |
69 | #endif |
70 | |
71 | // This list must match what is implemented in libgcc and compilert-rt. Clang |
72 | // uses this to know how to implement __builtin_cpu_is. |
73 | X86_CPU_SUBTYPE(INTEL_COREI7_NEHALEM, "nehalem" ) |
74 | X86_CPU_SUBTYPE(INTEL_COREI7_WESTMERE, "westmere" ) |
75 | X86_CPU_SUBTYPE(INTEL_COREI7_SANDYBRIDGE, "sandybridge" ) |
76 | X86_CPU_SUBTYPE(AMDFAM10H_BARCELONA, "barcelona" ) |
77 | X86_CPU_SUBTYPE(AMDFAM10H_SHANGHAI, "shanghai" ) |
78 | X86_CPU_SUBTYPE(AMDFAM10H_ISTANBUL, "istanbul" ) |
79 | X86_CPU_SUBTYPE(AMDFAM15H_BDVER1, "bdver1" ) |
80 | X86_CPU_SUBTYPE(AMDFAM15H_BDVER2, "bdver2" ) |
81 | X86_CPU_SUBTYPE(AMDFAM15H_BDVER3, "bdver3" ) |
82 | X86_CPU_SUBTYPE(AMDFAM15H_BDVER4, "bdver4" ) |
83 | X86_CPU_SUBTYPE(AMDFAM17H_ZNVER1, "znver1" ) |
84 | X86_CPU_SUBTYPE(INTEL_COREI7_IVYBRIDGE, "ivybridge" ) |
85 | X86_CPU_SUBTYPE(INTEL_COREI7_HASWELL, "haswell" ) |
86 | X86_CPU_SUBTYPE(INTEL_COREI7_BROADWELL, "broadwell" ) |
87 | X86_CPU_SUBTYPE(INTEL_COREI7_SKYLAKE, "skylake" ) |
88 | X86_CPU_SUBTYPE(INTEL_COREI7_SKYLAKE_AVX512, "skylake-avx512" ) |
89 | X86_CPU_SUBTYPE(INTEL_COREI7_CANNONLAKE, "cannonlake" ) |
90 | X86_CPU_SUBTYPE(INTEL_COREI7_ICELAKE_CLIENT, "icelake-client" ) |
91 | X86_CPU_SUBTYPE(INTEL_COREI7_ICELAKE_SERVER, "icelake-server" ) |
92 | X86_CPU_SUBTYPE(AMDFAM17H_ZNVER2, "znver2" ) |
93 | X86_CPU_SUBTYPE(INTEL_COREI7_CASCADELAKE, "cascadelake" ) |
94 | X86_CPU_SUBTYPE(INTEL_COREI7_TIGERLAKE, "tigerlake" ) |
95 | X86_CPU_SUBTYPE(INTEL_COREI7_COOPERLAKE, "cooperlake" ) |
96 | X86_CPU_SUBTYPE(INTEL_COREI7_SAPPHIRERAPIDS, "sapphirerapids" ) |
97 | X86_CPU_SUBTYPE(INTEL_COREI7_ALDERLAKE, "alderlake" ) |
98 | X86_CPU_SUBTYPE(AMDFAM19H_ZNVER3, "znver3" ) |
99 | X86_CPU_SUBTYPE(INTEL_COREI7_ROCKETLAKE, "rocketlake" ) |
100 | X86_CPU_SUBTYPE(ZHAOXIN_FAM7H_LUJIAZUI, "zhaoxin_fam7h_lujiazui" ) |
101 | X86_CPU_SUBTYPE(AMDFAM19H_ZNVER4, "znver4" ) |
102 | X86_CPU_SUBTYPE(INTEL_COREI7_GRANITERAPIDS, "graniterapids" ) |
103 | X86_CPU_SUBTYPE(INTEL_COREI7_GRANITERAPIDS_D,"graniterapids-d" ) |
104 | X86_CPU_SUBTYPE(INTEL_COREI7_ARROWLAKE, "arrowlake" ) |
105 | X86_CPU_SUBTYPE(INTEL_COREI7_ARROWLAKE_S, "arrowlake-s" ) |
106 | X86_CPU_SUBTYPE(INTEL_COREI7_PANTHERLAKE, "pantherlake" ) |
107 | |
108 | // Alternate names supported by __builtin_cpu_is and target multiversioning. |
109 | X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_ALDERLAKE, "raptorlake" ) |
110 | X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_ALDERLAKE, "meteorlake" ) |
111 | X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_SAPPHIRERAPIDS, "emeraldrapids" ) |
112 | X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_ARROWLAKE_S,"lunarlake" ) |
113 | X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_ALDERLAKE, "gracemont" ) |
114 | |
115 | #undef X86_CPU_SUBTYPE_ALIAS |
116 | #undef X86_CPU_SUBTYPE |
117 | |
118 | // This macro is used for cpu types present in compiler-rt/libgcc. The third |
119 | // parameter PRIORITY is as required by the attribute 'target' checking. Note |
120 | // that not all are supported/prioritized by GCC, so synchronization with GCC's |
121 | // implementation may require changing some existing values. |
122 | // |
123 | // We cannot just re-sort the list though because its order is dictated by the |
124 | // order of bits in CodeGenFunction::GetX86CpuSupportsMask. |
125 | // We cannot re-adjust the position of X86_FEATURE_COMPAT at the whole list. |
126 | #ifndef X86_FEATURE_COMPAT |
127 | #define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY) X86_FEATURE(ENUM, STR) |
128 | #endif |
129 | |
130 | #ifndef X86_FEATURE |
131 | #define X86_FEATURE(ENUM, STR) |
132 | #endif |
133 | |
134 | #ifndef X86_MICROARCH_LEVEL |
135 | #define X86_MICROARCH_LEVEL(ENUM, STR, PRIORITY) |
136 | #endif |
137 | |
138 | X86_FEATURE_COMPAT(CMOV, "cmov" , 0) |
139 | X86_FEATURE_COMPAT(MMX, "mmx" , 1) |
140 | X86_FEATURE_COMPAT(POPCNT, "popcnt" , 9) |
141 | X86_FEATURE_COMPAT(SSE, "sse" , 2) |
142 | X86_FEATURE_COMPAT(SSE2, "sse2" , 3) |
143 | X86_FEATURE_COMPAT(SSE3, "sse3" , 4) |
144 | X86_FEATURE_COMPAT(SSSE3, "ssse3" , 5) |
145 | X86_FEATURE_COMPAT(SSE4_1, "sse4.1" , 7) |
146 | X86_FEATURE_COMPAT(SSE4_2, "sse4.2" , 8) |
147 | X86_FEATURE_COMPAT(AVX, "avx" , 12) |
148 | X86_FEATURE_COMPAT(AVX2, "avx2" , 18) |
149 | X86_FEATURE_COMPAT(SSE4_A, "sse4a" , 6) |
150 | X86_FEATURE_COMPAT(FMA4, "fma4" , 14) |
151 | X86_FEATURE_COMPAT(XOP, "xop" , 15) |
152 | X86_FEATURE_COMPAT(FMA, "fma" , 16) |
153 | X86_FEATURE_COMPAT(AVX512F, "avx512f" , 19) |
154 | X86_FEATURE_COMPAT(BMI, "bmi" , 13) |
155 | X86_FEATURE_COMPAT(BMI2, "bmi2" , 17) |
156 | X86_FEATURE_COMPAT(AES, "aes" , 10) |
157 | X86_FEATURE_COMPAT(PCLMUL, "pclmul" , 11) |
158 | X86_FEATURE_COMPAT(AVX512VL, "avx512vl" , 20) |
159 | X86_FEATURE_COMPAT(AVX512BW, "avx512bw" , 21) |
160 | X86_FEATURE_COMPAT(AVX512DQ, "avx512dq" , 22) |
161 | X86_FEATURE_COMPAT(AVX512CD, "avx512cd" , 23) |
162 | X86_FEATURE_COMPAT(AVX512ER, "avx512er" , 24) |
163 | X86_FEATURE_COMPAT(AVX512PF, "avx512pf" , 25) |
164 | X86_FEATURE_COMPAT(AVX512VBMI, "avx512vbmi" , 26) |
165 | X86_FEATURE_COMPAT(AVX512IFMA, "avx512ifma" , 27) |
166 | X86_FEATURE_COMPAT(AVX5124VNNIW, "avx5124vnniw" , 28) |
167 | X86_FEATURE_COMPAT(AVX5124FMAPS, "avx5124fmaps" , 29) |
168 | X86_FEATURE_COMPAT(AVX512VPOPCNTDQ, "avx512vpopcntdq" , 30) |
169 | X86_FEATURE_COMPAT(AVX512VBMI2, "avx512vbmi2" , 31) |
170 | X86_FEATURE_COMPAT(GFNI, "gfni" , 32) |
171 | X86_FEATURE_COMPAT(VPCLMULQDQ, "vpclmulqdq" , 33) |
172 | X86_FEATURE_COMPAT(AVX512VNNI, "avx512vnni" , 34) |
173 | X86_FEATURE_COMPAT(AVX512BITALG, "avx512bitalg" , 35) |
174 | X86_FEATURE_COMPAT(AVX512BF16, "avx512bf16" , 36) |
175 | X86_FEATURE_COMPAT(AVX512VP2INTERSECT, "avx512vp2intersect" , 37) |
176 | // Below Features has some missings comparing to gcc, it's because gcc has some |
177 | // not one-to-one mapped in llvm. |
178 | X86_FEATURE_COMPAT(3DNOW, "3dnow" , 0) |
179 | X86_FEATURE (3DNOWA, "3dnowa" ) |
180 | X86_FEATURE_COMPAT(ADX, "adx" , 0) |
181 | X86_FEATURE (64BIT, "64bit" ) |
182 | X86_FEATURE_COMPAT(CLDEMOTE, "cldemote" , 0) |
183 | X86_FEATURE_COMPAT(CLFLUSHOPT, "clflushopt" , 0) |
184 | X86_FEATURE_COMPAT(CLWB, "clwb" , 0) |
185 | X86_FEATURE_COMPAT(CLZERO, "clzero" , 0) |
186 | X86_FEATURE_COMPAT(CMPXCHG16B, "cx16" , 0) |
187 | X86_FEATURE (CMPXCHG8B, "cx8" ) |
188 | X86_FEATURE_COMPAT(ENQCMD, "enqcmd" , 0) |
189 | X86_FEATURE_COMPAT(F16C, "f16c" , 0) |
190 | X86_FEATURE_COMPAT(FSGSBASE, "fsgsbase" , 0) |
191 | X86_FEATURE (CRC32, "crc32" ) |
192 | X86_FEATURE (INVPCID, "invpcid" ) |
193 | X86_FEATURE (RDPRU, "rdpru" ) |
194 | X86_FEATURE (SAHF, "sahf" ) |
195 | X86_FEATURE (VZEROUPPER, "vzeroupper" ) |
196 | X86_FEATURE_COMPAT(LWP, "lwp" , 0) |
197 | X86_FEATURE_COMPAT(LZCNT, "lzcnt" , 0) |
198 | X86_FEATURE_COMPAT(MOVBE, "movbe" , 0) |
199 | X86_FEATURE_COMPAT(MOVDIR64B, "movdir64b" , 0) |
200 | X86_FEATURE_COMPAT(MOVDIRI, "movdiri" , 0) |
201 | X86_FEATURE_COMPAT(MWAITX, "mwaitx" , 0) |
202 | X86_FEATURE (X87, "x87" ) |
203 | X86_FEATURE_COMPAT(PCONFIG, "pconfig" , 0) |
204 | X86_FEATURE_COMPAT(PKU, "pku" , 0) |
205 | X86_FEATURE_COMPAT(PREFETCHWT1, "prefetchwt1" , 0) |
206 | X86_FEATURE_COMPAT(PRFCHW, "prfchw" , 0) |
207 | X86_FEATURE_COMPAT(PTWRITE, "ptwrite" , 0) |
208 | X86_FEATURE_COMPAT(RDPID, "rdpid" , 0) |
209 | X86_FEATURE_COMPAT(RDRND, "rdrnd" , 0) |
210 | X86_FEATURE_COMPAT(RDSEED, "rdseed" , 0) |
211 | X86_FEATURE_COMPAT(RTM, "rtm" , 0) |
212 | X86_FEATURE_COMPAT(SERIALIZE, "serialize" , 0) |
213 | X86_FEATURE_COMPAT(SGX, "sgx" , 0) |
214 | X86_FEATURE_COMPAT(SHA, "sha" , 0) |
215 | X86_FEATURE_COMPAT(SHSTK, "shstk" , 0) |
216 | X86_FEATURE_COMPAT(TBM, "tbm" , 0) |
217 | X86_FEATURE_COMPAT(TSXLDTRK, "tsxldtrk" , 0) |
218 | X86_FEATURE_COMPAT(VAES, "vaes" , 0) |
219 | X86_FEATURE_COMPAT(WAITPKG, "waitpkg" , 0) |
220 | X86_FEATURE_COMPAT(WBNOINVD, "wbnoinvd" , 0) |
221 | X86_FEATURE_COMPAT(XSAVE, "xsave" , 0) |
222 | X86_FEATURE_COMPAT(XSAVEC, "xsavec" , 0) |
223 | X86_FEATURE_COMPAT(XSAVEOPT, "xsaveopt" , 0) |
224 | X86_FEATURE_COMPAT(XSAVES, "xsaves" , 0) |
225 | X86_FEATURE_COMPAT(AMX_TILE, "amx-tile" , 0) |
226 | X86_FEATURE_COMPAT(AMX_INT8, "amx-int8" , 0) |
227 | X86_FEATURE_COMPAT(AMX_BF16, "amx-bf16" , 0) |
228 | X86_FEATURE_COMPAT(UINTR, "uintr" , 0) |
229 | X86_FEATURE_COMPAT(HRESET, "hreset" , 0) |
230 | X86_FEATURE_COMPAT(KL, "kl" , 0) |
231 | X86_FEATURE (FXSR, "fxsr" ) |
232 | X86_FEATURE_COMPAT(WIDEKL, "widekl" , 0) |
233 | X86_FEATURE_COMPAT(AVXVNNI, "avxvnni" , 0) |
234 | X86_FEATURE_COMPAT(AVX512FP16, "avx512fp16" , 0) |
235 | X86_FEATURE (CCMP, "ccmp" ) |
236 | X86_FEATURE (Push2Pop2, "push2pop2" ) |
237 | X86_FEATURE (PPX, "ppx" ) |
238 | X86_FEATURE (NDD, "ndd" ) |
239 | X86_FEATURE_COMPAT(AVXIFMA, "avxifma" , 0) |
240 | X86_FEATURE_COMPAT(AVXVNNIINT8, "avxvnniint8" , 0) |
241 | X86_FEATURE_COMPAT(AVXNECONVERT, "avxneconvert" , 0) |
242 | X86_FEATURE_COMPAT(CMPCCXADD, "cmpccxadd" , 0) |
243 | X86_FEATURE_COMPAT(AMX_FP16, "amx-fp16" , 0) |
244 | X86_FEATURE_COMPAT(PREFETCHI, "prefetchi" , 0) |
245 | X86_FEATURE_COMPAT(RAOINT, "raoint" , 0) |
246 | X86_FEATURE_COMPAT(AMX_COMPLEX, "amx-complex" , 0) |
247 | X86_FEATURE_COMPAT(AVXVNNIINT16, "avxvnniint16" , 0) |
248 | X86_FEATURE_COMPAT(SM3, "sm3" , 0) |
249 | X86_FEATURE_COMPAT(SHA512, "sha512" , 0) |
250 | X86_FEATURE_COMPAT(SM4, "sm4" , 0) |
251 | X86_FEATURE (EGPR, "egpr" ) |
252 | X86_FEATURE_COMPAT(USERMSR, "usermsr" , 0) |
253 | X86_FEATURE_COMPAT(AVX10_1, "avx10.1-256" , 0) |
254 | X86_FEATURE_COMPAT(AVX10_1_512, "avx10.1-512" , 0) |
255 | X86_FEATURE (EVEX512, "evex512" ) |
256 | X86_FEATURE (CF, "cf" ) |
257 | // These features aren't really CPU features, but the frontend can set them. |
258 | X86_FEATURE (RETPOLINE_EXTERNAL_THUNK, "retpoline-external-thunk" ) |
259 | X86_FEATURE (RETPOLINE_INDIRECT_BRANCHES, "retpoline-indirect-branches" ) |
260 | X86_FEATURE (RETPOLINE_INDIRECT_CALLS, "retpoline-indirect-calls" ) |
261 | X86_FEATURE (LVI_CFI, "lvi-cfi" ) |
262 | X86_FEATURE (LVI_LOAD_HARDENING, "lvi-load-hardening" ) |
263 | |
264 | X86_MICROARCH_LEVEL(X86_64_BASELINE,"x86-64" , 95) |
265 | X86_MICROARCH_LEVEL(X86_64_V2, "x86-64-v2" , 96) |
266 | X86_MICROARCH_LEVEL(X86_64_V3, "x86-64-v3" , 97) |
267 | X86_MICROARCH_LEVEL(X86_64_V4, "x86-64-v4" , 98) |
268 | X86_MICROARCH_LEVEL(APXF, "apxf" , 111) |
269 | #undef X86_FEATURE_COMPAT |
270 | #undef X86_FEATURE |
271 | #undef X86_MICROARCH_LEVEL |
272 | |