1/*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------=== 2 * 3 * 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 6 * 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. */ 17#define __DEFAULT_FN_ATTRS128 \ 18 __attribute__((__always_inline__, __nodebug__, \ 19 __target__("avx512vl,avx512cd,no-evex512"), \ 20 __min_vector_width__(128))) 21#define __DEFAULT_FN_ATTRS256 \ 22 __attribute__((__always_inline__, __nodebug__, \ 23 __target__("avx512vl,avx512cd,no-evex512"), \ 24 __min_vector_width__(256))) 25 26static __inline__ __m128i __DEFAULT_FN_ATTRS128 27_mm_broadcastmb_epi64 (__mmask8 __A) 28{ 29 return (__m128i) _mm_set1_epi64x((long long) __A); 30} 31 32static __inline__ __m256i __DEFAULT_FN_ATTRS256 33_mm256_broadcastmb_epi64 (__mmask8 __A) 34{ 35 return (__m256i) _mm256_set1_epi64x((long long)__A); 36} 37 38static __inline__ __m128i __DEFAULT_FN_ATTRS128 39_mm_broadcastmw_epi32 (__mmask16 __A) 40{ 41 return (__m128i) _mm_set1_epi32((int)__A); 42} 43 44static __inline__ __m256i __DEFAULT_FN_ATTRS256 45_mm256_broadcastmw_epi32 (__mmask16 __A) 46{ 47 return (__m256i) _mm256_set1_epi32((int)__A); 48} 49 50 51static __inline__ __m128i __DEFAULT_FN_ATTRS128 52_mm_conflict_epi64 (__m128i __A) 53{ 54 return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A); 55} 56 57static __inline__ __m128i __DEFAULT_FN_ATTRS128 58_mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A) 59{ 60 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U, 61 (__v2di)_mm_conflict_epi64(__A), 62 (__v2di)__W); 63} 64 65static __inline__ __m128i __DEFAULT_FN_ATTRS128 66_mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A) 67{ 68 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U, 69 (__v2di)_mm_conflict_epi64(__A), 70 (__v2di)_mm_setzero_si128()); 71} 72 73static __inline__ __m256i __DEFAULT_FN_ATTRS256 74_mm256_conflict_epi64 (__m256i __A) 75{ 76 return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A); 77} 78 79static __inline__ __m256i __DEFAULT_FN_ATTRS256 80_mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A) 81{ 82 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, 83 (__v4di)_mm256_conflict_epi64(__A), 84 (__v4di)__W); 85} 86 87static __inline__ __m256i __DEFAULT_FN_ATTRS256 88_mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A) 89{ 90 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, 91 (__v4di)_mm256_conflict_epi64(__A), 92 (__v4di)_mm256_setzero_si256()); 93} 94 95static __inline__ __m128i __DEFAULT_FN_ATTRS128 96_mm_conflict_epi32 (__m128i __A) 97{ 98 return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A); 99} 100 101static __inline__ __m128i __DEFAULT_FN_ATTRS128 102_mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A) 103{ 104 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, 105 (__v4si)_mm_conflict_epi32(__A), 106 (__v4si)__W); 107} 108 109static __inline__ __m128i __DEFAULT_FN_ATTRS128 110_mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A) 111{ 112 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, 113 (__v4si)_mm_conflict_epi32(__A), 114 (__v4si)_mm_setzero_si128()); 115} 116 117static __inline__ __m256i __DEFAULT_FN_ATTRS256 118_mm256_conflict_epi32 (__m256i __A) 119{ 120 return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A); 121} 122 123static __inline__ __m256i __DEFAULT_FN_ATTRS256 124_mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A) 125{ 126 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U, 127 (__v8si)_mm256_conflict_epi32(__A), 128 (__v8si)__W); 129} 130 131static __inline__ __m256i __DEFAULT_FN_ATTRS256 132_mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A) 133{ 134 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U, 135 (__v8si)_mm256_conflict_epi32(__A), 136 (__v8si)_mm256_setzero_si256()); 137} 138 139static __inline__ __m128i __DEFAULT_FN_ATTRS128 140_mm_lzcnt_epi32 (__m128i __A) 141{ 142 return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A); 143} 144 145static __inline__ __m128i __DEFAULT_FN_ATTRS128 146_mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A) 147{ 148 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, 149 (__v4si)_mm_lzcnt_epi32(__A), 150 (__v4si)__W); 151} 152 153static __inline__ __m128i __DEFAULT_FN_ATTRS128 154_mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A) 155{ 156 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, 157 (__v4si)_mm_lzcnt_epi32(__A), 158 (__v4si)_mm_setzero_si128()); 159} 160 161static __inline__ __m256i __DEFAULT_FN_ATTRS256 162_mm256_lzcnt_epi32 (__m256i __A) 163{ 164 return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A); 165} 166 167static __inline__ __m256i __DEFAULT_FN_ATTRS256 168_mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A) 169{ 170 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U, 171 (__v8si)_mm256_lzcnt_epi32(__A), 172 (__v8si)__W); 173} 174 175static __inline__ __m256i __DEFAULT_FN_ATTRS256 176_mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A) 177{ 178 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U, 179 (__v8si)_mm256_lzcnt_epi32(__A), 180 (__v8si)_mm256_setzero_si256()); 181} 182 183static __inline__ __m128i __DEFAULT_FN_ATTRS128 184_mm_lzcnt_epi64 (__m128i __A) 185{ 186 return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A); 187} 188 189static __inline__ __m128i __DEFAULT_FN_ATTRS128 190_mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A) 191{ 192 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U, 193 (__v2di)_mm_lzcnt_epi64(__A), 194 (__v2di)__W); 195} 196 197static __inline__ __m128i __DEFAULT_FN_ATTRS128 198_mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A) 199{ 200 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U, 201 (__v2di)_mm_lzcnt_epi64(__A), 202 (__v2di)_mm_setzero_si128()); 203} 204 205static __inline__ __m256i __DEFAULT_FN_ATTRS256 206_mm256_lzcnt_epi64 (__m256i __A) 207{ 208 return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A); 209} 210 211static __inline__ __m256i __DEFAULT_FN_ATTRS256 212_mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A) 213{ 214 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, 215 (__v4di)_mm256_lzcnt_epi64(__A), 216 (__v4di)__W); 217} 218 219static __inline__ __m256i __DEFAULT_FN_ATTRS256 220_mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A) 221{ 222 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, 223 (__v4di)_mm256_lzcnt_epi64(__A), 224 (__v4di)_mm256_setzero_si256()); 225} 226 227#undef __DEFAULT_FN_ATTRS128 228#undef __DEFAULT_FN_ATTRS256 229 230#endif /* __AVX512VLCDINTRIN_H */ 231