Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.