blob: cc8b72528d012699700aa02652ac51223a487c48 [file] [log] [blame]
Craig Topper934f86a2018-05-04 21:45:25 +00001/*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
Michael Zuckerman8c2900f2016-04-27 11:43:14 +00002 *
Chandler Carruth4cf57432019-04-08 20:51:30 +00003 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Michael Zuckerman8c2900f2016-04-27 11:43:14 +00006 *
7 *===-----------------------------------------------------------------------===
8 */
9#ifndef __IMMINTRIN_H
10#error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
11#endif
12
13#ifndef __AVX512VLCDINTRIN_H
14#define __AVX512VLCDINTRIN_H
15
16/* Define the default attributes for the functions in this file. */
Craig Topper74c10e32018-07-09 19:00:16 +000017#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(128)))
18#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(256)))
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000019
20
Craig Topper74c10e32018-07-09 19:00:16 +000021static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000022_mm_broadcastmb_epi64 (__mmask8 __A)
Fangrui Song6907ce22018-07-30 19:24:48 +000023{
Jina Nahias48e298b2017-11-06 07:04:12 +000024 return (__m128i) _mm_set1_epi64x((long long) __A);
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000025}
26
Craig Topper74c10e32018-07-09 19:00:16 +000027static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000028_mm256_broadcastmb_epi64 (__mmask8 __A)
29{
Jina Nahias48e298b2017-11-06 07:04:12 +000030 return (__m256i) _mm256_set1_epi64x((long long)__A);
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000031}
32
Craig Topper74c10e32018-07-09 19:00:16 +000033static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000034_mm_broadcastmw_epi32 (__mmask16 __A)
35{
Jina Nahias48e298b2017-11-06 07:04:12 +000036 return (__m128i) _mm_set1_epi32((int)__A);
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000037}
38
Craig Topper74c10e32018-07-09 19:00:16 +000039static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000040_mm256_broadcastmw_epi32 (__mmask16 __A)
41{
Jina Nahias48e298b2017-11-06 07:04:12 +000042 return (__m256i) _mm256_set1_epi32((int)__A);
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000043}
44
45
Craig Topper74c10e32018-07-09 19:00:16 +000046static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman514f0552016-04-27 15:35:13 +000047_mm_conflict_epi64 (__m128i __A)
48{
Craig Topper8de5abc2019-01-25 07:08:22 +000049 return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A);
Michael Zuckerman514f0552016-04-27 15:35:13 +000050}
51
Craig Topper74c10e32018-07-09 19:00:16 +000052static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman514f0552016-04-27 15:35:13 +000053_mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
54{
Craig Topper8de5abc2019-01-25 07:08:22 +000055 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
56 (__v2di)_mm_conflict_epi64(__A),
57 (__v2di)__W);
Michael Zuckerman514f0552016-04-27 15:35:13 +000058}
59
Craig Topper74c10e32018-07-09 19:00:16 +000060static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman514f0552016-04-27 15:35:13 +000061_mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
62{
Craig Topper8de5abc2019-01-25 07:08:22 +000063 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
64 (__v2di)_mm_conflict_epi64(__A),
65 (__v2di)_mm_setzero_si128());
Michael Zuckerman514f0552016-04-27 15:35:13 +000066}
67
Craig Topper74c10e32018-07-09 19:00:16 +000068static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman514f0552016-04-27 15:35:13 +000069_mm256_conflict_epi64 (__m256i __A)
70{
Craig Topper8de5abc2019-01-25 07:08:22 +000071 return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A);
Michael Zuckerman514f0552016-04-27 15:35:13 +000072}
73
Craig Topper74c10e32018-07-09 19:00:16 +000074static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman514f0552016-04-27 15:35:13 +000075_mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
76{
Craig Topper8de5abc2019-01-25 07:08:22 +000077 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
78 (__v4di)_mm256_conflict_epi64(__A),
79 (__v4di)__W);
Michael Zuckerman514f0552016-04-27 15:35:13 +000080}
81
Craig Topper74c10e32018-07-09 19:00:16 +000082static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman514f0552016-04-27 15:35:13 +000083_mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
84{
Craig Topper8de5abc2019-01-25 07:08:22 +000085 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
86 (__v4di)_mm256_conflict_epi64(__A),
87 (__v4di)_mm256_setzero_si256());
Michael Zuckerman514f0552016-04-27 15:35:13 +000088}
89
Craig Topper74c10e32018-07-09 19:00:16 +000090static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman514f0552016-04-27 15:35:13 +000091_mm_conflict_epi32 (__m128i __A)
92{
Craig Topper8de5abc2019-01-25 07:08:22 +000093 return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A);
Michael Zuckerman514f0552016-04-27 15:35:13 +000094}
95
Craig Topper74c10e32018-07-09 19:00:16 +000096static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman514f0552016-04-27 15:35:13 +000097_mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
98{
Craig Topper8de5abc2019-01-25 07:08:22 +000099 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
100 (__v4si)_mm_conflict_epi32(__A),
101 (__v4si)__W);
Michael Zuckerman514f0552016-04-27 15:35:13 +0000102}
103
Craig Topper74c10e32018-07-09 19:00:16 +0000104static __inline__ __m128i __DEFAULT_FN_ATTRS128
Michael Zuckerman514f0552016-04-27 15:35:13 +0000105_mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
106{
Craig Topper8de5abc2019-01-25 07:08:22 +0000107 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
108 (__v4si)_mm_conflict_epi32(__A),
109 (__v4si)_mm_setzero_si128());
Michael Zuckerman514f0552016-04-27 15:35:13 +0000110}
111
Craig Topper74c10e32018-07-09 19:00:16 +0000112static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman514f0552016-04-27 15:35:13 +0000113_mm256_conflict_epi32 (__m256i __A)
114{
Craig Topper8de5abc2019-01-25 07:08:22 +0000115 return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A);
Michael Zuckerman514f0552016-04-27 15:35:13 +0000116}
117
Craig Topper74c10e32018-07-09 19:00:16 +0000118static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman514f0552016-04-27 15:35:13 +0000119_mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
120{
Craig Topper8de5abc2019-01-25 07:08:22 +0000121 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
122 (__v8si)_mm256_conflict_epi32(__A),
123 (__v8si)__W);
Michael Zuckerman514f0552016-04-27 15:35:13 +0000124}
125
Craig Topper74c10e32018-07-09 19:00:16 +0000126static __inline__ __m256i __DEFAULT_FN_ATTRS256
Michael Zuckerman514f0552016-04-27 15:35:13 +0000127_mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
128{
Craig Topper8de5abc2019-01-25 07:08:22 +0000129 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
130 (__v8si)_mm256_conflict_epi32(__A),
131 (__v8si)_mm256_setzero_si256());
Michael Zuckerman514f0552016-04-27 15:35:13 +0000132}
133
Craig Topper74c10e32018-07-09 19:00:16 +0000134static __inline__ __m128i __DEFAULT_FN_ATTRS128
Craig Topper879b0972016-06-21 06:53:58 +0000135_mm_lzcnt_epi32 (__m128i __A)
136{
Craig Topper8e3689c2018-05-22 20:48:24 +0000137 return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
Craig Topper879b0972016-06-21 06:53:58 +0000138}
139
Craig Topper74c10e32018-07-09 19:00:16 +0000140static __inline__ __m128i __DEFAULT_FN_ATTRS128
Craig Topper879b0972016-06-21 06:53:58 +0000141_mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
142{
Craig Topper8e3689c2018-05-22 20:48:24 +0000143 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
144 (__v4si)_mm_lzcnt_epi32(__A),
145 (__v4si)__W);
Craig Topper879b0972016-06-21 06:53:58 +0000146}
147
Craig Topper74c10e32018-07-09 19:00:16 +0000148static __inline__ __m128i __DEFAULT_FN_ATTRS128
Craig Topper879b0972016-06-21 06:53:58 +0000149_mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
150{
Craig Topper8e3689c2018-05-22 20:48:24 +0000151 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
152 (__v4si)_mm_lzcnt_epi32(__A),
153 (__v4si)_mm_setzero_si128());
Craig Topper879b0972016-06-21 06:53:58 +0000154}
155
Craig Topper74c10e32018-07-09 19:00:16 +0000156static __inline__ __m256i __DEFAULT_FN_ATTRS256
Craig Topper879b0972016-06-21 06:53:58 +0000157_mm256_lzcnt_epi32 (__m256i __A)
158{
Craig Topper8e3689c2018-05-22 20:48:24 +0000159 return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
Craig Topper879b0972016-06-21 06:53:58 +0000160}
161
Craig Topper74c10e32018-07-09 19:00:16 +0000162static __inline__ __m256i __DEFAULT_FN_ATTRS256
Craig Topper879b0972016-06-21 06:53:58 +0000163_mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
164{
Craig Topper8e3689c2018-05-22 20:48:24 +0000165 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
166 (__v8si)_mm256_lzcnt_epi32(__A),
167 (__v8si)__W);
Craig Topper879b0972016-06-21 06:53:58 +0000168}
169
Craig Topper74c10e32018-07-09 19:00:16 +0000170static __inline__ __m256i __DEFAULT_FN_ATTRS256
Craig Topper879b0972016-06-21 06:53:58 +0000171_mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
172{
Craig Topper8e3689c2018-05-22 20:48:24 +0000173 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
174 (__v8si)_mm256_lzcnt_epi32(__A),
175 (__v8si)_mm256_setzero_si256());
Craig Topper879b0972016-06-21 06:53:58 +0000176}
177
Craig Topper74c10e32018-07-09 19:00:16 +0000178static __inline__ __m128i __DEFAULT_FN_ATTRS128
Craig Topper879b0972016-06-21 06:53:58 +0000179_mm_lzcnt_epi64 (__m128i __A)
180{
Craig Topper8e3689c2018-05-22 20:48:24 +0000181 return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
Craig Topper879b0972016-06-21 06:53:58 +0000182}
183
Craig Topper74c10e32018-07-09 19:00:16 +0000184static __inline__ __m128i __DEFAULT_FN_ATTRS128
Craig Topper879b0972016-06-21 06:53:58 +0000185_mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
186{
Craig Topper8e3689c2018-05-22 20:48:24 +0000187 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
188 (__v2di)_mm_lzcnt_epi64(__A),
189 (__v2di)__W);
Craig Topper879b0972016-06-21 06:53:58 +0000190}
191
Craig Topper74c10e32018-07-09 19:00:16 +0000192static __inline__ __m128i __DEFAULT_FN_ATTRS128
Craig Topper879b0972016-06-21 06:53:58 +0000193_mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
194{
Craig Topper8e3689c2018-05-22 20:48:24 +0000195 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
196 (__v2di)_mm_lzcnt_epi64(__A),
Craig Topperdff5b312018-05-30 18:02:11 +0000197 (__v2di)_mm_setzero_si128());
Craig Topper879b0972016-06-21 06:53:58 +0000198}
199
Craig Topper74c10e32018-07-09 19:00:16 +0000200static __inline__ __m256i __DEFAULT_FN_ATTRS256
Craig Topper879b0972016-06-21 06:53:58 +0000201_mm256_lzcnt_epi64 (__m256i __A)
202{
Craig Topper8e3689c2018-05-22 20:48:24 +0000203 return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
Craig Topper879b0972016-06-21 06:53:58 +0000204}
205
Craig Topper74c10e32018-07-09 19:00:16 +0000206static __inline__ __m256i __DEFAULT_FN_ATTRS256
Craig Topper879b0972016-06-21 06:53:58 +0000207_mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
208{
Craig Topper8e3689c2018-05-22 20:48:24 +0000209 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
210 (__v4di)_mm256_lzcnt_epi64(__A),
211 (__v4di)__W);
Craig Topper879b0972016-06-21 06:53:58 +0000212}
213
Craig Topper74c10e32018-07-09 19:00:16 +0000214static __inline__ __m256i __DEFAULT_FN_ATTRS256
Craig Topper879b0972016-06-21 06:53:58 +0000215_mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
216{
Craig Topper8e3689c2018-05-22 20:48:24 +0000217 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
218 (__v4di)_mm256_lzcnt_epi64(__A),
219 (__v4di)_mm256_setzero_si256());
Craig Topper879b0972016-06-21 06:53:58 +0000220}
221
Craig Topper74c10e32018-07-09 19:00:16 +0000222#undef __DEFAULT_FN_ATTRS128
223#undef __DEFAULT_FN_ATTRS256
Michael Zuckerman8c2900f2016-04-27 11:43:14 +0000224
Craig Topper879b0972016-06-21 06:53:58 +0000225#endif /* __AVX512VLCDINTRIN_H */