@@ -139,6 +139,8 @@ X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_PANTHERLAKE, "wildcatlake")
139139#define X86_MICROARCH_LEVEL (ENUM, STR, PRIORITY, ABI_VALUE )
140140#endif
141141
142+ // These are the feature we can multiversion on. There are gaps because LLVM
143+ // doesn't support each support that GCC does.
142144X86_FEATURE_COMPAT (CMOV, " cmov" , 0 , 0 )
143145X86_FEATURE_COMPAT(MMX, " mmx" , 1 , 1 )
144146X86_FEATURE_COMPAT(POPCNT, " popcnt" , 9 , 2 )
@@ -163,12 +165,8 @@ X86_FEATURE_COMPAT(AVX512VL, "avx512vl", 20, 20)
163165X86_FEATURE_COMPAT(AVX512BW, " avx512bw" , 21 , 21 )
164166X86_FEATURE_COMPAT(AVX512DQ, " avx512dq" , 22 , 22 )
165167X86_FEATURE_COMPAT(AVX512CD, " avx512cd" , 23 , 23 )
166- X86_FEATURE (NF, " nf" )
167- X86_FEATURE (CF, " cf" )
168168X86_FEATURE_COMPAT(AVX512VBMI, " avx512vbmi" , 24 , 26 )
169169X86_FEATURE_COMPAT(AVX512IFMA, " avx512ifma" , 25 , 27 )
170- X86_FEATURE (AVX5124VNNIW, " avx5124vnniw" )
171- X86_FEATURE (AVX5124FMAPS, " avx5124fmaps" )
172170X86_FEATURE_COMPAT(AVX512VPOPCNTDQ, " avx512vpopcntdq" , 26 , 30 )
173171X86_FEATURE_COMPAT(AVX512VBMI2, " avx512vbmi2" , 27 , 31 )
174172X86_FEATURE_COMPAT(GFNI, " gfni" , 28 , 32 )
@@ -177,35 +175,24 @@ X86_FEATURE_COMPAT(AVX512VNNI, "avx512vnni", 30, 34)
177175X86_FEATURE_COMPAT(AVX512BITALG, " avx512bitalg" , 31 , 35 )
178176X86_FEATURE_COMPAT(AVX512BF16, " avx512bf16" , 32 , 36 )
179177X86_FEATURE_COMPAT(AVX512VP2INTERSECT, " avx512vp2intersect" , 33 , 37 )
180-
181- // Below Features has some missings comparing to gcc, it's because gcc has some
182- // not one-to-one mapped in llvm.
183178X86_FEATURE_COMPAT(ADX, " adx" , 0 , 40 )
184- X86_FEATURE (64BIT, " 64bit" )
185179X86_FEATURE_COMPAT(CLDEMOTE, " cldemote" , 0 , 42 )
186180X86_FEATURE_COMPAT(CLFLUSHOPT, " clflushopt" , 0 , 43 )
187181X86_FEATURE_COMPAT(CLWB, " clwb" , 0 , 44 )
188182X86_FEATURE_COMPAT(CLZERO, " clzero" , 0 , 45 )
189183X86_FEATURE_COMPAT(CMPXCHG16B, " cx16" , 0 , 46 )
190- X86_FEATURE (CMPXCHG8B, " cx8" )
191184X86_FEATURE_COMPAT(ENQCMD, " enqcmd" , 0 , 48 )
192185X86_FEATURE_COMPAT(F16C, " f16c" , 0 , 49 )
193186X86_FEATURE_COMPAT(FSGSBASE, " fsgsbase" , 0 , 50 )
194- X86_FEATURE (CRC32, " crc32" )
195- X86_FEATURE (INVPCID, " invpcid" )
196- X86_FEATURE (RDPRU, " rdpru" )
197187X86_FEATURE_COMPAT(SAHF, " sahf" , 0 , 54 )
198- X86_FEATURE (VZEROUPPER, " vzeroupper" )
199188X86_FEATURE_COMPAT(LWP, " lwp" , 0 , 56 )
200189X86_FEATURE_COMPAT(LZCNT, " lzcnt" , 0 , 57 )
201190X86_FEATURE_COMPAT(MOVBE, " movbe" , 0 , 58 )
202191X86_FEATURE_COMPAT(MOVDIR64B, " movdir64b" , 0 , 59 )
203192X86_FEATURE_COMPAT(MOVDIRI, " movdiri" , 0 , 60 )
204193X86_FEATURE_COMPAT(MWAITX, " mwaitx" , 0 , 61 )
205- X86_FEATURE (X87, " x87" )
206194X86_FEATURE_COMPAT(PCONFIG, " pconfig" , 0 , 63 )
207195X86_FEATURE_COMPAT(PKU, " pku" , 0 , 64 )
208- X86_FEATURE (EVEX512, " evex512" )
209196X86_FEATURE_COMPAT(PRFCHW, " prfchw" , 0 , 66 )
210197X86_FEATURE_COMPAT(PTWRITE, " ptwrite" , 0 , 67 )
211198X86_FEATURE_COMPAT(RDPID, " rdpid" , 0 , 68 )
@@ -231,18 +218,13 @@ X86_FEATURE_COMPAT(AMX_BF16, "amx-bf16", 0, 87)
231218X86_FEATURE_COMPAT(UINTR, " uintr" , 0 , 88 )
232219X86_FEATURE_COMPAT(HRESET, " hreset" , 0 , 89 )
233220X86_FEATURE_COMPAT(KL, " kl" , 0 , 90 )
234- X86_FEATURE (FXSR, " fxsr" )
235221X86_FEATURE_COMPAT(WIDEKL, " widekl" , 0 , 92 )
236222X86_FEATURE_COMPAT(AVXVNNI, " avxvnni" , 0 , 93 )
237223X86_FEATURE_COMPAT(AVX512FP16, " avx512fp16" , 0 , 94 )
238224X86_MICROARCH_LEVEL(X86_64_BASELINE, " x86-64" , 0 , 95 )
239225X86_MICROARCH_LEVEL(X86_64_V2, " x86-64-v2" , 0 , 96 )
240226X86_MICROARCH_LEVEL(X86_64_V3, " x86-64-v3" , 0 , 97 )
241227X86_MICROARCH_LEVEL(X86_64_V4, " x86-64-v4" , 0 , 98 )
242- X86_FEATURE (CCMP, " ccmp" )
243- X86_FEATURE (Push2Pop2, " push2pop2" )
244- X86_FEATURE (PPX, " ppx" )
245- X86_FEATURE (NDD, " ndd" )
246228X86_FEATURE_COMPAT(AVXIFMA, " avxifma" , 0 , 99 )
247229X86_FEATURE_COMPAT(AVXVNNIINT8, " avxvnniint8" , 0 , 100 )
248230X86_FEATURE_COMPAT(AVXNECONVERT, " avxneconvert" , 0 , 101 )
@@ -256,7 +238,6 @@ X86_FEATURE_COMPAT(SM3, "sm3", 0, 108)
256238X86_FEATURE_COMPAT(SHA512, " sha512" , 0 , 109 )
257239X86_FEATURE_COMPAT(SM4, " sm4" , 0 , 110 )
258240X86_FEATURE_COMPAT(APXF, " apxf" , 0 , 111 )
259- X86_FEATURE (EGPR, " egpr" )
260241X86_FEATURE_COMPAT(USERMSR, " usermsr" , 0 , 112 )
261242X86_FEATURE_COMPAT(AVX10_1, " avx10.1" , 34 , 114 )
262243X86_FEATURE_COMPAT(AVX10_2, " avx10.2" , 35 , 116 )
@@ -265,6 +246,26 @@ X86_FEATURE_COMPAT(AMX_TF32, "amx-tf32", 0, 118)
265246X86_FEATURE_COMPAT(AMX_FP8, " amx-fp8" , 0 , 120 )
266247X86_FEATURE_COMPAT(MOVRS, " movrs" , 0 , 121 )
267248X86_FEATURE_COMPAT(AMX_MOVRS, " amx-movrs" , 0 , 122 )
249+
250+ // Features we don't multiversion on.
251+ X86_FEATURE (NF, " nf" )
252+ X86_FEATURE (CF, " cf" )
253+ X86_FEATURE (AVX5124VNNIW, " avx5124vnniw" )
254+ X86_FEATURE (AVX5124FMAPS, " avx5124fmaps" )
255+ X86_FEATURE (64BIT, " 64bit" )
256+ X86_FEATURE (CMPXCHG8B, " cx8" )
257+ X86_FEATURE (CRC32, " crc32" )
258+ X86_FEATURE (INVPCID, " invpcid" )
259+ X86_FEATURE (RDPRU, " rdpru" )
260+ X86_FEATURE (VZEROUPPER, " vzeroupper" )
261+ X86_FEATURE (X87, " x87" )
262+ X86_FEATURE (EVEX512, " evex512" )
263+ X86_FEATURE (FXSR, " fxsr" )
264+ X86_FEATURE (CCMP, " ccmp" )
265+ X86_FEATURE (Push2Pop2, " push2pop2" )
266+ X86_FEATURE (PPX, " ppx" )
267+ X86_FEATURE (NDD, " ndd" )
268+ X86_FEATURE (EGPR, " egpr" )
268269X86_FEATURE (ZU, " zu" )
269270
270271// These features aren't really CPU features, but the frontend can set them.
0 commit comments