[X86] Don't define vpclmulqdq or vaes intrinsics in the headers unless avx512fintrin...
authorCraig Topper <craig.topper@sifive.com>
Sun, 28 Mar 2021 18:25:21 +0000 (11:25 -0700)
committerCraig Topper <craig.topper@sifive.com>
Sun, 28 Mar 2021 18:26:30 +0000 (11:26 -0700)
The intrinsics won't compile unless avx512fintrin.h has declared
the 512 bit types.

clang/lib/Headers/immintrin.h
clang/lib/Headers/vaesintrin.h
clang/lib/Headers/vpclmulqdqintrin.h

index 22f7a520c92943dd65ae202c3805fadabcc28273..56d3dadf6a334b3898449785f38e571a315da58e 100644 (file)
 #include <f16cintrin.h>
 #endif
 
-#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) ||      \
-    defined(__VPCLMULQDQ__)
-#include <vpclmulqdqintrin.h>
-#endif
-
 /* No feature check desired due to internal checks */
 #include <bmiintrin.h>
 
 #include <pkuintrin.h>
 #endif
 
+#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) ||      \
+    defined(__VPCLMULQDQ__)
+#include <vpclmulqdqintrin.h>
+#endif
+
 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) ||      \
     defined(__VAES__)
 #include <vaesintrin.h>
index c4d5c3e75140d4ff970ddd24d554302da34963c2..f3c0807bb94ab9977a27431ad31a8ef2429d22db 100644 (file)
@@ -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
index 470d832549058d8cd45eaf83bcc9b714c62cd1f2..44daadb07d57c1f11742d0d2c06cbbbf223f2d3a 100644 (file)
                                        (__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 */