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

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 17:13:11 +0900
parents 0572611fdcc8
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 /*===---- immintrin.h - Intel 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 __IMMINTRIN_H
anatofuz
parents:
diff changeset
11 #define __IMMINTRIN_H
anatofuz
parents:
diff changeset
12
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
13 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
14 defined(__MMX__)
150
anatofuz
parents:
diff changeset
15 #include <mmintrin.h>
anatofuz
parents:
diff changeset
16 #endif
anatofuz
parents:
diff changeset
17
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
18 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
19 defined(__SSE__)
150
anatofuz
parents:
diff changeset
20 #include <xmmintrin.h>
anatofuz
parents:
diff changeset
21 #endif
anatofuz
parents:
diff changeset
22
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
23 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
24 defined(__SSE2__)
150
anatofuz
parents:
diff changeset
25 #include <emmintrin.h>
anatofuz
parents:
diff changeset
26 #endif
anatofuz
parents:
diff changeset
27
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
28 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
29 defined(__SSE3__)
150
anatofuz
parents:
diff changeset
30 #include <pmmintrin.h>
anatofuz
parents:
diff changeset
31 #endif
anatofuz
parents:
diff changeset
32
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
33 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
34 defined(__SSSE3__)
150
anatofuz
parents:
diff changeset
35 #include <tmmintrin.h>
anatofuz
parents:
diff changeset
36 #endif
anatofuz
parents:
diff changeset
37
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
38 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
39 (defined(__SSE4_2__) || defined(__SSE4_1__))
anatofuz
parents:
diff changeset
40 #include <smmintrin.h>
anatofuz
parents:
diff changeset
41 #endif
anatofuz
parents:
diff changeset
42
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
43 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
44 (defined(__AES__) || defined(__PCLMUL__))
anatofuz
parents:
diff changeset
45 #include <wmmintrin.h>
anatofuz
parents:
diff changeset
46 #endif
anatofuz
parents:
diff changeset
47
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
48 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
49 defined(__CLFLUSHOPT__)
150
anatofuz
parents:
diff changeset
50 #include <clflushoptintrin.h>
anatofuz
parents:
diff changeset
51 #endif
anatofuz
parents:
diff changeset
52
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
53 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
54 defined(__CLWB__)
150
anatofuz
parents:
diff changeset
55 #include <clwbintrin.h>
anatofuz
parents:
diff changeset
56 #endif
anatofuz
parents:
diff changeset
57
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
58 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
59 defined(__AVX__)
150
anatofuz
parents:
diff changeset
60 #include <avxintrin.h>
anatofuz
parents:
diff changeset
61 #endif
anatofuz
parents:
diff changeset
62
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
63 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
64 defined(__AVX2__)
150
anatofuz
parents:
diff changeset
65 #include <avx2intrin.h>
anatofuz
parents:
diff changeset
66 #endif
anatofuz
parents:
diff changeset
67
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
68 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
69 defined(__F16C__)
150
anatofuz
parents:
diff changeset
70 #include <f16cintrin.h>
anatofuz
parents:
diff changeset
71 #endif
anatofuz
parents:
diff changeset
72
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
73 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 defined(__VPCLMULQDQ__)
150
anatofuz
parents:
diff changeset
75 #include <vpclmulqdqintrin.h>
anatofuz
parents:
diff changeset
76 #endif
anatofuz
parents:
diff changeset
77
anatofuz
parents:
diff changeset
78 /* No feature check desired due to internal checks */
anatofuz
parents:
diff changeset
79 #include <bmiintrin.h>
anatofuz
parents:
diff changeset
80
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
81 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
82 defined(__BMI2__)
150
anatofuz
parents:
diff changeset
83 #include <bmi2intrin.h>
anatofuz
parents:
diff changeset
84 #endif
anatofuz
parents:
diff changeset
85
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
86 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
87 defined(__LZCNT__)
150
anatofuz
parents:
diff changeset
88 #include <lzcntintrin.h>
anatofuz
parents:
diff changeset
89 #endif
anatofuz
parents:
diff changeset
90
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
91 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
92 defined(__POPCNT__)
150
anatofuz
parents:
diff changeset
93 #include <popcntintrin.h>
anatofuz
parents:
diff changeset
94 #endif
anatofuz
parents:
diff changeset
95
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
96 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
97 defined(__FMA__)
150
anatofuz
parents:
diff changeset
98 #include <fmaintrin.h>
anatofuz
parents:
diff changeset
99 #endif
anatofuz
parents:
diff changeset
100
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
101 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
102 defined(__AVX512F__)
150
anatofuz
parents:
diff changeset
103 #include <avx512fintrin.h>
anatofuz
parents:
diff changeset
104 #endif
anatofuz
parents:
diff changeset
105
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
106 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
107 defined(__AVX512VL__)
150
anatofuz
parents:
diff changeset
108 #include <avx512vlintrin.h>
anatofuz
parents:
diff changeset
109 #endif
anatofuz
parents:
diff changeset
110
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
111 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
112 defined(__AVX512BW__)
150
anatofuz
parents:
diff changeset
113 #include <avx512bwintrin.h>
anatofuz
parents:
diff changeset
114 #endif
anatofuz
parents:
diff changeset
115
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
116 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
117 defined(__AVX512BITALG__)
150
anatofuz
parents:
diff changeset
118 #include <avx512bitalgintrin.h>
anatofuz
parents:
diff changeset
119 #endif
anatofuz
parents:
diff changeset
120
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
121 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
122 defined(__AVX512CD__)
150
anatofuz
parents:
diff changeset
123 #include <avx512cdintrin.h>
anatofuz
parents:
diff changeset
124 #endif
anatofuz
parents:
diff changeset
125
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
126 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
127 defined(__AVX512VPOPCNTDQ__)
150
anatofuz
parents:
diff changeset
128 #include <avx512vpopcntdqintrin.h>
anatofuz
parents:
diff changeset
129 #endif
anatofuz
parents:
diff changeset
130
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
131 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
132 (defined(__AVX512VL__) && defined(__AVX512VPOPCNTDQ__))
anatofuz
parents:
diff changeset
133 #include <avx512vpopcntdqvlintrin.h>
anatofuz
parents:
diff changeset
134 #endif
anatofuz
parents:
diff changeset
135
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
136 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
137 defined(__AVX512VNNI__)
150
anatofuz
parents:
diff changeset
138 #include <avx512vnniintrin.h>
anatofuz
parents:
diff changeset
139 #endif
anatofuz
parents:
diff changeset
140
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
141 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
142 (defined(__AVX512VL__) && defined(__AVX512VNNI__))
anatofuz
parents:
diff changeset
143 #include <avx512vlvnniintrin.h>
anatofuz
parents:
diff changeset
144 #endif
anatofuz
parents:
diff changeset
145
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
146 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
147 defined(__AVX512DQ__)
150
anatofuz
parents:
diff changeset
148 #include <avx512dqintrin.h>
anatofuz
parents:
diff changeset
149 #endif
anatofuz
parents:
diff changeset
150
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
151 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
152 (defined(__AVX512VL__) && defined(__AVX512BITALG__))
anatofuz
parents:
diff changeset
153 #include <avx512vlbitalgintrin.h>
anatofuz
parents:
diff changeset
154 #endif
anatofuz
parents:
diff changeset
155
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
156 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
157 (defined(__AVX512VL__) && defined(__AVX512BW__))
anatofuz
parents:
diff changeset
158 #include <avx512vlbwintrin.h>
anatofuz
parents:
diff changeset
159 #endif
anatofuz
parents:
diff changeset
160
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
161 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
162 (defined(__AVX512VL__) && defined(__AVX512CD__))
anatofuz
parents:
diff changeset
163 #include <avx512vlcdintrin.h>
anatofuz
parents:
diff changeset
164 #endif
anatofuz
parents:
diff changeset
165
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
166 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
167 (defined(__AVX512VL__) && defined(__AVX512DQ__))
anatofuz
parents:
diff changeset
168 #include <avx512vldqintrin.h>
anatofuz
parents:
diff changeset
169 #endif
anatofuz
parents:
diff changeset
170
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
171 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
172 defined(__AVX512ER__)
150
anatofuz
parents:
diff changeset
173 #include <avx512erintrin.h>
anatofuz
parents:
diff changeset
174 #endif
anatofuz
parents:
diff changeset
175
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
176 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
177 defined(__AVX512IFMA__)
150
anatofuz
parents:
diff changeset
178 #include <avx512ifmaintrin.h>
anatofuz
parents:
diff changeset
179 #endif
anatofuz
parents:
diff changeset
180
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
181 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
182 (defined(__AVX512IFMA__) && defined(__AVX512VL__))
anatofuz
parents:
diff changeset
183 #include <avx512ifmavlintrin.h>
anatofuz
parents:
diff changeset
184 #endif
anatofuz
parents:
diff changeset
185
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
186 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
187 defined(__AVX512VBMI__)
150
anatofuz
parents:
diff changeset
188 #include <avx512vbmiintrin.h>
anatofuz
parents:
diff changeset
189 #endif
anatofuz
parents:
diff changeset
190
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
191 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
192 (defined(__AVX512VBMI__) && defined(__AVX512VL__))
anatofuz
parents:
diff changeset
193 #include <avx512vbmivlintrin.h>
anatofuz
parents:
diff changeset
194 #endif
anatofuz
parents:
diff changeset
195
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
196 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
197 defined(__AVX512VBMI2__)
150
anatofuz
parents:
diff changeset
198 #include <avx512vbmi2intrin.h>
anatofuz
parents:
diff changeset
199 #endif
anatofuz
parents:
diff changeset
200
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
201 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
202 (defined(__AVX512VBMI2__) && defined(__AVX512VL__))
anatofuz
parents:
diff changeset
203 #include <avx512vlvbmi2intrin.h>
anatofuz
parents:
diff changeset
204 #endif
anatofuz
parents:
diff changeset
205
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
206 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
207 defined(__AVX512PF__)
150
anatofuz
parents:
diff changeset
208 #include <avx512pfintrin.h>
anatofuz
parents:
diff changeset
209 #endif
anatofuz
parents:
diff changeset
210
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
211 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
212 defined(__AVX512BF16__)
150
anatofuz
parents:
diff changeset
213 #include <avx512bf16intrin.h>
anatofuz
parents:
diff changeset
214 #endif
anatofuz
parents:
diff changeset
215
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
216 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
150
anatofuz
parents:
diff changeset
217 (defined(__AVX512VL__) && defined(__AVX512BF16__))
anatofuz
parents:
diff changeset
218 #include <avx512vlbf16intrin.h>
anatofuz
parents:
diff changeset
219 #endif
anatofuz
parents:
diff changeset
220
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
221 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
222 defined(__PKU__)
150
anatofuz
parents:
diff changeset
223 #include <pkuintrin.h>
anatofuz
parents:
diff changeset
224 #endif
anatofuz
parents:
diff changeset
225
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
226 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
227 defined(__VAES__)
150
anatofuz
parents:
diff changeset
228 #include <vaesintrin.h>
anatofuz
parents:
diff changeset
229 #endif
anatofuz
parents:
diff changeset
230
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
231 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
232 defined(__GFNI__)
150
anatofuz
parents:
diff changeset
233 #include <gfniintrin.h>
anatofuz
parents:
diff changeset
234 #endif
anatofuz
parents:
diff changeset
235
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
236 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
237 defined(__RDPID__)
150
anatofuz
parents:
diff changeset
238 /// Returns the value of the IA32_TSC_AUX MSR (0xc0000103).
anatofuz
parents:
diff changeset
239 ///
anatofuz
parents:
diff changeset
240 /// \headerfile <immintrin.h>
anatofuz
parents:
diff changeset
241 ///
anatofuz
parents:
diff changeset
242 /// This intrinsic corresponds to the <c> RDPID </c> instruction.
anatofuz
parents:
diff changeset
243 static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("rdpid")))
anatofuz
parents:
diff changeset
244 _rdpid_u32(void) {
anatofuz
parents:
diff changeset
245 return __builtin_ia32_rdpid();
anatofuz
parents:
diff changeset
246 }
anatofuz
parents:
diff changeset
247 #endif // __RDPID__
anatofuz
parents:
diff changeset
248
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
249 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
250 defined(__RDRND__)
150
anatofuz
parents:
diff changeset
251 static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
anatofuz
parents:
diff changeset
252 _rdrand16_step(unsigned short *__p)
anatofuz
parents:
diff changeset
253 {
anatofuz
parents:
diff changeset
254 return __builtin_ia32_rdrand16_step(__p);
anatofuz
parents:
diff changeset
255 }
anatofuz
parents:
diff changeset
256
anatofuz
parents:
diff changeset
257 static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
anatofuz
parents:
diff changeset
258 _rdrand32_step(unsigned int *__p)
anatofuz
parents:
diff changeset
259 {
anatofuz
parents:
diff changeset
260 return __builtin_ia32_rdrand32_step(__p);
anatofuz
parents:
diff changeset
261 }
anatofuz
parents:
diff changeset
262
anatofuz
parents:
diff changeset
263 #ifdef __x86_64__
anatofuz
parents:
diff changeset
264 static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
anatofuz
parents:
diff changeset
265 _rdrand64_step(unsigned long long *__p)
anatofuz
parents:
diff changeset
266 {
anatofuz
parents:
diff changeset
267 return __builtin_ia32_rdrand64_step(__p);
anatofuz
parents:
diff changeset
268 }
anatofuz
parents:
diff changeset
269 #endif
anatofuz
parents:
diff changeset
270 #endif /* __RDRND__ */
anatofuz
parents:
diff changeset
271
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
272 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
273 defined(__FSGSBASE__)
150
anatofuz
parents:
diff changeset
274 #ifdef __x86_64__
anatofuz
parents:
diff changeset
275 static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
276 _readfsbase_u32(void)
anatofuz
parents:
diff changeset
277 {
anatofuz
parents:
diff changeset
278 return __builtin_ia32_rdfsbase32();
anatofuz
parents:
diff changeset
279 }
anatofuz
parents:
diff changeset
280
anatofuz
parents:
diff changeset
281 static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
282 _readfsbase_u64(void)
anatofuz
parents:
diff changeset
283 {
anatofuz
parents:
diff changeset
284 return __builtin_ia32_rdfsbase64();
anatofuz
parents:
diff changeset
285 }
anatofuz
parents:
diff changeset
286
anatofuz
parents:
diff changeset
287 static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
288 _readgsbase_u32(void)
anatofuz
parents:
diff changeset
289 {
anatofuz
parents:
diff changeset
290 return __builtin_ia32_rdgsbase32();
anatofuz
parents:
diff changeset
291 }
anatofuz
parents:
diff changeset
292
anatofuz
parents:
diff changeset
293 static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
294 _readgsbase_u64(void)
anatofuz
parents:
diff changeset
295 {
anatofuz
parents:
diff changeset
296 return __builtin_ia32_rdgsbase64();
anatofuz
parents:
diff changeset
297 }
anatofuz
parents:
diff changeset
298
anatofuz
parents:
diff changeset
299 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
300 _writefsbase_u32(unsigned int __V)
anatofuz
parents:
diff changeset
301 {
anatofuz
parents:
diff changeset
302 __builtin_ia32_wrfsbase32(__V);
anatofuz
parents:
diff changeset
303 }
anatofuz
parents:
diff changeset
304
anatofuz
parents:
diff changeset
305 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
306 _writefsbase_u64(unsigned long long __V)
anatofuz
parents:
diff changeset
307 {
anatofuz
parents:
diff changeset
308 __builtin_ia32_wrfsbase64(__V);
anatofuz
parents:
diff changeset
309 }
anatofuz
parents:
diff changeset
310
anatofuz
parents:
diff changeset
311 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
312 _writegsbase_u32(unsigned int __V)
anatofuz
parents:
diff changeset
313 {
anatofuz
parents:
diff changeset
314 __builtin_ia32_wrgsbase32(__V);
anatofuz
parents:
diff changeset
315 }
anatofuz
parents:
diff changeset
316
anatofuz
parents:
diff changeset
317 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
anatofuz
parents:
diff changeset
318 _writegsbase_u64(unsigned long long __V)
anatofuz
parents:
diff changeset
319 {
anatofuz
parents:
diff changeset
320 __builtin_ia32_wrgsbase64(__V);
anatofuz
parents:
diff changeset
321 }
anatofuz
parents:
diff changeset
322
anatofuz
parents:
diff changeset
323 #endif
anatofuz
parents:
diff changeset
324 #endif /* __FSGSBASE__ */
anatofuz
parents:
diff changeset
325
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
326 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
327 defined(__MOVBE__)
150
anatofuz
parents:
diff changeset
328
anatofuz
parents:
diff changeset
329 /* The structs used below are to force the load/store to be unaligned. This
anatofuz
parents:
diff changeset
330 * is accomplished with the __packed__ attribute. The __may_alias__ prevents
anatofuz
parents:
diff changeset
331 * tbaa metadata from being generated based on the struct and the type of the
anatofuz
parents:
diff changeset
332 * field inside of it.
anatofuz
parents:
diff changeset
333 */
anatofuz
parents:
diff changeset
334
anatofuz
parents:
diff changeset
335 static __inline__ short __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
anatofuz
parents:
diff changeset
336 _loadbe_i16(void const * __P) {
anatofuz
parents:
diff changeset
337 struct __loadu_i16 {
anatofuz
parents:
diff changeset
338 short __v;
anatofuz
parents:
diff changeset
339 } __attribute__((__packed__, __may_alias__));
anatofuz
parents:
diff changeset
340 return __builtin_bswap16(((const struct __loadu_i16*)__P)->__v);
anatofuz
parents:
diff changeset
341 }
anatofuz
parents:
diff changeset
342
anatofuz
parents:
diff changeset
343 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
anatofuz
parents:
diff changeset
344 _storebe_i16(void * __P, short __D) {
anatofuz
parents:
diff changeset
345 struct __storeu_i16 {
anatofuz
parents:
diff changeset
346 short __v;
anatofuz
parents:
diff changeset
347 } __attribute__((__packed__, __may_alias__));
anatofuz
parents:
diff changeset
348 ((struct __storeu_i16*)__P)->__v = __builtin_bswap16(__D);
anatofuz
parents:
diff changeset
349 }
anatofuz
parents:
diff changeset
350
anatofuz
parents:
diff changeset
351 static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
anatofuz
parents:
diff changeset
352 _loadbe_i32(void const * __P) {
anatofuz
parents:
diff changeset
353 struct __loadu_i32 {
anatofuz
parents:
diff changeset
354 int __v;
anatofuz
parents:
diff changeset
355 } __attribute__((__packed__, __may_alias__));
anatofuz
parents:
diff changeset
356 return __builtin_bswap32(((const struct __loadu_i32*)__P)->__v);
anatofuz
parents:
diff changeset
357 }
anatofuz
parents:
diff changeset
358
anatofuz
parents:
diff changeset
359 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
anatofuz
parents:
diff changeset
360 _storebe_i32(void * __P, int __D) {
anatofuz
parents:
diff changeset
361 struct __storeu_i32 {
anatofuz
parents:
diff changeset
362 int __v;
anatofuz
parents:
diff changeset
363 } __attribute__((__packed__, __may_alias__));
anatofuz
parents:
diff changeset
364 ((struct __storeu_i32*)__P)->__v = __builtin_bswap32(__D);
anatofuz
parents:
diff changeset
365 }
anatofuz
parents:
diff changeset
366
anatofuz
parents:
diff changeset
367 #ifdef __x86_64__
anatofuz
parents:
diff changeset
368 static __inline__ long long __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
anatofuz
parents:
diff changeset
369 _loadbe_i64(void const * __P) {
anatofuz
parents:
diff changeset
370 struct __loadu_i64 {
anatofuz
parents:
diff changeset
371 long long __v;
anatofuz
parents:
diff changeset
372 } __attribute__((__packed__, __may_alias__));
anatofuz
parents:
diff changeset
373 return __builtin_bswap64(((const struct __loadu_i64*)__P)->__v);
anatofuz
parents:
diff changeset
374 }
anatofuz
parents:
diff changeset
375
anatofuz
parents:
diff changeset
376 static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
anatofuz
parents:
diff changeset
377 _storebe_i64(void * __P, long long __D) {
anatofuz
parents:
diff changeset
378 struct __storeu_i64 {
anatofuz
parents:
diff changeset
379 long long __v;
anatofuz
parents:
diff changeset
380 } __attribute__((__packed__, __may_alias__));
anatofuz
parents:
diff changeset
381 ((struct __storeu_i64*)__P)->__v = __builtin_bswap64(__D);
anatofuz
parents:
diff changeset
382 }
anatofuz
parents:
diff changeset
383 #endif
anatofuz
parents:
diff changeset
384 #endif /* __MOVBE */
anatofuz
parents:
diff changeset
385
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
386 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
387 defined(__RTM__)
150
anatofuz
parents:
diff changeset
388 #include <rtmintrin.h>
anatofuz
parents:
diff changeset
389 #include <xtestintrin.h>
anatofuz
parents:
diff changeset
390 #endif
anatofuz
parents:
diff changeset
391
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
392 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
393 defined(__SHA__)
150
anatofuz
parents:
diff changeset
394 #include <shaintrin.h>
anatofuz
parents:
diff changeset
395 #endif
anatofuz
parents:
diff changeset
396
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
397 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
398 defined(__FXSR__)
150
anatofuz
parents:
diff changeset
399 #include <fxsrintrin.h>
anatofuz
parents:
diff changeset
400 #endif
anatofuz
parents:
diff changeset
401
anatofuz
parents:
diff changeset
402 /* No feature check desired due to internal MSC_VER checks */
anatofuz
parents:
diff changeset
403 #include <xsaveintrin.h>
anatofuz
parents:
diff changeset
404
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
405 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
406 defined(__XSAVEOPT__)
150
anatofuz
parents:
diff changeset
407 #include <xsaveoptintrin.h>
anatofuz
parents:
diff changeset
408 #endif
anatofuz
parents:
diff changeset
409
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
410 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
411 defined(__XSAVEC__)
150
anatofuz
parents:
diff changeset
412 #include <xsavecintrin.h>
anatofuz
parents:
diff changeset
413 #endif
anatofuz
parents:
diff changeset
414
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
415 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
416 defined(__XSAVES__)
150
anatofuz
parents:
diff changeset
417 #include <xsavesintrin.h>
anatofuz
parents:
diff changeset
418 #endif
anatofuz
parents:
diff changeset
419
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
420 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
421 defined(__SHSTK__)
150
anatofuz
parents:
diff changeset
422 #include <cetintrin.h>
anatofuz
parents:
diff changeset
423 #endif
anatofuz
parents:
diff changeset
424
anatofuz
parents:
diff changeset
425 /* Some intrinsics inside adxintrin.h are available only on processors with ADX,
anatofuz
parents:
diff changeset
426 * whereas others are also available at all times. */
anatofuz
parents:
diff changeset
427 #include <adxintrin.h>
anatofuz
parents:
diff changeset
428
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
429 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
430 defined(__RDSEED__)
150
anatofuz
parents:
diff changeset
431 #include <rdseedintrin.h>
anatofuz
parents:
diff changeset
432 #endif
anatofuz
parents:
diff changeset
433
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
434 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
435 defined(__WBNOINVD__)
150
anatofuz
parents:
diff changeset
436 #include <wbnoinvdintrin.h>
anatofuz
parents:
diff changeset
437 #endif
anatofuz
parents:
diff changeset
438
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
439 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
440 defined(__CLDEMOTE__)
150
anatofuz
parents:
diff changeset
441 #include <cldemoteintrin.h>
anatofuz
parents:
diff changeset
442 #endif
anatofuz
parents:
diff changeset
443
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
444 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
445 defined(__WAITPKG__)
150
anatofuz
parents:
diff changeset
446 #include <waitpkgintrin.h>
anatofuz
parents:
diff changeset
447 #endif
anatofuz
parents:
diff changeset
448
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
449 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
450 defined(__MOVDIRI__) || defined(__MOVDIR64B__)
150
anatofuz
parents:
diff changeset
451 #include <movdirintrin.h>
anatofuz
parents:
diff changeset
452 #endif
anatofuz
parents:
diff changeset
453
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
454 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
455 defined(__PCONFIG__)
150
anatofuz
parents:
diff changeset
456 #include <pconfigintrin.h>
anatofuz
parents:
diff changeset
457 #endif
anatofuz
parents:
diff changeset
458
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
459 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
460 defined(__SGX__)
150
anatofuz
parents:
diff changeset
461 #include <sgxintrin.h>
anatofuz
parents:
diff changeset
462 #endif
anatofuz
parents:
diff changeset
463
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
464 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
465 defined(__PTWRITE__)
150
anatofuz
parents:
diff changeset
466 #include <ptwriteintrin.h>
anatofuz
parents:
diff changeset
467 #endif
anatofuz
parents:
diff changeset
468
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
469 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
470 defined(__INVPCID__)
150
anatofuz
parents:
diff changeset
471 #include <invpcidintrin.h>
anatofuz
parents:
diff changeset
472 #endif
anatofuz
parents:
diff changeset
473
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
474 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
475 defined(__AVX512VP2INTERSECT__)
150
anatofuz
parents:
diff changeset
476 #include <avx512vp2intersectintrin.h>
anatofuz
parents:
diff changeset
477 #endif
anatofuz
parents:
diff changeset
478
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
479 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
480 (defined(__AVX512VL__) && defined(__AVX512VP2INTERSECT__))
150
anatofuz
parents:
diff changeset
481 #include <avx512vlvp2intersectintrin.h>
anatofuz
parents:
diff changeset
482 #endif
anatofuz
parents:
diff changeset
483
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
484 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
485 defined(__ENQCMD__)
150
anatofuz
parents:
diff changeset
486 #include <enqcmdintrin.h>
anatofuz
parents:
diff changeset
487 #endif
anatofuz
parents:
diff changeset
488
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
489 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
490 defined(__SERIALIZE__)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
491 #include <serializeintrin.h>
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
492 #endif
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
493
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
494 #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
495 defined(__TSXLDTRK__)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
496 #include <tsxldtrkintrin.h>
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
497 #endif
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
498
150
anatofuz
parents:
diff changeset
499 #if defined(_MSC_VER) && __has_extension(gnu_asm)
anatofuz
parents:
diff changeset
500 /* Define the default attributes for these intrinsics */
anatofuz
parents:
diff changeset
501 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
anatofuz
parents:
diff changeset
502 #ifdef __cplusplus
anatofuz
parents:
diff changeset
503 extern "C" {
anatofuz
parents:
diff changeset
504 #endif
anatofuz
parents:
diff changeset
505 /*----------------------------------------------------------------------------*\
anatofuz
parents:
diff changeset
506 |* Interlocked Exchange HLE
anatofuz
parents:
diff changeset
507 \*----------------------------------------------------------------------------*/
anatofuz
parents:
diff changeset
508 #if defined(__i386__) || defined(__x86_64__)
anatofuz
parents:
diff changeset
509 static __inline__ long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
510 _InterlockedExchange_HLEAcquire(long volatile *_Target, long _Value) {
anatofuz
parents:
diff changeset
511 __asm__ __volatile__(".byte 0xf2 ; lock ; xchg %0, %1"
anatofuz
parents:
diff changeset
512 : "+r" (_Value), "+m" (*_Target) :: "memory");
anatofuz
parents:
diff changeset
513 return _Value;
anatofuz
parents:
diff changeset
514 }
anatofuz
parents:
diff changeset
515 static __inline__ long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
516 _InterlockedExchange_HLERelease(long volatile *_Target, long _Value) {
anatofuz
parents:
diff changeset
517 __asm__ __volatile__(".byte 0xf3 ; lock ; xchg %0, %1"
anatofuz
parents:
diff changeset
518 : "+r" (_Value), "+m" (*_Target) :: "memory");
anatofuz
parents:
diff changeset
519 return _Value;
anatofuz
parents:
diff changeset
520 }
anatofuz
parents:
diff changeset
521 #endif
anatofuz
parents:
diff changeset
522 #if defined(__x86_64__)
anatofuz
parents:
diff changeset
523 static __inline__ __int64 __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
524 _InterlockedExchange64_HLEAcquire(__int64 volatile *_Target, __int64 _Value) {
anatofuz
parents:
diff changeset
525 __asm__ __volatile__(".byte 0xf2 ; lock ; xchg %0, %1"
anatofuz
parents:
diff changeset
526 : "+r" (_Value), "+m" (*_Target) :: "memory");
anatofuz
parents:
diff changeset
527 return _Value;
anatofuz
parents:
diff changeset
528 }
anatofuz
parents:
diff changeset
529 static __inline__ __int64 __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
530 _InterlockedExchange64_HLERelease(__int64 volatile *_Target, __int64 _Value) {
anatofuz
parents:
diff changeset
531 __asm__ __volatile__(".byte 0xf3 ; lock ; xchg %0, %1"
anatofuz
parents:
diff changeset
532 : "+r" (_Value), "+m" (*_Target) :: "memory");
anatofuz
parents:
diff changeset
533 return _Value;
anatofuz
parents:
diff changeset
534 }
anatofuz
parents:
diff changeset
535 #endif
anatofuz
parents:
diff changeset
536 /*----------------------------------------------------------------------------*\
anatofuz
parents:
diff changeset
537 |* Interlocked Compare Exchange HLE
anatofuz
parents:
diff changeset
538 \*----------------------------------------------------------------------------*/
anatofuz
parents:
diff changeset
539 #if defined(__i386__) || defined(__x86_64__)
anatofuz
parents:
diff changeset
540 static __inline__ long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
541 _InterlockedCompareExchange_HLEAcquire(long volatile *_Destination,
anatofuz
parents:
diff changeset
542 long _Exchange, long _Comparand) {
anatofuz
parents:
diff changeset
543 __asm__ __volatile__(".byte 0xf2 ; lock ; cmpxchg %2, %1"
anatofuz
parents:
diff changeset
544 : "+a" (_Comparand), "+m" (*_Destination)
anatofuz
parents:
diff changeset
545 : "r" (_Exchange) : "memory");
anatofuz
parents:
diff changeset
546 return _Comparand;
anatofuz
parents:
diff changeset
547 }
anatofuz
parents:
diff changeset
548 static __inline__ long __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
549 _InterlockedCompareExchange_HLERelease(long volatile *_Destination,
anatofuz
parents:
diff changeset
550 long _Exchange, long _Comparand) {
anatofuz
parents:
diff changeset
551 __asm__ __volatile__(".byte 0xf3 ; lock ; cmpxchg %2, %1"
anatofuz
parents:
diff changeset
552 : "+a" (_Comparand), "+m" (*_Destination)
anatofuz
parents:
diff changeset
553 : "r" (_Exchange) : "memory");
anatofuz
parents:
diff changeset
554 return _Comparand;
anatofuz
parents:
diff changeset
555 }
anatofuz
parents:
diff changeset
556 #endif
anatofuz
parents:
diff changeset
557 #if defined(__x86_64__)
anatofuz
parents:
diff changeset
558 static __inline__ __int64 __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
559 _InterlockedCompareExchange64_HLEAcquire(__int64 volatile *_Destination,
anatofuz
parents:
diff changeset
560 __int64 _Exchange, __int64 _Comparand) {
anatofuz
parents:
diff changeset
561 __asm__ __volatile__(".byte 0xf2 ; lock ; cmpxchg %2, %1"
anatofuz
parents:
diff changeset
562 : "+a" (_Comparand), "+m" (*_Destination)
anatofuz
parents:
diff changeset
563 : "r" (_Exchange) : "memory");
anatofuz
parents:
diff changeset
564 return _Comparand;
anatofuz
parents:
diff changeset
565 }
anatofuz
parents:
diff changeset
566 static __inline__ __int64 __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
567 _InterlockedCompareExchange64_HLERelease(__int64 volatile *_Destination,
anatofuz
parents:
diff changeset
568 __int64 _Exchange, __int64 _Comparand) {
anatofuz
parents:
diff changeset
569 __asm__ __volatile__(".byte 0xf3 ; lock ; cmpxchg %2, %1"
anatofuz
parents:
diff changeset
570 : "+a" (_Comparand), "+m" (*_Destination)
anatofuz
parents:
diff changeset
571 : "r" (_Exchange) : "memory");
anatofuz
parents:
diff changeset
572 return _Comparand;
anatofuz
parents:
diff changeset
573 }
anatofuz
parents:
diff changeset
574 #endif
anatofuz
parents:
diff changeset
575 #ifdef __cplusplus
anatofuz
parents:
diff changeset
576 }
anatofuz
parents:
diff changeset
577 #endif
anatofuz
parents:
diff changeset
578
anatofuz
parents:
diff changeset
579 #undef __DEFAULT_FN_ATTRS
anatofuz
parents:
diff changeset
580
anatofuz
parents:
diff changeset
581 #endif /* defined(_MSC_VER) && __has_extension(gnu_asm) */
anatofuz
parents:
diff changeset
582
anatofuz
parents:
diff changeset
583 #endif /* __IMMINTRIN_H */