annotate clang/lib/Headers/tbmintrin.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 /*===---- tbmintrin.h - TBM intrinsics -------------------------------------===
anatofuz
parents:
diff changeset
2 *
anatofuz
parents:
diff changeset
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 * See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 *
anatofuz
parents:
diff changeset
7 *===-----------------------------------------------------------------------===
anatofuz
parents:
diff changeset
8 */
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 #ifndef __X86INTRIN_H
anatofuz
parents:
diff changeset
11 #error "Never use <tbmintrin.h> directly; include <x86intrin.h> instead."
anatofuz
parents:
diff changeset
12 #endif
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 #ifndef __TBMINTRIN_H
anatofuz
parents:
diff changeset
15 #define __TBMINTRIN_H
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 /* Define the default attributes for the functions in this file. */
anatofuz
parents:
diff changeset
18 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("tbm")))
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 #define __bextri_u32(a, b) \
anatofuz
parents:
diff changeset
21 ((unsigned int)__builtin_ia32_bextri_u32((unsigned int)(a), \
anatofuz
parents:
diff changeset
22 (unsigned int)(b)))
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
25 __blcfill_u32(unsigned int __a)
anatofuz
parents:
diff changeset
26 {
anatofuz
parents:
diff changeset
27 return __a & (__a + 1);
anatofuz
parents:
diff changeset
28 }
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
31 __blci_u32(unsigned int __a)
anatofuz
parents:
diff changeset
32 {
anatofuz
parents:
diff changeset
33 return __a | ~(__a + 1);
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
37 __blcic_u32(unsigned int __a)
anatofuz
parents:
diff changeset
38 {
anatofuz
parents:
diff changeset
39 return ~__a & (__a + 1);
anatofuz
parents:
diff changeset
40 }
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
43 __blcmsk_u32(unsigned int __a)
anatofuz
parents:
diff changeset
44 {
anatofuz
parents:
diff changeset
45 return __a ^ (__a + 1);
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
49 __blcs_u32(unsigned int __a)
anatofuz
parents:
diff changeset
50 {
anatofuz
parents:
diff changeset
51 return __a | (__a + 1);
anatofuz
parents:
diff changeset
52 }
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
55 __blsfill_u32(unsigned int __a)
anatofuz
parents:
diff changeset
56 {
anatofuz
parents:
diff changeset
57 return __a | (__a - 1);
anatofuz
parents:
diff changeset
58 }
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
61 __blsic_u32(unsigned int __a)
anatofuz
parents:
diff changeset
62 {
anatofuz
parents:
diff changeset
63 return ~__a | (__a - 1);
anatofuz
parents:
diff changeset
64 }
anatofuz
parents:
diff changeset
65
anatofuz
parents:
diff changeset
66 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
67 __t1mskc_u32(unsigned int __a)
anatofuz
parents:
diff changeset
68 {
anatofuz
parents:
diff changeset
69 return ~__a | (__a + 1);
anatofuz
parents:
diff changeset
70 }
anatofuz
parents:
diff changeset
71
anatofuz
parents:
diff changeset
72 static __inline__ unsigned int __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
73 __tzmsk_u32(unsigned int __a)
anatofuz
parents:
diff changeset
74 {
anatofuz
parents:
diff changeset
75 return ~__a & (__a - 1);
anatofuz
parents:
diff changeset
76 }
anatofuz
parents:
diff changeset
77
anatofuz
parents:
diff changeset
78 #ifdef __x86_64__
anatofuz
parents:
diff changeset
79 #define __bextri_u64(a, b) \
anatofuz
parents:
diff changeset
80 ((unsigned long long)__builtin_ia32_bextri_u64((unsigned long long)(a), \
anatofuz
parents:
diff changeset
81 (unsigned long long)(b)))
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
84 __blcfill_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
85 {
anatofuz
parents:
diff changeset
86 return __a & (__a + 1);
anatofuz
parents:
diff changeset
87 }
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
90 __blci_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
91 {
anatofuz
parents:
diff changeset
92 return __a | ~(__a + 1);
anatofuz
parents:
diff changeset
93 }
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
96 __blcic_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
97 {
anatofuz
parents:
diff changeset
98 return ~__a & (__a + 1);
anatofuz
parents:
diff changeset
99 }
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
102 __blcmsk_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
103 {
anatofuz
parents:
diff changeset
104 return __a ^ (__a + 1);
anatofuz
parents:
diff changeset
105 }
anatofuz
parents:
diff changeset
106
anatofuz
parents:
diff changeset
107 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
108 __blcs_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
109 {
anatofuz
parents:
diff changeset
110 return __a | (__a + 1);
anatofuz
parents:
diff changeset
111 }
anatofuz
parents:
diff changeset
112
anatofuz
parents:
diff changeset
113 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
114 __blsfill_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
115 {
anatofuz
parents:
diff changeset
116 return __a | (__a - 1);
anatofuz
parents:
diff changeset
117 }
anatofuz
parents:
diff changeset
118
anatofuz
parents:
diff changeset
119 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
120 __blsic_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
121 {
anatofuz
parents:
diff changeset
122 return ~__a | (__a - 1);
anatofuz
parents:
diff changeset
123 }
anatofuz
parents:
diff changeset
124
anatofuz
parents:
diff changeset
125 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
126 __t1mskc_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
127 {
anatofuz
parents:
diff changeset
128 return ~__a | (__a + 1);
anatofuz
parents:
diff changeset
129 }
anatofuz
parents:
diff changeset
130
anatofuz
parents:
diff changeset
131 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
132 __tzmsk_u64(unsigned long long __a)
anatofuz
parents:
diff changeset
133 {
anatofuz
parents:
diff changeset
134 return ~__a & (__a - 1);
anatofuz
parents:
diff changeset
135 }
anatofuz
parents:
diff changeset
136 #endif
anatofuz
parents:
diff changeset
137
anatofuz
parents:
diff changeset
138 #undef __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
139
anatofuz
parents:
diff changeset
140 #endif /* __TBMINTRIN_H */