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 26 static __inline__ __m128i __DEFAULT_FN_ATTRS128 27 _mm_broadcastmb_epi64 (__mmask8 __A) 28 { 29 return (__m128i) _mm_set1_epi64x((long long) __A); 30 } 31 32 static __inline__ __m256i __DEFAULT_FN_ATTRS256 33 _mm256_broadcastmb_epi64 (__mmask8 __A) 34 { 35 return (__m256i) _mm256_set1_epi64x((long long)__A); 36 } 37 38 static __inline__ __m128i __DEFAULT_FN_ATTRS128 39 _mm_broadcastmw_epi32 (__mmask16 __A) 40 { 41 return (__m128i) _mm_set1_epi32((int)__A); 42 } 43 44 static __inline__ __m256i __DEFAULT_FN_ATTRS256 45 _mm256_broadcastmw_epi32 (__mmask16 __A) 46 { 47 return (__m256i) _mm256_set1_epi32((int)__A); 48 } 49 50 51 static __inline__ __m128i __DEFAULT_FN_ATTRS128 52 _mm_conflict_epi64 (__m128i __A) 53 { 54 return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A); 55 } 56 57 static __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 65 static __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 73 static __inline__ __m256i __DEFAULT_FN_ATTRS256 74 _mm256_conflict_epi64 (__m256i __A) 75 { 76 return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A); 77 } 78 79 static __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 87 static __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 95 static __inline__ __m128i __DEFAULT_FN_ATTRS128 96 _mm_conflict_epi32 (__m128i __A) 97 { 98 return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A); 99 } 100 101 static __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 109 static __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 117 static __inline__ __m256i __DEFAULT_FN_ATTRS256 118 _mm256_conflict_epi32 (__m256i __A) 119 { 120 return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A); 121 } 122 123 static __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 131 static __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 139 static __inline__ __m128i __DEFAULT_FN_ATTRS128 140 _mm_lzcnt_epi32 (__m128i __A) 141 { 142 return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A); 143 } 144 145 static __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 153 static __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 161 static __inline__ __m256i __DEFAULT_FN_ATTRS256 162 _mm256_lzcnt_epi32 (__m256i __A) 163 { 164 return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A); 165 } 166 167 static __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 175 static __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 183 static __inline__ __m128i __DEFAULT_FN_ATTRS128 184 _mm_lzcnt_epi64 (__m128i __A) 185 { 186 return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A); 187 } 188 189 static __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 197 static __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 205 static __inline__ __m256i __DEFAULT_FN_ATTRS256 206 _mm256_lzcnt_epi64 (__m256i __A) 207 { 208 return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A); 209 } 210 211 static __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 219 static __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