avx512cdintrin.h revision 285165
1289421Scy/*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------===
2289421Scy *
3289421Scy *
4293037Scy * Permission is hereby granted, free of charge, to any person obtaining a copy
5293037Scy * of this software and associated documentation files (the "Software"), to deal
6293037Scy * in the Software without restriction, including without limitation the rights
7293037Scy * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8293037Scy * copies of the Software, and to permit persons to whom the Software is
9293037Scy * furnished to do so, subject to the following conditions:
10293037Scy *
11289421Scy * The above copyright notice and this permission notice shall be included in
12293037Scy * all copies or substantial portions of the Software.
13289421Scy *
14293037Scy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15293037Scy * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16293037Scy * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17293037Scy * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18289421Scy * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19293037Scy * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20293037Scy * THE SOFTWARE.
21293037Scy *
22293037Scy *===-----------------------------------------------------------------------===
23293037Scy */
24293037Scy#ifndef __IMMINTRIN_H
25293037Scy#error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead."
26293037Scy#endif
27293037Scy
28293037Scy#ifndef __AVX512CDINTRIN_H
29293037Scy#define __AVX512CDINTRIN_H
30293037Scy
31293037Scy/* Define the default attributes for the functions in this file. */
32289421Scy#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd")))
33293037Scy
34293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
35293037Scy_mm512_conflict_epi64 (__m512i __A)
36293037Scy{
37289421Scy  return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
38293037Scy                 (__v8di) _mm512_setzero_si512 (),
39293037Scy                 (__mmask8) -1);
40293037Scy}
41293037Scy
42293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
43293037Scy_mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
44293037Scy{
45293037Scy  return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
46293037Scy               (__v8di) __W,
47293037Scy               (__mmask8) __U);
48289421Scy}
49293037Scy
50293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
51293037Scy_mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A)
52293037Scy{
53293037Scy  return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
54293037Scy                 (__v8di) _mm512_setzero_si512 (),
55289421Scy                 (__mmask8) __U);
56293037Scy}
57293037Scy
58293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
59293037Scy_mm512_conflict_epi32 (__m512i __A)
60293037Scy{
61293037Scy  return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
62289421Scy                 (__v16si) _mm512_setzero_si512 (),
63293037Scy                 (__mmask16) -1);
64293037Scy}
65293037Scy
66289421Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
67293037Scy_mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
68293037Scy{
69293037Scy  return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
70289421Scy               (__v16si) __W,
71293037Scy               (__mmask16) __U);
72289421Scy}
73293037Scy
74289421Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
75293037Scy_mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
76293037Scy{
77293037Scy  return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
78289421Scy                 (__v16si) _mm512_setzero_si512 (),
79293037Scy                 (__mmask16) __U);
80293037Scy}
81293037Scy
82293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
83289421Scy_mm512_lzcnt_epi32 (__m512i __A)
84293037Scy{
85293037Scy  return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
86293037Scy             (__v16si) _mm512_setzero_si512 (),
87293037Scy             (__mmask16) -1);
88293037Scy}
89293037Scy
90293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
91293037Scy_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
92293037Scy{
93293037Scy  return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
94293037Scy                 (__v16si) __W,
95293037Scy                 (__mmask16) __U);
96293037Scy}
97293037Scy
98289421Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
99293037Scy_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
100293037Scy{
101293037Scy  return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
102293037Scy             (__v16si) _mm512_setzero_si512 (),
103293037Scy             (__mmask16) __U);
104289421Scy}
105293037Scy
106293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
107293037Scy_mm512_lzcnt_epi64 (__m512i __A)
108293037Scy{
109289421Scy  return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
110293037Scy             (__v8di) _mm512_setzero_si512 (),
111293037Scy             (__mmask8) -1);
112293037Scy}
113293037Scy
114293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
115289421Scy_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
116293037Scy{
117293037Scy  return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
118289421Scy                 (__v8di) __W,
119293037Scy                 (__mmask8) __U);
120293037Scy}
121293037Scy
122293037Scystatic __inline__ __m512i __DEFAULT_FN_ATTRS
123293037Scy_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
124293037Scy{
125289421Scy  return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
126293037Scy             (__v8di) _mm512_setzero_si512 (),
127293037Scy             (__mmask8) __U);
128293037Scy}
129293037Scy#undef __DEFAULT_FN_ATTRS
130293037Scy
131293037Scy#endif
132289421Scy