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