blob: ec19ce4e7cdd1df51f148d4fc5bb8230e962d300 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- X86TargetParser.def - X86 target parsing defines ---------*- C++ -*-===//
2//
Andrew Walbran16937d02019-10-22 13:54:20 +01003// 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
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01006//
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
18X86_VENDOR(VENDOR_INTEL, "intel")
19X86_VENDOR(VENDOR_AMD, "amd")
20#undef X86_VENDOR
21
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010022// This macro is used for cpu types present in compiler-rt/libgcc.
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020023#ifndef X86_CPU_TYPE
24#define X86_CPU_TYPE(ENUM, STR)
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010025#endif
26
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020027#ifndef X86_CPU_TYPE_ALIAS
28#define X86_CPU_TYPE_ALIAS(ENUM, STR)
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010029#endif
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020030
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.
33X86_CPU_TYPE(INTEL_BONNELL, "bonnell")
34X86_CPU_TYPE(INTEL_CORE2, "core2")
35X86_CPU_TYPE(INTEL_COREI7, "corei7")
36X86_CPU_TYPE(AMDFAM10H, "amdfam10h")
37X86_CPU_TYPE(AMDFAM15H, "amdfam15h")
38X86_CPU_TYPE(INTEL_SILVERMONT, "silvermont")
39X86_CPU_TYPE(INTEL_KNL, "knl")
40X86_CPU_TYPE(AMD_BTVER1, "btver1")
41X86_CPU_TYPE(AMD_BTVER2, "btver2")
42X86_CPU_TYPE(AMDFAM17H, "amdfam17h")
43X86_CPU_TYPE(INTEL_KNM, "knm")
44X86_CPU_TYPE(INTEL_GOLDMONT, "goldmont")
45X86_CPU_TYPE(INTEL_GOLDMONT_PLUS, "goldmont-plus")
46X86_CPU_TYPE(INTEL_TREMONT, "tremont")
47X86_CPU_TYPE(AMDFAM19H, "amdfam19h")
48
49// Alternate names supported by __builtin_cpu_is and target multiversioning.
50X86_CPU_TYPE_ALIAS(INTEL_BONNELL, "atom")
51X86_CPU_TYPE_ALIAS(AMDFAM10H, "amdfam10")
52X86_CPU_TYPE_ALIAS(AMDFAM15H, "amdfam15")
53X86_CPU_TYPE_ALIAS(INTEL_SILVERMONT, "slm")
54
55#undef X86_CPU_TYPE_ALIAS
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010056#undef X86_CPU_TYPE
57
58// This macro is used for cpu subtypes present in compiler-rt/libgcc.
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010059#ifndef X86_CPU_SUBTYPE
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020060#define X86_CPU_SUBTYPE(ENUM, STR)
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010061#endif
62
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020063// This list must match what is implemented in libgcc and compilert-rt. Clang
64// uses this to know how to implement __builtin_cpu_is.
65X86_CPU_SUBTYPE(INTEL_COREI7_NEHALEM, "nehalem")
66X86_CPU_SUBTYPE(INTEL_COREI7_WESTMERE, "westmere")
67X86_CPU_SUBTYPE(INTEL_COREI7_SANDYBRIDGE, "sandybridge")
68X86_CPU_SUBTYPE(AMDFAM10H_BARCELONA, "barcelona")
69X86_CPU_SUBTYPE(AMDFAM10H_SHANGHAI, "shanghai")
70X86_CPU_SUBTYPE(AMDFAM10H_ISTANBUL, "istanbul")
71X86_CPU_SUBTYPE(AMDFAM15H_BDVER1, "bdver1")
72X86_CPU_SUBTYPE(AMDFAM15H_BDVER2, "bdver2")
73X86_CPU_SUBTYPE(AMDFAM15H_BDVER3, "bdver3")
74X86_CPU_SUBTYPE(AMDFAM15H_BDVER4, "bdver4")
75X86_CPU_SUBTYPE(AMDFAM17H_ZNVER1, "znver1")
76X86_CPU_SUBTYPE(INTEL_COREI7_IVYBRIDGE, "ivybridge")
77X86_CPU_SUBTYPE(INTEL_COREI7_HASWELL, "haswell")
78X86_CPU_SUBTYPE(INTEL_COREI7_BROADWELL, "broadwell")
79X86_CPU_SUBTYPE(INTEL_COREI7_SKYLAKE, "skylake")
80X86_CPU_SUBTYPE(INTEL_COREI7_SKYLAKE_AVX512, "skylake-avx512")
81X86_CPU_SUBTYPE(INTEL_COREI7_CANNONLAKE, "cannonlake")
82X86_CPU_SUBTYPE(INTEL_COREI7_ICELAKE_CLIENT, "icelake-client")
83X86_CPU_SUBTYPE(INTEL_COREI7_ICELAKE_SERVER, "icelake-server")
84X86_CPU_SUBTYPE(AMDFAM17H_ZNVER2, "znver2")
85X86_CPU_SUBTYPE(INTEL_COREI7_CASCADELAKE, "cascadelake")
86X86_CPU_SUBTYPE(INTEL_COREI7_TIGERLAKE, "tigerlake")
87X86_CPU_SUBTYPE(INTEL_COREI7_COOPERLAKE, "cooperlake")
88X86_CPU_SUBTYPE(INTEL_COREI7_SAPPHIRERAPIDS, "sapphirerapids")
89X86_CPU_SUBTYPE(INTEL_COREI7_ALDERLAKE, "alderlake")
90X86_CPU_SUBTYPE(AMDFAM19H_ZNVER3, "znver3")
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010091#undef X86_CPU_SUBTYPE
92
93
94// This macro is used for cpu types present in compiler-rt/libgcc.
95#ifndef X86_FEATURE_COMPAT
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020096#define X86_FEATURE_COMPAT(ENUM, STR) X86_FEATURE(ENUM, STR)
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010097#endif
98
99#ifndef X86_FEATURE
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200100#define X86_FEATURE(ENUM, STR)
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100101#endif
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200102
103X86_FEATURE_COMPAT(CMOV, "cmov")
104X86_FEATURE_COMPAT(MMX, "mmx")
105X86_FEATURE_COMPAT(POPCNT, "popcnt")
106X86_FEATURE_COMPAT(SSE, "sse")
107X86_FEATURE_COMPAT(SSE2, "sse2")
108X86_FEATURE_COMPAT(SSE3, "sse3")
109X86_FEATURE_COMPAT(SSSE3, "ssse3")
110X86_FEATURE_COMPAT(SSE4_1, "sse4.1")
111X86_FEATURE_COMPAT(SSE4_2, "sse4.2")
112X86_FEATURE_COMPAT(AVX, "avx")
113X86_FEATURE_COMPAT(AVX2, "avx2")
114X86_FEATURE_COMPAT(SSE4_A, "sse4a")
115X86_FEATURE_COMPAT(FMA4, "fma4")
116X86_FEATURE_COMPAT(XOP, "xop")
117X86_FEATURE_COMPAT(FMA, "fma")
118X86_FEATURE_COMPAT(AVX512F, "avx512f")
119X86_FEATURE_COMPAT(BMI, "bmi")
120X86_FEATURE_COMPAT(BMI2, "bmi2")
121X86_FEATURE_COMPAT(AES, "aes")
122X86_FEATURE_COMPAT(PCLMUL, "pclmul")
123X86_FEATURE_COMPAT(AVX512VL, "avx512vl")
124X86_FEATURE_COMPAT(AVX512BW, "avx512bw")
125X86_FEATURE_COMPAT(AVX512DQ, "avx512dq")
126X86_FEATURE_COMPAT(AVX512CD, "avx512cd")
127X86_FEATURE_COMPAT(AVX512ER, "avx512er")
128X86_FEATURE_COMPAT(AVX512PF, "avx512pf")
129X86_FEATURE_COMPAT(AVX512VBMI, "avx512vbmi")
130X86_FEATURE_COMPAT(AVX512IFMA, "avx512ifma")
131X86_FEATURE_COMPAT(AVX5124VNNIW, "avx5124vnniw")
132X86_FEATURE_COMPAT(AVX5124FMAPS, "avx5124fmaps")
133X86_FEATURE_COMPAT(AVX512VPOPCNTDQ, "avx512vpopcntdq")
134X86_FEATURE_COMPAT(AVX512VBMI2, "avx512vbmi2")
135X86_FEATURE_COMPAT(GFNI, "gfni")
136X86_FEATURE_COMPAT(VPCLMULQDQ, "vpclmulqdq")
137X86_FEATURE_COMPAT(AVX512VNNI, "avx512vnni")
138X86_FEATURE_COMPAT(AVX512BITALG, "avx512bitalg")
139X86_FEATURE_COMPAT(AVX512BF16, "avx512bf16")
140X86_FEATURE_COMPAT(AVX512VP2INTERSECT, "avx512vp2intersect")
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100141// Features below here are not in libgcc/compiler-rt.
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200142X86_FEATURE (3DNOW, "3dnow")
143X86_FEATURE (3DNOWA, "3dnowa")
144X86_FEATURE (64BIT, "64bit")
145X86_FEATURE (ADX, "adx")
146X86_FEATURE (AMX_BF16, "amx-bf16")
147X86_FEATURE (AMX_INT8, "amx-int8")
148X86_FEATURE (AMX_TILE, "amx-tile")
149X86_FEATURE (CLDEMOTE, "cldemote")
150X86_FEATURE (CLFLUSHOPT, "clflushopt")
151X86_FEATURE (CLWB, "clwb")
152X86_FEATURE (CLZERO, "clzero")
153X86_FEATURE (CMPXCHG16B, "cx16")
154X86_FEATURE (CMPXCHG8B, "cx8")
155X86_FEATURE (ENQCMD, "enqcmd")
156X86_FEATURE (F16C, "f16c")
157X86_FEATURE (FSGSBASE, "fsgsbase")
158X86_FEATURE (FXSR, "fxsr")
159X86_FEATURE (INVPCID, "invpcid")
160X86_FEATURE (KL, "kl")
161X86_FEATURE (WIDEKL, "widekl")
162X86_FEATURE (LWP, "lwp")
163X86_FEATURE (LZCNT, "lzcnt")
164X86_FEATURE (MOVBE, "movbe")
165X86_FEATURE (MOVDIR64B, "movdir64b")
166X86_FEATURE (MOVDIRI, "movdiri")
167X86_FEATURE (MWAITX, "mwaitx")
168X86_FEATURE (PCONFIG, "pconfig")
169X86_FEATURE (PKU, "pku")
170X86_FEATURE (PREFETCHWT1, "prefetchwt1")
171X86_FEATURE (PRFCHW, "prfchw")
172X86_FEATURE (PTWRITE, "ptwrite")
173X86_FEATURE (RDPID, "rdpid")
174X86_FEATURE (RDRND, "rdrnd")
175X86_FEATURE (RDSEED, "rdseed")
176X86_FEATURE (RTM, "rtm")
177X86_FEATURE (SAHF, "sahf")
178X86_FEATURE (SERIALIZE, "serialize")
179X86_FEATURE (SGX, "sgx")
180X86_FEATURE (SHA, "sha")
181X86_FEATURE (SHSTK, "shstk")
182X86_FEATURE (TBM, "tbm")
183X86_FEATURE (TSXLDTRK, "tsxldtrk")
184X86_FEATURE (UINTR, "uintr")
185X86_FEATURE (VAES, "vaes")
186X86_FEATURE (VZEROUPPER, "vzeroupper")
187X86_FEATURE (WAITPKG, "waitpkg")
188X86_FEATURE (WBNOINVD, "wbnoinvd")
189X86_FEATURE (X87, "x87")
190X86_FEATURE (XSAVE, "xsave")
191X86_FEATURE (XSAVEC, "xsavec")
192X86_FEATURE (XSAVEOPT, "xsaveopt")
193X86_FEATURE (XSAVES, "xsaves")
194X86_FEATURE (HRESET, "hreset")
195X86_FEATURE (AVXVNNI, "avxvnni")
196// These features aren't really CPU features, but the frontend can set them.
197X86_FEATURE (RETPOLINE_EXTERNAL_THUNK, "retpoline-external-thunk")
198X86_FEATURE (RETPOLINE_INDIRECT_BRANCHES, "retpoline-indirect-branches")
199X86_FEATURE (RETPOLINE_INDIRECT_CALLS, "retpoline-indirect-calls")
200X86_FEATURE (LVI_CFI, "lvi-cfi")
201X86_FEATURE (LVI_LOAD_HARDENING, "lvi-load-hardening")
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100202#undef X86_FEATURE_COMPAT
203#undef X86_FEATURE