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