master
  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
 55static __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
 75static __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
 95static __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
115static __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