1 /*===------ avx512vlvp2intersectintrin.h - VL VP2INTERSECT 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 <avx512vlvp2intersectintrin.h> directly; include <immintrin.h> instead." 26 #endif 27 28 #ifndef _AVX512VLVP2INTERSECT_H 29 #define _AVX512VLVP2INTERSECT_H 30 31 #define __DEFAULT_FN_ATTRS128 \ 32 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vp2intersect"), \ 33 __min_vector_width__(128))) 34 35 #define __DEFAULT_FN_ATTRS256 \ 36 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vp2intersect"), \ 37 __min_vector_width__(256))) 38 /// Store, in an even/odd pair of mask registers, the indicators of the 39 /// locations of value matches between dwords in operands __a and __b. 40 /// 41 /// \headerfile <x86intrin.h> 42 /// 43 /// This intrinsic corresponds to the <c> VP2INTERSECTD </c> instruction. 44 /// 45 /// \param __a 46 /// A 256-bit vector of [8 x i32]. 47 /// \param __b 48 /// A 256-bit vector of [8 x i32] 49 /// \param __m0 50 /// A pointer point to 8-bit mask 51 /// \param __m1 52 /// A pointer point to 8-bit mask 53 static __inline__ void __DEFAULT_FN_ATTRS256 54 _mm256_2intersect_epi32(__m256i __a, __m256i __b, __mmask8 *__m0, __mmask8 *__m1) { 55 __builtin_ia32_vp2intersect_d_256((__v8si)__a, (__v8si)__b, __m0, __m1); 56 } 57 58 /// Store, in an even/odd pair of mask registers, the indicators of the 59 /// locations of value matches between quadwords in operands __a and __b. 60 /// 61 /// \headerfile <x86intrin.h> 62 /// 63 /// This intrinsic corresponds to the <c> VP2INTERSECTQ </c> instruction. 64 /// 65 /// \param __a 66 /// A 256-bit vector of [4 x i64]. 67 /// \param __b 68 /// A 256-bit vector of [4 x i64] 69 /// \param __m0 70 /// A pointer point to 8-bit mask 71 /// \param __m1 72 /// A pointer point to 8-bit mask 73 static __inline__ void __DEFAULT_FN_ATTRS256 74 _mm256_2intersect_epi64(__m256i __a, __m256i __b, __mmask8 *__m0, __mmask8 *__m1) { 75 __builtin_ia32_vp2intersect_q_256((__v4di)__a, (__v4di)__b, __m0, __m1); 76 } 77 78 /// Store, in an even/odd pair of mask registers, the indicators of the 79 /// locations of value matches between dwords in operands __a and __b. 80 /// 81 /// \headerfile <x86intrin.h> 82 /// 83 /// This intrinsic corresponds to the <c> VP2INTERSECTD </c> instruction. 84 /// 85 /// \param __a 86 /// A 128-bit vector of [4 x i32]. 87 /// \param __b 88 /// A 128-bit vector of [4 x i32] 89 /// \param __m0 90 /// A pointer point to 8-bit mask 91 /// \param __m1 92 /// A pointer point to 8-bit mask 93 static __inline__ void __DEFAULT_FN_ATTRS128 94 _mm_2intersect_epi32(__m128i __a, __m128i __b, __mmask8 *__m0, __mmask8 *__m1) { 95 __builtin_ia32_vp2intersect_d_128((__v4si)__a, (__v4si)__b, __m0, __m1); 96 } 97 98 /// Store, in an even/odd pair of mask registers, the indicators of the 99 /// locations of value matches between quadwords in operands __a and __b. 100 /// 101 /// \headerfile <x86intrin.h> 102 /// 103 /// This intrinsic corresponds to the <c> VP2INTERSECTQ </c> instruction. 104 /// 105 /// \param __a 106 /// A 128-bit vector of [2 x i64]. 107 /// \param __b 108 /// A 128-bit vector of [2 x i64] 109 /// \param __m0 110 /// A pointer point to 8-bit mask 111 /// \param __m1 112 /// A pointer point to 8-bit mask 113 static __inline__ void __DEFAULT_FN_ATTRS128 114 _mm_2intersect_epi64(__m128i __a, __m128i __b, __mmask8 *__m0, __mmask8 *__m1) { 115 __builtin_ia32_vp2intersect_q_128((__v2di)__a, (__v2di)__b, __m0, __m1); 116 } 117 118 #undef __DEFAULT_FN_ATTRS128 119 #undef __DEFAULT_FN_ATTRS256 120 121 #endif 122