Clang Project

clang_source_code/lib/Headers/avx512vlbitalgintrin.h
1/*===---- avx512vlbitalgintrin.h - BITALG intrinsics -----------------------===
2 *
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 *
22 *===-----------------------------------------------------------------------===
23 */
24#ifndef __IMMINTRIN_H
25#error "Never use <avx512vlbitalgintrin.h> directly; include <immintrin.h> instead."
26#endif
27
28#ifndef __AVX512VLBITALGINTRIN_H
29#define __AVX512VLBITALGINTRIN_H
30
31/* Define the default attributes for the functions in this file. */
32#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg"), __min_vector_width__(128)))
33#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg"), __min_vector_width__(256)))
34
35static __inline__ __m256i __DEFAULT_FN_ATTRS256
36_mm256_popcnt_epi16(__m256i __A)
37{
38  return (__m256i__builtin_ia32_vpopcntw_256((__v16hi__A);
39}
40
41static __inline__ __m256i __DEFAULT_FN_ATTRS256
42_mm256_mask_popcnt_epi16(__m256i __A__mmask16 __U__m256i __B)
43{
44  return (__m256i__builtin_ia32_selectw_256((__mmask16__U,
45              (__v16hi_mm256_popcnt_epi16(__B),
46              (__v16hi__A);
47}
48
49static __inline__ __m256i __DEFAULT_FN_ATTRS256
50_mm256_maskz_popcnt_epi16(__mmask16 __U__m256i __B)
51{
52  return _mm256_mask_popcnt_epi16((__m256i_mm256_setzero_si256(),
53              __U,
54              __B);
55}
56
57static __inline__ __m128i __DEFAULT_FN_ATTRS128
58_mm_popcnt_epi16(__m128i __A)
59{
60  return (__m128i__builtin_ia32_vpopcntw_128((__v8hi__A);
61}
62
63static __inline__ __m128i __DEFAULT_FN_ATTRS128
64_mm_mask_popcnt_epi16(__m128i __A__mmask8 __U__m128i __B)
65{
66  return (__m128i__builtin_ia32_selectw_128((__mmask8__U,
67              (__v8hi_mm_popcnt_epi16(__B),
68              (__v8hi__A);
69}
70
71static __inline__ __m128i __DEFAULT_FN_ATTRS128
72_mm_maskz_popcnt_epi16(__mmask8 __U__m128i __B)
73{
74  return _mm_mask_popcnt_epi16((__m128i_mm_setzero_si128(),
75              __U,
76              __B);
77}
78
79static __inline__ __m256i __DEFAULT_FN_ATTRS256
80_mm256_popcnt_epi8(__m256i __A)
81{
82  return (__m256i__builtin_ia32_vpopcntb_256((__v32qi__A);
83}
84
85static __inline__ __m256i __DEFAULT_FN_ATTRS256
86_mm256_mask_popcnt_epi8(__m256i __A__mmask32 __U__m256i __B)
87{
88  return (__m256i__builtin_ia32_selectb_256((__mmask32__U,
89              (__v32qi_mm256_popcnt_epi8(__B),
90              (__v32qi__A);
91}
92
93static __inline__ __m256i __DEFAULT_FN_ATTRS256
94_mm256_maskz_popcnt_epi8(__mmask32 __U__m256i __B)
95{
96  return _mm256_mask_popcnt_epi8((__m256i_mm256_setzero_si256(),
97              __U,
98              __B);
99}
100
101static __inline__ __m128i __DEFAULT_FN_ATTRS128
102_mm_popcnt_epi8(__m128i __A)
103{
104  return (__m128i__builtin_ia32_vpopcntb_128((__v16qi__A);
105}
106
107static __inline__ __m128i __DEFAULT_FN_ATTRS128
108_mm_mask_popcnt_epi8(__m128i __A__mmask16 __U__m128i __B)
109{
110  return (__m128i__builtin_ia32_selectb_128((__mmask16__U,
111              (__v16qi_mm_popcnt_epi8(__B),
112              (__v16qi__A);
113}
114
115static __inline__ __m128i __DEFAULT_FN_ATTRS128
116_mm_maskz_popcnt_epi8(__mmask16 __U__m128i __B)
117{
118  return _mm_mask_popcnt_epi8((__m128i_mm_setzero_si128(),
119              __U,
120              __B);
121}
122
123static __inline__ __mmask32 __DEFAULT_FN_ATTRS256
124_mm256_mask_bitshuffle_epi64_mask(__mmask32 __U__m256i __A__m256i __B)
125{
126  return (__mmask32__builtin_ia32_vpshufbitqmb256_mask((__v32qi__A,
127              (__v32qi__B,
128              __U);
129}
130
131static __inline__ __mmask32 __DEFAULT_FN_ATTRS256
132_mm256_bitshuffle_epi64_mask(__m256i __A__m256i __B)
133{
134  return _mm256_mask_bitshuffle_epi64_mask((__mmask32) -1,
135              __A,
136              __B);
137}
138
139static __inline__ __mmask16 __DEFAULT_FN_ATTRS128
140_mm_mask_bitshuffle_epi64_mask(__mmask16 __U__m128i __A__m128i __B)
141{
142  return (__mmask16__builtin_ia32_vpshufbitqmb128_mask((__v16qi__A,
143              (__v16qi__B,
144              __U);
145}
146
147static __inline__ __mmask16 __DEFAULT_FN_ATTRS128
148_mm_bitshuffle_epi64_mask(__m128i __A__m128i __B)
149{
150  return _mm_mask_bitshuffle_epi64_mask((__mmask16) -1,
151              __A,
152              __B);
153}
154
155
156#undef __DEFAULT_FN_ATTRS128
157#undef __DEFAULT_FN_ATTRS256
158
159#endif
160