xref: /netbsd-src/external/apache2/llvm/dist/clang/lib/Headers/avx512cdintrin.h (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1*7330f729Sjoerg /*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------===
2*7330f729Sjoerg  *
3*7330f729Sjoerg  *
4*7330f729Sjoerg  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*7330f729Sjoerg  * See https://llvm.org/LICENSE.txt for license information.
6*7330f729Sjoerg  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*7330f729Sjoerg  *
8*7330f729Sjoerg  *===-----------------------------------------------------------------------===
9*7330f729Sjoerg  */
10*7330f729Sjoerg #ifndef __IMMINTRIN_H
11*7330f729Sjoerg #error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead."
12*7330f729Sjoerg #endif
13*7330f729Sjoerg 
14*7330f729Sjoerg #ifndef __AVX512CDINTRIN_H
15*7330f729Sjoerg #define __AVX512CDINTRIN_H
16*7330f729Sjoerg 
17*7330f729Sjoerg /* Define the default attributes for the functions in this file. */
18*7330f729Sjoerg #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd"), __min_vector_width__(512)))
19*7330f729Sjoerg 
20*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_conflict_epi64(__m512i __A)21*7330f729Sjoerg _mm512_conflict_epi64 (__m512i __A)
22*7330f729Sjoerg {
23*7330f729Sjoerg   return (__m512i) __builtin_ia32_vpconflictdi_512 ((__v8di) __A);
24*7330f729Sjoerg }
25*7330f729Sjoerg 
26*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_mask_conflict_epi64(__m512i __W,__mmask8 __U,__m512i __A)27*7330f729Sjoerg _mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
28*7330f729Sjoerg {
29*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
30*7330f729Sjoerg                                              (__v8di)_mm512_conflict_epi64(__A),
31*7330f729Sjoerg                                              (__v8di)__W);
32*7330f729Sjoerg }
33*7330f729Sjoerg 
34*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_maskz_conflict_epi64(__mmask8 __U,__m512i __A)35*7330f729Sjoerg _mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A)
36*7330f729Sjoerg {
37*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
38*7330f729Sjoerg                                              (__v8di)_mm512_conflict_epi64(__A),
39*7330f729Sjoerg                                              (__v8di)_mm512_setzero_si512 ());
40*7330f729Sjoerg }
41*7330f729Sjoerg 
42*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_conflict_epi32(__m512i __A)43*7330f729Sjoerg _mm512_conflict_epi32 (__m512i __A)
44*7330f729Sjoerg {
45*7330f729Sjoerg   return (__m512i) __builtin_ia32_vpconflictsi_512 ((__v16si) __A);
46*7330f729Sjoerg }
47*7330f729Sjoerg 
48*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_mask_conflict_epi32(__m512i __W,__mmask16 __U,__m512i __A)49*7330f729Sjoerg _mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
50*7330f729Sjoerg {
51*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
52*7330f729Sjoerg                                             (__v16si)_mm512_conflict_epi32(__A),
53*7330f729Sjoerg                                             (__v16si)__W);
54*7330f729Sjoerg }
55*7330f729Sjoerg 
56*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_maskz_conflict_epi32(__mmask16 __U,__m512i __A)57*7330f729Sjoerg _mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
58*7330f729Sjoerg {
59*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
60*7330f729Sjoerg                                             (__v16si)_mm512_conflict_epi32(__A),
61*7330f729Sjoerg                                             (__v16si)_mm512_setzero_si512());
62*7330f729Sjoerg }
63*7330f729Sjoerg 
64*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_lzcnt_epi32(__m512i __A)65*7330f729Sjoerg _mm512_lzcnt_epi32 (__m512i __A)
66*7330f729Sjoerg {
67*7330f729Sjoerg   return (__m512i) __builtin_ia32_vplzcntd_512 ((__v16si) __A);
68*7330f729Sjoerg }
69*7330f729Sjoerg 
70*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_mask_lzcnt_epi32(__m512i __W,__mmask16 __U,__m512i __A)71*7330f729Sjoerg _mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
72*7330f729Sjoerg {
73*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
74*7330f729Sjoerg                                              (__v16si)_mm512_lzcnt_epi32(__A),
75*7330f729Sjoerg                                              (__v16si)__W);
76*7330f729Sjoerg }
77*7330f729Sjoerg 
78*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_maskz_lzcnt_epi32(__mmask16 __U,__m512i __A)79*7330f729Sjoerg _mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
80*7330f729Sjoerg {
81*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
82*7330f729Sjoerg                                              (__v16si)_mm512_lzcnt_epi32(__A),
83*7330f729Sjoerg                                              (__v16si)_mm512_setzero_si512());
84*7330f729Sjoerg }
85*7330f729Sjoerg 
86*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_lzcnt_epi64(__m512i __A)87*7330f729Sjoerg _mm512_lzcnt_epi64 (__m512i __A)
88*7330f729Sjoerg {
89*7330f729Sjoerg   return (__m512i) __builtin_ia32_vplzcntq_512 ((__v8di) __A);
90*7330f729Sjoerg }
91*7330f729Sjoerg 
92*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_mask_lzcnt_epi64(__m512i __W,__mmask8 __U,__m512i __A)93*7330f729Sjoerg _mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
94*7330f729Sjoerg {
95*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
96*7330f729Sjoerg                                              (__v8di)_mm512_lzcnt_epi64(__A),
97*7330f729Sjoerg                                              (__v8di)__W);
98*7330f729Sjoerg }
99*7330f729Sjoerg 
100*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_maskz_lzcnt_epi64(__mmask8 __U,__m512i __A)101*7330f729Sjoerg _mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
102*7330f729Sjoerg {
103*7330f729Sjoerg   return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
104*7330f729Sjoerg                                              (__v8di)_mm512_lzcnt_epi64(__A),
105*7330f729Sjoerg                                              (__v8di)_mm512_setzero_si512());
106*7330f729Sjoerg }
107*7330f729Sjoerg 
108*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_broadcastmb_epi64(__mmask8 __A)109*7330f729Sjoerg _mm512_broadcastmb_epi64 (__mmask8 __A)
110*7330f729Sjoerg {
111*7330f729Sjoerg   return (__m512i) _mm512_set1_epi64((long long) __A);
112*7330f729Sjoerg }
113*7330f729Sjoerg 
114*7330f729Sjoerg static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_broadcastmw_epi32(__mmask16 __A)115*7330f729Sjoerg _mm512_broadcastmw_epi32 (__mmask16 __A)
116*7330f729Sjoerg {
117*7330f729Sjoerg   return (__m512i) _mm512_set1_epi32((int) __A);
118*7330f729Sjoerg 
119*7330f729Sjoerg }
120*7330f729Sjoerg 
121*7330f729Sjoerg #undef __DEFAULT_FN_ATTRS
122*7330f729Sjoerg 
123*7330f729Sjoerg #endif
124