avx512cdintrin.h revision 341825
1/*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------=== 2 * 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 * THE SOFTWARE. 21 * 22 *===-----------------------------------------------------------------------=== 23 */ 24#ifndef __IMMINTRIN_H 25#error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead." 26#endif 27 28#ifndef __AVX512CDINTRIN_H 29#define __AVX512CDINTRIN_H 30 31/* Define the default attributes for the functions in this file. */ 32#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd"), __min_vector_width__(512))) 33 34static __inline__ __m512i __DEFAULT_FN_ATTRS 35_mm512_conflict_epi64 (__m512i __A) 36{ 37 return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, 38 (__v8di) _mm512_setzero_si512 (), 39 (__mmask8) -1); 40} 41 42static __inline__ __m512i __DEFAULT_FN_ATTRS 43_mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A) 44{ 45 return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, 46 (__v8di) __W, 47 (__mmask8) __U); 48} 49 50static __inline__ __m512i __DEFAULT_FN_ATTRS 51_mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A) 52{ 53 return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, 54 (__v8di) _mm512_setzero_si512 (), 55 (__mmask8) __U); 56} 57 58static __inline__ __m512i __DEFAULT_FN_ATTRS 59_mm512_conflict_epi32 (__m512i __A) 60{ 61 return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A, 62 (__v16si) _mm512_setzero_si512 (), 63 (__mmask16) -1); 64} 65 66static __inline__ __m512i __DEFAULT_FN_ATTRS 67_mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A) 68{ 69 return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A, 70 (__v16si) __W, 71 (__mmask16) __U); 72} 73 74static __inline__ __m512i __DEFAULT_FN_ATTRS 75_mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A) 76{ 77 return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A, 78 (__v16si) _mm512_setzero_si512 (), 79 (__mmask16) __U); 80} 81 82static __inline__ __m512i __DEFAULT_FN_ATTRS 83_mm512_lzcnt_epi32 (__m512i __A) 84{ 85 return (__m512i) __builtin_ia32_vplzcntd_512 ((__v16si) __A); 86} 87 88static __inline__ __m512i __DEFAULT_FN_ATTRS 89_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A) 90{ 91 return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U, 92 (__v16si)_mm512_lzcnt_epi32(__A), 93 (__v16si)__W); 94} 95 96static __inline__ __m512i __DEFAULT_FN_ATTRS 97_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A) 98{ 99 return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U, 100 (__v16si)_mm512_lzcnt_epi32(__A), 101 (__v16si)_mm512_setzero_si512()); 102} 103 104static __inline__ __m512i __DEFAULT_FN_ATTRS 105_mm512_lzcnt_epi64 (__m512i __A) 106{ 107 return (__m512i) __builtin_ia32_vplzcntq_512 ((__v8di) __A); 108} 109 110static __inline__ __m512i __DEFAULT_FN_ATTRS 111_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A) 112{ 113 return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U, 114 (__v8di)_mm512_lzcnt_epi64(__A), 115 (__v8di)__W); 116} 117 118static __inline__ __m512i __DEFAULT_FN_ATTRS 119_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A) 120{ 121 return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U, 122 (__v8di)_mm512_lzcnt_epi64(__A), 123 (__v8di)_mm512_setzero_si512()); 124} 125 126static __inline__ __m512i __DEFAULT_FN_ATTRS 127_mm512_broadcastmb_epi64 (__mmask8 __A) 128{ 129 return (__m512i) _mm512_set1_epi64((long long) __A); 130} 131 132static __inline__ __m512i __DEFAULT_FN_ATTRS 133_mm512_broadcastmw_epi32 (__mmask16 __A) 134{ 135 return (__m512i) _mm512_set1_epi32((int) __A); 136 137} 138 139#undef __DEFAULT_FN_ATTRS 140 141#endif 142