]> xenbits.xensource.com Git - unikraft/libs/intel-intrinsics.git/commitdiff
Add compatibility with clang <= 13
authorAndrei Tatar <andrei@unikraft.io>
Mon, 17 Jul 2023 16:14:54 +0000 (18:14 +0200)
committerUnikraft <monkey@unikraft.io>
Thu, 10 Aug 2023 22:51:11 +0000 (22:51 +0000)
Implementations based off headers in LLVM 13.0.0.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
Reviewed-by: Radu Nichita <radunichita99@gmail.com>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #3

include/avx2intrin.h
include/avx512bwintrin.h
include/avx512fintrin.h
include/avx512vlintrin.h
include/emmintrin.h
include/smmintrin.h
include/tmmintrin.h

index b6ff8b232690beb23711c9afa598cf1f29d0bb8a..38367a3ffcffdae1ce3ce4fe1e4eec6f6b0fc1a6 100644 (file)
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_abs_epi8(__m256i __a)
 {
+#if (__clang_major__ < 14)
+    return (__m256i)__builtin_ia32_pabsb256((__v32qi)__a);
+#else
     return (__m256i)__builtin_elementwise_abs((__v32qs)__a);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_abs_epi16(__m256i __a)
 {
+#if (__clang_major__ < 14)
+    return (__m256i)__builtin_ia32_pabsw256((__v16hi)__a);
+#else
     return (__m256i)__builtin_elementwise_abs((__v16hi)__a);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_abs_epi32(__m256i __a)
 {
+#if (__clang_major__ < 14)
+    return (__m256i)__builtin_ia32_pabsd256((__v8si)__a);
+#else
     return (__m256i)__builtin_elementwise_abs((__v8si)__a);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
@@ -269,73 +281,121 @@ _mm256_madd_epi16(__m256i __a, __m256i __b)
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epi8(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxsb256((__v32qi)__a, (__v32qi)__b);
+#else
   return (__m256i)__builtin_elementwise_max((__v32qs)__a, (__v32qs)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epi16(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxsw256((__v16hi)__a, (__v16hi)__b);
+#else
   return (__m256i)__builtin_elementwise_max((__v16hi)__a, (__v16hi)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epi32(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxsd256((__v8si)__a, (__v8si)__b);
+#else
   return (__m256i)__builtin_elementwise_max((__v8si)__a, (__v8si)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epu8(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxub256((__v32qi)__a, (__v32qi)__b);
+#else
   return (__m256i)__builtin_elementwise_max((__v32qu)__a, (__v32qu)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epu16(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxuw256((__v16hi)__a, (__v16hi)__b);
+#else
   return (__m256i)__builtin_elementwise_max((__v16hu)__a, (__v16hu)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epu32(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxud256((__v8si)__a, (__v8si)__b);
+#else
   return (__m256i)__builtin_elementwise_max((__v8su)__a, (__v8su)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epi8(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminsb256((__v32qi)__a, (__v32qi)__b);
+#else
   return (__m256i)__builtin_elementwise_min((__v32qs)__a, (__v32qs)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epi16(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminsw256((__v16hi)__a, (__v16hi)__b);
+#else
   return (__m256i)__builtin_elementwise_min((__v16hi)__a, (__v16hi)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epi32(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminsd256((__v8si)__a, (__v8si)__b);
+#else
   return (__m256i)__builtin_elementwise_min((__v8si)__a, (__v8si)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epu8(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminub256((__v32qi)__a, (__v32qi)__b);
+#else
   return (__m256i)__builtin_elementwise_min((__v32qu)__a, (__v32qu)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epu16(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminuw256 ((__v16hi)__a, (__v16hi)__b);
+#else
   return (__m256i)__builtin_elementwise_min((__v16hu)__a, (__v16hu)__b);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epu32(__m256i __a, __m256i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminud256((__v8si)__a, (__v8si)__b);
+#else
   return (__m256i)__builtin_elementwise_min((__v8su)__a, (__v8su)__b);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS256
index 15d9bd0586285158cf905bc7b782f9a49ba51c56..717b92b9aaa28258ef299391e0aa18399c6cbcbd 100644 (file)
@@ -485,7 +485,11 @@ _mm512_mask_blend_epi16 (__mmask32 __U, __m512i __A, __m512i __W)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_abs_epi8 (__m512i __A)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pabsb512((__v64qi)__A);
+#else
   return (__m512i)__builtin_elementwise_abs((__v64qs)__A);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -507,7 +511,11 @@ _mm512_maskz_abs_epi8 (__mmask64 __U, __m512i __A)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_abs_epi16 (__m512i __A)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pabsw512((__v32hi)__A);
+#else
   return (__m512i)__builtin_elementwise_abs((__v32hi)__A);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -767,7 +775,11 @@ _mm512_maskz_avg_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epi8 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxsb512((__v64qi) __A, (__v64qi) __B);
+#else
   return (__m512i)__builtin_elementwise_max((__v64qs) __A, (__v64qs) __B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -789,7 +801,11 @@ _mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epi16 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxsw512((__v32hi) __A, (__v32hi) __B);
+#else
   return (__m512i)__builtin_elementwise_max((__v32hi) __A, (__v32hi) __B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -812,7 +828,11 @@ _mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epu8 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxub512((__v64qi)__A, (__v64qi)__B);
+#else
   return (__m512i)__builtin_elementwise_max((__v64qu)__A, (__v64qu)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -834,7 +854,11 @@ _mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epu16 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxuw512((__v32hi)__A, (__v32hi)__B);
+#else
   return (__m512i)__builtin_elementwise_max((__v32hu)__A, (__v32hu)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -856,7 +880,11 @@ _mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epi8 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminsb512((__v64qi) __A, (__v64qi) __B);
+#else
   return (__m512i)__builtin_elementwise_min((__v64qs) __A, (__v64qs) __B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -878,7 +906,11 @@ _mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epi16 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminsw512((__v32hi) __A, (__v32hi) __B);
+#else
   return (__m512i)__builtin_elementwise_min((__v32hi) __A, (__v32hi) __B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -900,7 +932,11 @@ _mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epu8 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminub512((__v64qi)__A, (__v64qi)__B);
+#else
   return (__m512i)__builtin_elementwise_min((__v64qu)__A, (__v64qu)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -922,7 +958,11 @@ _mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epu16 (__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminuw512((__v32hi)__A, (__v32hi)__B);
+#else
   return (__m512i)__builtin_elementwise_min((__v32hu)__A, (__v32hu)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
index fe5827829f097ed5b6eaa63c39c9e7a5b05f9557..cd1dc82bbc165592d1209700dc102e751f18a609 100644 (file)
@@ -1090,7 +1090,11 @@ static __inline __m512i
 __DEFAULT_FN_ATTRS512
 _mm512_max_epi32(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxsd512((__v16si)__A, (__v16si)__B);
+#else
   return (__m512i)__builtin_elementwise_max((__v16si)__A, (__v16si)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1112,7 +1116,11 @@ _mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epu32(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxud512((__v16si)__A, (__v16si)__B);
+#else
   return (__m512i)__builtin_elementwise_max((__v16su)__A, (__v16su)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1134,7 +1142,11 @@ _mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epi64(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxsq512((__v8di)__A, (__v8di)__B);
+#else
   return (__m512i)__builtin_elementwise_max((__v8di)__A, (__v8di)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1156,7 +1168,11 @@ _mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_max_epu64(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pmaxuq512((__v8di)__A, (__v8di)__B);
+#else
   return (__m512i)__builtin_elementwise_max((__v8du)__A, (__v8du)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1325,7 +1341,11 @@ static __inline __m512i
 __DEFAULT_FN_ATTRS512
 _mm512_min_epi32(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminsd512((__v16si)__A, (__v16si)__B);
+#else
   return (__m512i)__builtin_elementwise_min((__v16si)__A, (__v16si)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1347,7 +1367,11 @@ _mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epu32(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminud512((__v16si)__A, (__v16si)__B);
+#else
   return (__m512i)__builtin_elementwise_min((__v16su)__A, (__v16su)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1369,7 +1393,11 @@ _mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epi64(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminsq512((__v8di)__A, (__v8di)__B);
+#else
   return (__m512i)__builtin_elementwise_min((__v8di)__A, (__v8di)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1391,7 +1419,11 @@ _mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_min_epu64(__m512i __A, __m512i __B)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pminuq512((__v8di)__A, (__v8di)__B);
+#else
   return (__m512i)__builtin_elementwise_min((__v8du)__A, (__v8du)__B);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1850,7 +1882,11 @@ _mm512_mask_ceil_pd (__m512d __W, __mmask8 __U, __m512d __A)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_abs_epi64(__m512i __A)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pabsq512((__v8di)__A);
+#else
   return (__m512i)__builtin_elementwise_abs((__v8di)__A);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -1872,7 +1908,11 @@ _mm512_maskz_abs_epi64 (__mmask8 __U, __m512i __A)
 static __inline __m512i __DEFAULT_FN_ATTRS512
 _mm512_abs_epi32(__m512i __A)
 {
+#if (__clang_major__ < 14)
+  return (__m512i)__builtin_ia32_pabsd512((__v16si) __A);
+#else
   return (__m512i)__builtin_elementwise_abs((__v16si) __A);
+#endif
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS512
@@ -9332,11 +9372,19 @@ static __inline__ long long __DEFAULT_FN_ATTRS512 _mm512_reduce_mul_epi64(__m512
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512 _mm512_reduce_and_epi64(__m512i __W) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_and_q512(__W);
+#else
   return __builtin_reduce_and((__v8di)__W);
+#endif
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512 _mm512_reduce_or_epi64(__m512i __W) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_or_q512(__W);
+#else
   return __builtin_reduce_or((__v8di)__W);
+#endif
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512
@@ -9362,13 +9410,21 @@ _mm512_mask_reduce_mul_epi64(__mmask8 __M, __m512i __W) {
 static __inline__ long long __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_and_epi64(__mmask8 __M, __m512i __W) {
   __W = _mm512_mask_mov_epi64(_mm512_set1_epi64(~0ULL), __M, __W);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_and_q512(__W);
+#else
   return __builtin_reduce_and((__v8di)__W);
+#endif
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_or_epi64(__mmask8 __M, __m512i __W) {
   __W = _mm512_maskz_mov_epi64(__M, __W);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_or_q512(__W);
+#else
   return __builtin_reduce_or((__v8di)__W);
+#endif
 }
 
 // -0.0 is used to ignore the start value since it is the neutral value of
@@ -9414,12 +9470,20 @@ _mm512_reduce_mul_epi32(__m512i __W) {
 
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_reduce_and_epi32(__m512i __W) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_and_d512((__v16si)__W);
+#else
   return __builtin_reduce_and((__v16si)__W);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_reduce_or_epi32(__m512i __W) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_or_d512((__v16si)__W);
+#else
   return __builtin_reduce_or((__v16si)__W);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS512
@@ -9445,13 +9509,21 @@ _mm512_mask_reduce_mul_epi32( __mmask16 __M, __m512i __W) {
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_and_epi32( __mmask16 __M, __m512i __W) {
   __W = _mm512_mask_mov_epi32(_mm512_set1_epi32(~0U), __M, __W);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_and_d512((__v16si)__W);
+#else
   return __builtin_reduce_and((__v16si)__W);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_or_epi32(__mmask16 __M, __m512i __W) {
   __W = _mm512_maskz_mov_epi32(__M, __W);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_or_d512((__v16si)__W);
+#else
   return __builtin_reduce_or((__v16si)__W);
+#endif
 }
 
 static __inline__ float __DEFAULT_FN_ATTRS512
@@ -9478,89 +9550,153 @@ _mm512_mask_reduce_mul_ps(__mmask16 __M, __m512 __W) {
 
 static __inline__ long long __DEFAULT_FN_ATTRS512
 _mm512_reduce_max_epi64(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smax_q512(__V);
+#else
   return __builtin_reduce_max((__v8di)__V);
+#endif
 }
 
 static __inline__ unsigned long long __DEFAULT_FN_ATTRS512
 _mm512_reduce_max_epu64(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umax_q512(__V);
+#else
   return __builtin_reduce_max((__v8du)__V);
+#endif
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512
 _mm512_reduce_min_epi64(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smin_q512(__V);
+#else
   return __builtin_reduce_min((__v8di)__V);
+#endif
 }
 
 static __inline__ unsigned long long __DEFAULT_FN_ATTRS512
 _mm512_reduce_min_epu64(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umin_q512(__V);
+#else
   return __builtin_reduce_min((__v8du)__V);
+#endif
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_max_epi64(__mmask8 __M, __m512i __V) {
   __V = _mm512_mask_mov_epi64(_mm512_set1_epi64(-__LONG_LONG_MAX__ - 1LL), __M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smax_q512(__V);
+#else
   return __builtin_reduce_max((__v8di)__V);
+#endif
 }
 
 static __inline__ unsigned long long __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_max_epu64(__mmask8 __M, __m512i __V) {
   __V = _mm512_maskz_mov_epi64(__M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umax_q512(__V);
+#else
   return __builtin_reduce_max((__v8du)__V);
+#endif
 }
 
 static __inline__ long long __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_min_epi64(__mmask8 __M, __m512i __V) {
   __V = _mm512_mask_mov_epi64(_mm512_set1_epi64(__LONG_LONG_MAX__), __M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smin_q512(__V);
+#else
   return __builtin_reduce_min((__v8di)__V);
+#endif
 }
 
 static __inline__ unsigned long long __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_min_epu64(__mmask8 __M, __m512i __V) {
   __V = _mm512_mask_mov_epi64(_mm512_set1_epi64(~0ULL), __M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umin_q512(__V);
+#else
   return __builtin_reduce_min((__v8du)__V);
+#endif
 }
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_reduce_max_epi32(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smax_d512((__v16si)__V);
+#else
   return __builtin_reduce_max((__v16si)__V);
+#endif
 }
 
 static __inline__ unsigned int __DEFAULT_FN_ATTRS512
 _mm512_reduce_max_epu32(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umax_d512((__v16si)__V);
+#else
   return __builtin_reduce_max((__v16su)__V);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_reduce_min_epi32(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smin_d512((__v16si)__V);
+#else
   return __builtin_reduce_min((__v16si)__V);
+#endif
 }
 
 static __inline__ unsigned int __DEFAULT_FN_ATTRS512
 _mm512_reduce_min_epu32(__m512i __V) {
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umin_d512((__v16si)__V);
+#else
   return __builtin_reduce_min((__v16su)__V);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_max_epi32(__mmask16 __M, __m512i __V) {
   __V = _mm512_mask_mov_epi32(_mm512_set1_epi32(-__INT_MAX__ - 1), __M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smax_d512((__v16si)__V);
+#else
   return __builtin_reduce_max((__v16si)__V);
+#endif
 }
 
 static __inline__ unsigned int __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_max_epu32(__mmask16 __M, __m512i __V) {
   __V = _mm512_maskz_mov_epi32(__M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umax_d512((__v16si)__V);
+#else
   return __builtin_reduce_max((__v16su)__V);
+#endif
 }
 
 static __inline__ int __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_min_epi32(__mmask16 __M, __m512i __V) {
   __V = _mm512_mask_mov_epi32(_mm512_set1_epi32(__INT_MAX__), __M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_smin_d512((__v16si)__V);
+#else
   return __builtin_reduce_min((__v16si)__V);
+#endif
 }
 
 static __inline__ unsigned int __DEFAULT_FN_ATTRS512
 _mm512_mask_reduce_min_epu32(__mmask16 __M, __m512i __V) {
   __V = _mm512_mask_mov_epi32(_mm512_set1_epi32(~0U), __M, __V);
+#if (__clang_major__ < 14)
+  return __builtin_ia32_reduce_umin_d512((__v16si)__V);
+#else
   return __builtin_reduce_min((__v16su)__V);
+#endif
 }
 
 static __inline__ double __DEFAULT_FN_ATTRS512
index 178c9dbc0e6ea36286137031e2a2f960b65555a3..c6b4a443e47c9c316992d357f873f9504198b51f 100644 (file)
@@ -2988,7 +2988,11 @@ _mm256_maskz_abs_epi32(__mmask8 __U, __m256i __A) {
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
 _mm_abs_epi64 (__m128i __A) {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pabsq128((__v2di)__A);
+#else
   return (__m128i)__builtin_elementwise_abs((__v2di)__A);
+#endif
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
@@ -3007,7 +3011,11 @@ _mm_maskz_abs_epi64 (__mmask8 __U, __m128i __A) {
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_abs_epi64 (__m256i __A) {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pabsq256 ((__v4di)__A);
+#else
   return (__m256i)__builtin_elementwise_abs((__v4di)__A);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
@@ -3054,7 +3062,11 @@ _mm256_mask_max_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) {
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
 _mm_max_epi64 (__m128i __A, __m128i __B) {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pmaxsq128((__v2di)__A, (__v2di)__B);
+#else
   return (__m128i)__builtin_elementwise_max((__v2di)__A, (__v2di)__B);
+#endif
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
@@ -3073,7 +3085,11 @@ _mm_mask_max_epi64 (__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) {
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epi64 (__m256i __A, __m256i __B) {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxsq256((__v4di)__A, (__v4di)__B);
+#else
   return (__m256i)__builtin_elementwise_max((__v4di)__A, (__v4di)__B);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
@@ -3120,7 +3136,11 @@ _mm256_mask_max_epu32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) {
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
 _mm_max_epu64 (__m128i __A, __m128i __B) {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pmaxuq128((__v2di)__A, (__v2di)__B);
+#else
   return (__m128i)__builtin_elementwise_max((__v2du)__A, (__v2du)__B);
+#endif
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
@@ -3139,7 +3159,11 @@ _mm_mask_max_epu64 (__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) {
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_max_epu64 (__m256i __A, __m256i __B) {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pmaxuq256((__v4di)__A, (__v4di)__B);
+#else
   return (__m256i)__builtin_elementwise_max((__v4du)__A, (__v4du)__B);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
@@ -3186,7 +3210,11 @@ _mm256_mask_min_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) {
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
 _mm_min_epi64 (__m128i __A, __m128i __B) {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pminsq128((__v2di)__A, (__v2di)__B);
+#else
   return (__m128i)__builtin_elementwise_min((__v2di)__A, (__v2di)__B);
+#endif
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
@@ -3205,7 +3233,11 @@ _mm_maskz_min_epi64 (__mmask8 __M, __m128i __A, __m128i __B) {
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epi64 (__m256i __A, __m256i __B) {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminsq256((__v4di)__A, (__v4di)__B);
+#else
   return (__m256i)__builtin_elementwise_min((__v4di)__A, (__v4di)__B);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
@@ -3252,7 +3284,11 @@ _mm256_mask_min_epu32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) {
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
 _mm_min_epu64 (__m128i __A, __m128i __B) {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pminuq128((__v2di)__A, (__v2di)__B);
+#else
   return (__m128i)__builtin_elementwise_min((__v2du)__A, (__v2du)__B);
+#endif
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
@@ -3271,7 +3307,11 @@ _mm_maskz_min_epu64 (__mmask8 __M, __m128i __A, __m128i __B) {
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
 _mm256_min_epu64 (__m256i __A, __m256i __B) {
+#if (__clang_major__ < 14)
+  return (__m256i)__builtin_ia32_pminuq256((__v4di)__A, (__v4di)__B);
+#else
   return (__m256i)__builtin_elementwise_min((__v4du)__A, (__v4du)__B);
+#endif
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
index c25ce3067cd0c40ca323a30e5f607284be35fd24..e00968e30404695cac0befabfe18b2ab56057ced 100644 (file)
@@ -2403,7 +2403,11 @@ _mm_madd_epi16(__m128i __a, __m128i __b)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_max_epi16(__m128i __a, __m128i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)__a, (__v8hi)__b);
+#else
   return (__m128i)__builtin_elementwise_max((__v8hi)__a, (__v8hi)__b);
+#endif
 }
 
 /// Compares corresponding elements of two 128-bit unsigned [16 x i8]
@@ -2423,7 +2427,11 @@ _mm_max_epi16(__m128i __a, __m128i __b)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_max_epu8(__m128i __a, __m128i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pmaxub128((__v16qi)__a, (__v16qi)__b);
+#else
   return (__m128i)__builtin_elementwise_max((__v16qu)__a, (__v16qu)__b);
+#endif
 }
 
 /// Compares corresponding elements of two 128-bit signed [8 x i16]
@@ -2443,7 +2451,11 @@ _mm_max_epu8(__m128i __a, __m128i __b)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_min_epi16(__m128i __a, __m128i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pminsw128((__v8hi)__a, (__v8hi)__b);
+#else
   return (__m128i)__builtin_elementwise_min((__v8hi)__a, (__v8hi)__b);
+#endif
 }
 
 /// Compares corresponding elements of two 128-bit unsigned [16 x i8]
@@ -2463,7 +2475,11 @@ _mm_min_epi16(__m128i __a, __m128i __b)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_min_epu8(__m128i __a, __m128i __b)
 {
+#if (__clang_major__ < 14)
+  return (__m128i)__builtin_ia32_pminub128((__v16qi)__a, (__v16qi)__b);
+#else
   return (__m128i)__builtin_elementwise_min((__v16qu)__a, (__v16qu)__b);
+#endif
 }
 
 /// Multiplies the corresponding elements of two signed [8 x i16]
index 0df59c5fcc5920dc12822b885bcb8a77d4d1ed7a..aff83ee0f0692e5f17a78bb0127fd0b001233ba0 100644 (file)
@@ -668,7 +668,11 @@ _mm_stream_load_si128 (__m128i const *__V)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_min_epi8 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2);
+#else
   return (__m128i) __builtin_elementwise_min((__v16qs) __V1, (__v16qs) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -687,7 +691,11 @@ _mm_min_epi8 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_max_epi8 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2);
+#else
   return (__m128i) __builtin_elementwise_max((__v16qs) __V1, (__v16qs) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -706,7 +714,11 @@ _mm_max_epi8 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_min_epu16 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2);
+#else
   return (__m128i) __builtin_elementwise_min((__v8hu) __V1, (__v8hu) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -725,7 +737,11 @@ _mm_min_epu16 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_max_epu16 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2);
+#else
   return (__m128i) __builtin_elementwise_max((__v8hu) __V1, (__v8hu) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -744,7 +760,11 @@ _mm_max_epu16 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_min_epi32 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2);
+#else
   return (__m128i) __builtin_elementwise_min((__v4si) __V1, (__v4si) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -763,7 +783,11 @@ _mm_min_epi32 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_max_epi32 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2);
+#else
   return (__m128i) __builtin_elementwise_max((__v4si) __V1, (__v4si) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -782,7 +806,11 @@ _mm_max_epi32 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_min_epu32 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2);
+#else
   return (__m128i) __builtin_elementwise_min((__v4su) __V1, (__v4su) __V2);
+#endif
 }
 
 /// Compares the corresponding elements of two 128-bit vectors of
@@ -801,7 +829,11 @@ _mm_min_epu32 (__m128i __V1, __m128i __V2)
 static __inline__  __m128i __DEFAULT_FN_ATTRS
 _mm_max_epu32 (__m128i __V1, __m128i __V2)
 {
+#if (__clang_major__ < 14)
+  return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2);
+#else
   return (__m128i) __builtin_elementwise_max((__v4su) __V1, (__v4su) __V2);
+#endif
 }
 
 /* SSE4 Insertion and Extraction from XMM Register Instructions.  */
index cb9be2349de5a72ddd2e926f09ef1a94c04a819f..e640934ef61e904be14b783459b1b8020ce5b121 100644 (file)
@@ -53,7 +53,11 @@ _mm_abs_pi8(__m64 __a)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_abs_epi8(__m128i __a)
 {
+#if (__clang_major__ < 14)
+    return (__m128i)__builtin_ia32_pabsb128((__v16qi)__a);
+#else
     return (__m128i)__builtin_elementwise_abs((__v16qs)__a);
+#endif
 }
 
 /// Computes the absolute value of each of the packed 16-bit signed
@@ -89,7 +93,11 @@ _mm_abs_pi16(__m64 __a)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_abs_epi16(__m128i __a)
 {
+#if (__clang_major__ < 14)
+    return (__m128i)__builtin_ia32_pabsw128((__v8hi)__a);
+#else
     return (__m128i)__builtin_elementwise_abs((__v8hi)__a);
+#endif
 }
 
 /// Computes the absolute value of each of the packed 32-bit signed
@@ -125,7 +133,11 @@ _mm_abs_pi32(__m64 __a)
 static __inline__ __m128i __DEFAULT_FN_ATTRS
 _mm_abs_epi32(__m128i __a)
 {
+#if (__clang_major__ < 14)
+    return (__m128i)__builtin_ia32_pabsd128((__v4si)__a);
+#else
     return (__m128i)__builtin_elementwise_abs((__v4si)__a);
+#endif
 }
 
 /// Concatenates the two 128-bit integer vector operands, and