avx512vpopcntdqvlintrin.h revision 327024
17942Sroland/*===------------- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ intrinsics 27942Sroland *------------------=== 37942Sroland * 47942Sroland * 57942Sroland * Permission is hereby granted, free of charge, to any person obtaining a copy 67942Sroland * of this software and associated documentation files (the "Software"), to deal 77942Sroland * in the Software without restriction, including without limitation the rights 87942Sroland * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 97942Sroland * copies of the Software, and to permit persons to whom the Software is 107942Sroland * furnished to do so, subject to the following conditions: 117942Sroland * 127942Sroland * The above copyright notice and this permission notice shall be included in 137942Sroland * all copies or substantial portions of the Software. 147942Sroland * 157942Sroland * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 167942Sroland * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 177942Sroland * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 187942Sroland * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 197942Sroland * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 207942Sroland * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 217942Sroland * THE SOFTWARE. 227942Sroland * 237942Sroland *===-----------------------------------------------------------------------=== 247942Sroland */ 257942Sroland#ifndef __IMMINTRIN_H 267942Sroland#error \ 277942Sroland "Never use <avx512vpopcntdqvlintrin.h> directly; include <immintrin.h> instead." 287942Sroland#endif 2911707Stpivovarova 3011707Stpivovarova#ifndef __AVX512VPOPCNTDQVLINTRIN_H 3111707Stpivovarova#define __AVX512VPOPCNTDQVLINTRIN_H 327942Sroland 337942Sroland/* Define the default attributes for the functions in this file. */ 3411707Stpivovarova#define __DEFAULT_FN_ATTRS \ 3510801Szmajo __attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"))) 3610801Szmajo 3710801Szmajostatic __inline__ __m128i __DEFAULT_FN_ATTRS _mm_popcnt_epi64(__m128i __A) { 3810801Szmajo return (__m128i)__builtin_ia32_vpopcntq_128((__v2di)__A); 3910801Szmajo} 4010801Szmajo 4110801Szmajostatic __inline__ __m128i __DEFAULT_FN_ATTRS 4210801Szmajo_mm_mask_popcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) { 4310801Szmajo return (__m128i)__builtin_ia32_selectq_128( 447942Sroland (__mmask8)__U, (__v2di)_mm_popcnt_epi64(__A), (__v2di)__W); 457942Sroland} 467942Sroland 477942Srolandstatic __inline__ __m128i __DEFAULT_FN_ATTRS 487942Sroland_mm_maskz_popcnt_epi64(__mmask8 __U, __m128i __A) { 497942Sroland return _mm_mask_popcnt_epi64((__m128i)_mm_setzero_si128(), __U, __A); 507942Sroland} 517942Sroland 527942Srolandstatic __inline__ __m128i __DEFAULT_FN_ATTRS _mm_popcnt_epi32(__m128i __A) { 537942Sroland return (__m128i)__builtin_ia32_vpopcntd_128((__v4si)__A); 547942Sroland} 557942Sroland 567942Srolandstatic __inline__ __m128i __DEFAULT_FN_ATTRS 577942Sroland_mm_mask_popcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) { 58 return (__m128i)__builtin_ia32_selectd_128( 59 (__mmask8)__U, (__v4si)_mm_popcnt_epi32(__A), (__v4si)__W); 60} 61 62static __inline__ __m128i __DEFAULT_FN_ATTRS 63_mm_maskz_popcnt_epi32(__mmask8 __U, __m128i __A) { 64 return _mm_mask_popcnt_epi32((__m128i)_mm_setzero_si128(), __U, __A); 65} 66 67static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_popcnt_epi64(__m256i __A) { 68 return (__m256i)__builtin_ia32_vpopcntq_256((__v4di)__A); 69} 70 71static __inline__ __m256i __DEFAULT_FN_ATTRS 72_mm256_mask_popcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) { 73 return (__m256i)__builtin_ia32_selectq_256( 74 (__mmask8)__U, (__v4di)_mm256_popcnt_epi64(__A), (__v4di)__W); 75} 76 77static __inline__ __m256i __DEFAULT_FN_ATTRS 78_mm256_maskz_popcnt_epi64(__mmask8 __U, __m256i __A) { 79 return _mm256_mask_popcnt_epi64((__m256i)_mm256_setzero_si256(), __U, __A); 80} 81 82static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_popcnt_epi32(__m256i __A) { 83 return (__m256i)__builtin_ia32_vpopcntd_256((__v8si)__A); 84} 85 86static __inline__ __m256i __DEFAULT_FN_ATTRS 87_mm256_mask_popcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) { 88 return (__m256i)__builtin_ia32_selectd_256( 89 (__mmask8)__U, (__v8si)_mm256_popcnt_epi32(__A), (__v8si)__W); 90} 91 92static __inline__ __m256i __DEFAULT_FN_ATTRS 93_mm256_maskz_popcnt_epi32(__mmask8 __U, __m256i __A) { 94 return _mm256_mask_popcnt_epi32((__m256i)_mm256_setzero_si256(), __U, __A); 95} 96 97#undef __DEFAULT_FN_ATTRS 98 99#endif 100