================ @@ -121,168 +121,162 @@ X86_CPU_SUBTYPE_ALIAS(INTEL_COREI7_PANTHERLAKE, "wildcatlake") #undef X86_CPU_SUBTYPE_ALIAS #undef X86_CPU_SUBTYPE -// This macro is used for cpu types present in compiler-rt/libgcc. The third -// parameter PRIORITY is as required by the attribute 'target' checking. Note -// that not all are supported/prioritized by GCC, so synchronization with GCC's -// implementation may require changing some existing values. -// -// We cannot just re-sort the list though because its order is dictated by the -// order of bits in CodeGenFunction::GetX86CpuSupportsMask. -// We cannot re-adjust the position of X86_FEATURE_COMPAT at the whole list. +// X86_FEATURE_COMPAT is used for cpu types present in compiler-rt/libgcc (i.e. +// types we can multiversion on). The third parameter PRIORITY is required +// by the attribute 'target' checking. + +// Order of bits has to match what's implemented in compiler-rt/libgcc. That's what the +// ABI_VALUE is for - CodeGenFunction::GetX86CpuSupportsMask uses it. #ifndef X86_FEATURE_COMPAT -#define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY) X86_FEATURE(ENUM, STR) +#define X86_FEATURE_COMPAT(ENUM, STR, PRIORITY, ABI_VALUE) X86_FEATURE(ENUM, STR) #endif #ifndef X86_FEATURE #define X86_FEATURE(ENUM, STR) #endif #ifndef X86_MICROARCH_LEVEL -#define X86_MICROARCH_LEVEL(ENUM, STR, PRIORITY) +#define X86_MICROARCH_LEVEL(ENUM, STR, PRIORITY, ABI_VALUE) #endif -X86_FEATURE_COMPAT(CMOV, "cmov", 0) -X86_FEATURE_COMPAT(MMX, "mmx", 1) -X86_FEATURE_COMPAT(POPCNT, "popcnt", 9) -X86_FEATURE_COMPAT(SSE, "sse", 2) -X86_FEATURE_COMPAT(SSE2, "sse2", 3) -X86_FEATURE_COMPAT(SSE3, "sse3", 4) -X86_FEATURE_COMPAT(SSSE3, "ssse3", 5) -X86_FEATURE_COMPAT(SSE4_1, "sse4.1", 7) -X86_FEATURE_COMPAT(SSE4_2, "sse4.2", 8) -X86_FEATURE_COMPAT(AVX, "avx", 12) -X86_FEATURE_COMPAT(AVX2, "avx2", 18) -X86_FEATURE_COMPAT(SSE4_A, "sse4a", 6) -X86_FEATURE_COMPAT(FMA4, "fma4", 14) -X86_FEATURE_COMPAT(XOP, "xop", 15) -X86_FEATURE_COMPAT(FMA, "fma", 16) -X86_FEATURE_COMPAT(AVX512F, "avx512f", 19) -X86_FEATURE_COMPAT(BMI, "bmi", 13) -X86_FEATURE_COMPAT(BMI2, "bmi2", 17) -X86_FEATURE_COMPAT(AES, "aes", 10) -X86_FEATURE_COMPAT(PCLMUL, "pclmul", 11) -X86_FEATURE_COMPAT(AVX512VL, "avx512vl", 20) -X86_FEATURE_COMPAT(AVX512BW, "avx512bw", 21) -X86_FEATURE_COMPAT(AVX512DQ, "avx512dq", 22) -X86_FEATURE_COMPAT(AVX512CD, "avx512cd", 23) +X86_FEATURE_COMPAT(CMOV, "cmov", 0, 0) +X86_FEATURE_COMPAT(MMX, "mmx", 1, 1) +X86_FEATURE_COMPAT(POPCNT, "popcnt", 9, 2) +X86_FEATURE_COMPAT(SSE, "sse", 2, 3) +X86_FEATURE_COMPAT(SSE2, "sse2", 3, 4) +X86_FEATURE_COMPAT(SSE3, "sse3", 4, 5) +X86_FEATURE_COMPAT(SSSE3, "ssse3", 5, 6) +X86_FEATURE_COMPAT(SSE4_1, "sse4.1", 7, 7) +X86_FEATURE_COMPAT(SSE4_2, "sse4.2", 8, 8) +X86_FEATURE_COMPAT(AVX, "avx", 12, 9) +X86_FEATURE_COMPAT(AVX2, "avx2", 18, 10) +X86_FEATURE_COMPAT(SSE4_A, "sse4a", 6, 11) +X86_FEATURE_COMPAT(FMA4, "fma4", 14, 12) +X86_FEATURE_COMPAT(XOP, "xop", 15, 13) +X86_FEATURE_COMPAT(FMA, "fma", 16, 14) +X86_FEATURE_COMPAT(AVX512F, "avx512f", 19, 15) +X86_FEATURE_COMPAT(BMI, "bmi", 13, 16) +X86_FEATURE_COMPAT(BMI2, "bmi2", 17, 17) +X86_FEATURE_COMPAT(AES, "aes", 10, 18) +X86_FEATURE_COMPAT(PCLMUL, "pclmul", 11, 19) +X86_FEATURE_COMPAT(AVX512VL, "avx512vl", 20, 20) +X86_FEATURE_COMPAT(AVX512BW, "avx512bw", 21, 21) +X86_FEATURE_COMPAT(AVX512DQ, "avx512dq", 22, 22) +X86_FEATURE_COMPAT(AVX512CD, "avx512cd", 23, 23) X86_FEATURE (NF, "nf") X86_FEATURE (CF, "cf") -X86_FEATURE_COMPAT(AVX512VBMI, "avx512vbmi", 24) -X86_FEATURE_COMPAT(AVX512IFMA, "avx512ifma", 25) -X86_FEATURE_COMPAT(AVX5124VNNIW, "avx5124vnniw", 26) -X86_FEATURE_COMPAT(AVX5124FMAPS, "avx5124fmaps", 27) -X86_FEATURE_COMPAT(AVX512VPOPCNTDQ, "avx512vpopcntdq", 28) -X86_FEATURE_COMPAT(AVX512VBMI2, "avx512vbmi2", 29) -X86_FEATURE_COMPAT(GFNI, "gfni", 30) -X86_FEATURE_COMPAT(VPCLMULQDQ, "vpclmulqdq", 31) -X86_FEATURE_COMPAT(AVX512VNNI, "avx512vnni", 32) -X86_FEATURE_COMPAT(AVX512BITALG, "avx512bitalg", 33) -X86_FEATURE_COMPAT(AVX512BF16, "avx512bf16", 34) -X86_FEATURE_COMPAT(AVX512VP2INTERSECT, "avx512vp2intersect", 35) +X86_FEATURE_COMPAT(AVX512VBMI, "avx512vbmi", 24, 26) +X86_FEATURE_COMPAT(AVX512IFMA, "avx512ifma", 25, 27) +X86_FEATURE(AVX5124VNNIW, "avx5124vnniw") +X86_FEATURE(AVX5124FMAPS, "avx5124fmaps") +X86_FEATURE_COMPAT(AVX512VPOPCNTDQ, "avx512vpopcntdq", 26, 30) +X86_FEATURE_COMPAT(AVX512VBMI2, "avx512vbmi2", 27, 31) +X86_FEATURE_COMPAT(GFNI, "gfni", 28, 32) +X86_FEATURE_COMPAT(VPCLMULQDQ, "vpclmulqdq", 29, 33) +X86_FEATURE_COMPAT(AVX512VNNI, "avx512vnni", 30, 34) +X86_FEATURE_COMPAT(AVX512BITALG, "avx512bitalg", 31, 35) +X86_FEATURE_COMPAT(AVX512BF16, "avx512bf16", 32, 36) +X86_FEATURE_COMPAT(AVX512VP2INTERSECT, "avx512vp2intersect", 33, 37) ---------------- e-kud wrote:
Just as an idea, if we are touching all these lines, maybe align the second argument column among all entries? https://github.com/llvm/llvm-project/pull/168750 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
