1*0a6a1f1dSLionel Sambuc /*===---- avx512vlintrin.h - AVX512VL intrinsics ---------------------------===
2*0a6a1f1dSLionel Sambuc *
3*0a6a1f1dSLionel Sambuc * Permission is hereby granted, free of charge, to any person obtaining a copy
4*0a6a1f1dSLionel Sambuc * of this software and associated documentation files (the "Software"), to deal
5*0a6a1f1dSLionel Sambuc * in the Software without restriction, including without limitation the rights
6*0a6a1f1dSLionel Sambuc * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7*0a6a1f1dSLionel Sambuc * copies of the Software, and to permit persons to whom the Software is
8*0a6a1f1dSLionel Sambuc * furnished to do so, subject to the following conditions:
9*0a6a1f1dSLionel Sambuc *
10*0a6a1f1dSLionel Sambuc * The above copyright notice and this permission notice shall be included in
11*0a6a1f1dSLionel Sambuc * all copies or substantial portions of the Software.
12*0a6a1f1dSLionel Sambuc *
13*0a6a1f1dSLionel Sambuc * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14*0a6a1f1dSLionel Sambuc * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15*0a6a1f1dSLionel Sambuc * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16*0a6a1f1dSLionel Sambuc * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17*0a6a1f1dSLionel Sambuc * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18*0a6a1f1dSLionel Sambuc * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19*0a6a1f1dSLionel Sambuc * THE SOFTWARE.
20*0a6a1f1dSLionel Sambuc *
21*0a6a1f1dSLionel Sambuc *===-----------------------------------------------------------------------===
22*0a6a1f1dSLionel Sambuc */
23*0a6a1f1dSLionel Sambuc
24*0a6a1f1dSLionel Sambuc #ifndef __IMMINTRIN_H
25*0a6a1f1dSLionel Sambuc #error "Never use <avx512vlintrin.h> directly; include <immintrin.h> instead."
26*0a6a1f1dSLionel Sambuc #endif
27*0a6a1f1dSLionel Sambuc
28*0a6a1f1dSLionel Sambuc #ifndef __AVX512VLINTRIN_H
29*0a6a1f1dSLionel Sambuc #define __AVX512VLINTRIN_H
30*0a6a1f1dSLionel Sambuc
31*0a6a1f1dSLionel Sambuc /* Integer compare */
32*0a6a1f1dSLionel Sambuc
33*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpeq_epi32_mask(__m128i __a,__m128i __b)34*0a6a1f1dSLionel Sambuc _mm_cmpeq_epi32_mask(__m128i __a, __m128i __b) {
35*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqd128_mask((__v4si)__a, (__v4si)__b,
36*0a6a1f1dSLionel Sambuc (__mmask8)-1);
37*0a6a1f1dSLionel Sambuc }
38*0a6a1f1dSLionel Sambuc
39*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpeq_epi32_mask(__mmask8 __u,__m128i __a,__m128i __b)40*0a6a1f1dSLionel Sambuc _mm_mask_cmpeq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) {
41*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqd128_mask((__v4si)__a, (__v4si)__b,
42*0a6a1f1dSLionel Sambuc __u);
43*0a6a1f1dSLionel Sambuc }
44*0a6a1f1dSLionel Sambuc
45*0a6a1f1dSLionel Sambuc
46*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpeq_epi32_mask(__m256i __a,__m256i __b)47*0a6a1f1dSLionel Sambuc _mm256_cmpeq_epi32_mask(__m256i __a, __m256i __b) {
48*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqd256_mask((__v8si)__a, (__v8si)__b,
49*0a6a1f1dSLionel Sambuc (__mmask8)-1);
50*0a6a1f1dSLionel Sambuc }
51*0a6a1f1dSLionel Sambuc
52*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpeq_epi32_mask(__mmask8 __u,__m256i __a,__m256i __b)53*0a6a1f1dSLionel Sambuc _mm256_mask_cmpeq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) {
54*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqd256_mask((__v8si)__a, (__v8si)__b,
55*0a6a1f1dSLionel Sambuc __u);
56*0a6a1f1dSLionel Sambuc }
57*0a6a1f1dSLionel Sambuc
58*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpeq_epi64_mask(__m128i __a,__m128i __b)59*0a6a1f1dSLionel Sambuc _mm_cmpeq_epi64_mask(__m128i __a, __m128i __b) {
60*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqq128_mask((__v2di)__a, (__v2di)__b,
61*0a6a1f1dSLionel Sambuc (__mmask8)-1);
62*0a6a1f1dSLionel Sambuc }
63*0a6a1f1dSLionel Sambuc
64*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpeq_epi64_mask(__mmask8 __u,__m128i __a,__m128i __b)65*0a6a1f1dSLionel Sambuc _mm_mask_cmpeq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) {
66*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqq128_mask((__v2di)__a, (__v2di)__b,
67*0a6a1f1dSLionel Sambuc __u);
68*0a6a1f1dSLionel Sambuc }
69*0a6a1f1dSLionel Sambuc
70*0a6a1f1dSLionel Sambuc
71*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpeq_epi64_mask(__m256i __a,__m256i __b)72*0a6a1f1dSLionel Sambuc _mm256_cmpeq_epi64_mask(__m256i __a, __m256i __b) {
73*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqq256_mask((__v4di)__a, (__v4di)__b,
74*0a6a1f1dSLionel Sambuc (__mmask8)-1);
75*0a6a1f1dSLionel Sambuc }
76*0a6a1f1dSLionel Sambuc
77*0a6a1f1dSLionel Sambuc static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpeq_epi64_mask(__mmask8 __u,__m256i __a,__m256i __b)78*0a6a1f1dSLionel Sambuc _mm256_mask_cmpeq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) {
79*0a6a1f1dSLionel Sambuc return (__mmask8)__builtin_ia32_pcmpeqq256_mask((__v4di)__a, (__v4di)__b,
80*0a6a1f1dSLionel Sambuc __u);
81*0a6a1f1dSLionel Sambuc }
82*0a6a1f1dSLionel Sambuc
83*0a6a1f1dSLionel Sambuc #endif /* __AVX512VLINTRIN_H */
84