From 3fb40ce167ff5f05afadf8f525ff9e17350d6d7f Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sun, 28 Mar 2021 11:25:21 -0700 Subject: [PATCH] [X86] Don't define vpclmulqdq or vaes intrinsics in the headers unless avx512fintrin.h has been included. The intrinsics won't compile unless avx512fintrin.h has declared the 512 bit types. --- clang/lib/Headers/immintrin.h | 10 ++++----- clang/lib/Headers/vaesintrin.h | 41 ++++++++++++++++++------------------ clang/lib/Headers/vpclmulqdqintrin.h | 2 ++ 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/clang/lib/Headers/immintrin.h b/clang/lib/Headers/immintrin.h index 22f7a52..56d3dad 100644 --- a/clang/lib/Headers/immintrin.h +++ b/clang/lib/Headers/immintrin.h @@ -72,11 +72,6 @@ #include #endif -#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \ - defined(__VPCLMULQDQ__) -#include -#endif - /* No feature check desired due to internal checks */ #include @@ -231,6 +226,11 @@ #endif #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \ + defined(__VPCLMULQDQ__) +#include +#endif + +#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \ defined(__VAES__) #include #endif diff --git a/clang/lib/Headers/vaesintrin.h b/clang/lib/Headers/vaesintrin.h index c4d5c3e..f3c0807 100644 --- a/clang/lib/Headers/vaesintrin.h +++ b/clang/lib/Headers/vaesintrin.h @@ -28,13 +28,6 @@ static __inline__ __m256i __DEFAULT_FN_ATTRS (__v4di) __B); } -static __inline__ __m512i __DEFAULT_FN_ATTRS_F - _mm512_aesenc_epi128(__m512i __A, __m512i __B) -{ - return (__m512i) __builtin_ia32_aesenc512((__v8di) __A, - (__v8di) __B); -} - static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_aesdec_epi128(__m256i __A, __m256i __B) { @@ -42,32 +35,40 @@ static __inline__ __m256i __DEFAULT_FN_ATTRS (__v4di) __B); } -static __inline__ __m512i __DEFAULT_FN_ATTRS_F - _mm512_aesdec_epi128(__m512i __A, __m512i __B) +static __inline__ __m256i __DEFAULT_FN_ATTRS + _mm256_aesenclast_epi128(__m256i __A, __m256i __B) { - return (__m512i) __builtin_ia32_aesdec512((__v8di) __A, - (__v8di) __B); + return (__m256i) __builtin_ia32_aesenclast256((__v4di) __A, + (__v4di) __B); } static __inline__ __m256i __DEFAULT_FN_ATTRS - _mm256_aesenclast_epi128(__m256i __A, __m256i __B) + _mm256_aesdeclast_epi128(__m256i __A, __m256i __B) { - return (__m256i) __builtin_ia32_aesenclast256((__v4di) __A, + return (__m256i) __builtin_ia32_aesdeclast256((__v4di) __A, (__v4di) __B); } +#ifdef __AVX512FINTRIN_H static __inline__ __m512i __DEFAULT_FN_ATTRS_F - _mm512_aesenclast_epi128(__m512i __A, __m512i __B) + _mm512_aesenc_epi128(__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A, + return (__m512i) __builtin_ia32_aesenc512((__v8di) __A, (__v8di) __B); } -static __inline__ __m256i __DEFAULT_FN_ATTRS - _mm256_aesdeclast_epi128(__m256i __A, __m256i __B) +static __inline__ __m512i __DEFAULT_FN_ATTRS_F + _mm512_aesdec_epi128(__m512i __A, __m512i __B) { - return (__m256i) __builtin_ia32_aesdeclast256((__v4di) __A, - (__v4di) __B); + return (__m512i) __builtin_ia32_aesdec512((__v8di) __A, + (__v8di) __B); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS_F + _mm512_aesenclast_epi128(__m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A, + (__v8di) __B); } static __inline__ __m512i __DEFAULT_FN_ATTRS_F @@ -76,7 +77,7 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS_F return (__m512i) __builtin_ia32_aesdeclast512((__v8di) __A, (__v8di) __B); } - +#endif // __AVX512FINTRIN_H #undef __DEFAULT_FN_ATTRS #undef __DEFAULT_FN_ATTRS_F diff --git a/clang/lib/Headers/vpclmulqdqintrin.h b/clang/lib/Headers/vpclmulqdqintrin.h index 470d832..44daadb 100644 --- a/clang/lib/Headers/vpclmulqdqintrin.h +++ b/clang/lib/Headers/vpclmulqdqintrin.h @@ -19,10 +19,12 @@ (__v4di)(__m256i)(B), \ (char)(I)) +#ifdef __AVX512FINTRIN_H #define _mm512_clmulepi64_epi128(A, B, I) \ (__m512i)__builtin_ia32_pclmulqdq512((__v8di)(__m512i)(A), \ (__v8di)(__m512i)(B), \ (char)(I)) +#endif // __AVX512FINTRIN_H #endif /* __VPCLMULQDQINTRIN_H */ -- 2.7.4