annotate clang/lib/Headers/avx512vpopcntdqvlintrin.h @ 176:de4ac79aef9d

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 17:13:11 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 /*===---- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ intrinsics -------------===
anatofuz
parents:
diff changeset
2 *
anatofuz
parents:
diff changeset
3 *
anatofuz
parents:
diff changeset
4 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
5 * See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
7 *
anatofuz
parents:
diff changeset
8 *===-----------------------------------------------------------------------===
anatofuz
parents:
diff changeset
9 */
anatofuz
parents:
diff changeset
10 #ifndef __IMMINTRIN_H
anatofuz
parents:
diff changeset
11 #error \
anatofuz
parents:
diff changeset
12 "Never use <avx512vpopcntdqvlintrin.h> directly; include <immintrin.h> instead."
anatofuz
parents:
diff changeset
13 #endif
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15 #ifndef __AVX512VPOPCNTDQVLINTRIN_H
anatofuz
parents:
diff changeset
16 #define __AVX512VPOPCNTDQVLINTRIN_H
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 /* Define the default attributes for the functions in this file. */
anatofuz
parents:
diff changeset
19 #define __DEFAULT_FN_ATTRS128 \
anatofuz
parents:
diff changeset
20 __attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"), __min_vector_width__(128)))
anatofuz
parents:
diff changeset
21 #define __DEFAULT_FN_ATTRS256 \
anatofuz
parents:
diff changeset
22 __attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"), __min_vector_width__(256)))
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 static __inline__ __m128i __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
25 _mm_popcnt_epi64(__m128i __A) {
anatofuz
parents:
diff changeset
26 return (__m128i)__builtin_ia32_vpopcntq_128((__v2di)__A);
anatofuz
parents:
diff changeset
27 }
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 static __inline__ __m128i __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
30 _mm_mask_popcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
anatofuz
parents:
diff changeset
31 return (__m128i)__builtin_ia32_selectq_128(
anatofuz
parents:
diff changeset
32 (__mmask8)__U, (__v2di)_mm_popcnt_epi64(__A), (__v2di)__W);
anatofuz
parents:
diff changeset
33 }
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 static __inline__ __m128i __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
36 _mm_maskz_popcnt_epi64(__mmask8 __U, __m128i __A) {
anatofuz
parents:
diff changeset
37 return _mm_mask_popcnt_epi64((__m128i)_mm_setzero_si128(), __U, __A);
anatofuz
parents:
diff changeset
38 }
anatofuz
parents:
diff changeset
39
anatofuz
parents:
diff changeset
40 static __inline__ __m128i __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
41 _mm_popcnt_epi32(__m128i __A) {
anatofuz
parents:
diff changeset
42 return (__m128i)__builtin_ia32_vpopcntd_128((__v4si)__A);
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 static __inline__ __m128i __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
46 _mm_mask_popcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
anatofuz
parents:
diff changeset
47 return (__m128i)__builtin_ia32_selectd_128(
anatofuz
parents:
diff changeset
48 (__mmask8)__U, (__v4si)_mm_popcnt_epi32(__A), (__v4si)__W);
anatofuz
parents:
diff changeset
49 }
anatofuz
parents:
diff changeset
50
anatofuz
parents:
diff changeset
51 static __inline__ __m128i __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
52 _mm_maskz_popcnt_epi32(__mmask8 __U, __m128i __A) {
anatofuz
parents:
diff changeset
53 return _mm_mask_popcnt_epi32((__m128i)_mm_setzero_si128(), __U, __A);
anatofuz
parents:
diff changeset
54 }
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 static __inline__ __m256i __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
57 _mm256_popcnt_epi64(__m256i __A) {
anatofuz
parents:
diff changeset
58 return (__m256i)__builtin_ia32_vpopcntq_256((__v4di)__A);
anatofuz
parents:
diff changeset
59 }
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 static __inline__ __m256i __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
62 _mm256_mask_popcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
anatofuz
parents:
diff changeset
63 return (__m256i)__builtin_ia32_selectq_256(
anatofuz
parents:
diff changeset
64 (__mmask8)__U, (__v4di)_mm256_popcnt_epi64(__A), (__v4di)__W);
anatofuz
parents:
diff changeset
65 }
anatofuz
parents:
diff changeset
66
anatofuz
parents:
diff changeset
67 static __inline__ __m256i __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
68 _mm256_maskz_popcnt_epi64(__mmask8 __U, __m256i __A) {
anatofuz
parents:
diff changeset
69 return _mm256_mask_popcnt_epi64((__m256i)_mm256_setzero_si256(), __U, __A);
anatofuz
parents:
diff changeset
70 }
anatofuz
parents:
diff changeset
71
anatofuz
parents:
diff changeset
72 static __inline__ __m256i __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
73 _mm256_popcnt_epi32(__m256i __A) {
anatofuz
parents:
diff changeset
74 return (__m256i)__builtin_ia32_vpopcntd_256((__v8si)__A);
anatofuz
parents:
diff changeset
75 }
anatofuz
parents:
diff changeset
76
anatofuz
parents:
diff changeset
77 static __inline__ __m256i __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
78 _mm256_mask_popcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
anatofuz
parents:
diff changeset
79 return (__m256i)__builtin_ia32_selectd_256(
anatofuz
parents:
diff changeset
80 (__mmask8)__U, (__v8si)_mm256_popcnt_epi32(__A), (__v8si)__W);
anatofuz
parents:
diff changeset
81 }
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 static __inline__ __m256i __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
84 _mm256_maskz_popcnt_epi32(__mmask8 __U, __m256i __A) {
anatofuz
parents:
diff changeset
85 return _mm256_mask_popcnt_epi32((__m256i)_mm256_setzero_si256(), __U, __A);
anatofuz
parents:
diff changeset
86 }
anatofuz
parents:
diff changeset
87
anatofuz
parents:
diff changeset
88 #undef __DEFAULT_FN_ATTRS128
anatofuz
parents:
diff changeset
89 #undef __DEFAULT_FN_ATTRS256
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 #endif