Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. /*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
  2.  *
  3.  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4.  * See https://llvm.org/LICENSE.txt for license information.
  5.  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6.  *
  7.  *===-----------------------------------------------------------------------===
  8.  */
  9. #ifndef __IMMINTRIN_H
  10. #error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
  11. #endif
  12.  
  13. #ifndef __AVX512VLCDINTRIN_H
  14. #define __AVX512VLCDINTRIN_H
  15.  
  16. /* Define the default attributes for the functions in this file. */
  17. #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(128)))
  18. #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(256)))
  19.  
  20.  
  21. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  22. _mm_broadcastmb_epi64 (__mmask8 __A)
  23. {
  24.   return (__m128i) _mm_set1_epi64x((long long) __A);
  25. }
  26.  
  27. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  28. _mm256_broadcastmb_epi64 (__mmask8 __A)
  29. {
  30.   return (__m256i) _mm256_set1_epi64x((long long)__A);
  31. }
  32.  
  33. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  34. _mm_broadcastmw_epi32 (__mmask16 __A)
  35. {
  36.   return (__m128i) _mm_set1_epi32((int)__A);
  37. }
  38.  
  39. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  40. _mm256_broadcastmw_epi32 (__mmask16 __A)
  41. {
  42.   return (__m256i) _mm256_set1_epi32((int)__A);
  43. }
  44.  
  45.  
  46. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  47. _mm_conflict_epi64 (__m128i __A)
  48. {
  49.   return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A);
  50. }
  51.  
  52. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  53. _mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
  54. {
  55.   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
  56.                                              (__v2di)_mm_conflict_epi64(__A),
  57.                                              (__v2di)__W);
  58. }
  59.  
  60. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  61. _mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
  62. {
  63.   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
  64.                                              (__v2di)_mm_conflict_epi64(__A),
  65.                                              (__v2di)_mm_setzero_si128());
  66. }
  67.  
  68. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  69. _mm256_conflict_epi64 (__m256i __A)
  70. {
  71.   return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A);
  72. }
  73.  
  74. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  75. _mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
  76. {
  77.   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
  78.                                              (__v4di)_mm256_conflict_epi64(__A),
  79.                                              (__v4di)__W);
  80. }
  81.  
  82. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  83. _mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
  84. {
  85.   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
  86.                                              (__v4di)_mm256_conflict_epi64(__A),
  87.                                              (__v4di)_mm256_setzero_si256());
  88. }
  89.  
  90. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  91. _mm_conflict_epi32 (__m128i __A)
  92. {
  93.   return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A);
  94. }
  95.  
  96. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  97. _mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
  98. {
  99.   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
  100.                                              (__v4si)_mm_conflict_epi32(__A),
  101.                                              (__v4si)__W);
  102. }
  103.  
  104. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  105. _mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
  106. {
  107.   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
  108.                                              (__v4si)_mm_conflict_epi32(__A),
  109.                                              (__v4si)_mm_setzero_si128());
  110. }
  111.  
  112. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  113. _mm256_conflict_epi32 (__m256i __A)
  114. {
  115.   return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A);
  116. }
  117.  
  118. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  119. _mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
  120. {
  121.   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
  122.                                              (__v8si)_mm256_conflict_epi32(__A),
  123.                                              (__v8si)__W);
  124. }
  125.  
  126. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  127. _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
  128. {
  129.   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
  130.                                              (__v8si)_mm256_conflict_epi32(__A),
  131.                                              (__v8si)_mm256_setzero_si256());
  132. }
  133.  
  134. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  135. _mm_lzcnt_epi32 (__m128i __A)
  136. {
  137.   return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
  138. }
  139.  
  140. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  141. _mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
  142. {
  143.   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
  144.                                              (__v4si)_mm_lzcnt_epi32(__A),
  145.                                              (__v4si)__W);
  146. }
  147.  
  148. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  149. _mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
  150. {
  151.   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
  152.                                              (__v4si)_mm_lzcnt_epi32(__A),
  153.                                              (__v4si)_mm_setzero_si128());
  154. }
  155.  
  156. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  157. _mm256_lzcnt_epi32 (__m256i __A)
  158. {
  159.   return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
  160. }
  161.  
  162. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  163. _mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
  164. {
  165.   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
  166.                                              (__v8si)_mm256_lzcnt_epi32(__A),
  167.                                              (__v8si)__W);
  168. }
  169.  
  170. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  171. _mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
  172. {
  173.   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
  174.                                              (__v8si)_mm256_lzcnt_epi32(__A),
  175.                                              (__v8si)_mm256_setzero_si256());
  176. }
  177.  
  178. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  179. _mm_lzcnt_epi64 (__m128i __A)
  180. {
  181.   return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
  182. }
  183.  
  184. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  185. _mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
  186. {
  187.   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
  188.                                              (__v2di)_mm_lzcnt_epi64(__A),
  189.                                              (__v2di)__W);
  190. }
  191.  
  192. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  193. _mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
  194. {
  195.   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
  196.                                              (__v2di)_mm_lzcnt_epi64(__A),
  197.                                              (__v2di)_mm_setzero_si128());
  198. }
  199.  
  200. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  201. _mm256_lzcnt_epi64 (__m256i __A)
  202. {
  203.   return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
  204. }
  205.  
  206. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  207. _mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
  208. {
  209.   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
  210.                                              (__v4di)_mm256_lzcnt_epi64(__A),
  211.                                              (__v4di)__W);
  212. }
  213.  
  214. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  215. _mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
  216. {
  217.   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
  218.                                              (__v4di)_mm256_lzcnt_epi64(__A),
  219.                                              (__v4di)_mm256_setzero_si256());
  220. }
  221.  
  222. #undef __DEFAULT_FN_ATTRS128
  223. #undef __DEFAULT_FN_ATTRS256
  224.  
  225. #endif /* __AVX512VLCDINTRIN_H */
  226.