]> git.proxmox.com Git - mirror_zfs.git/blob - config/toolchain-simd.m4
OpenZFS 9185 - Enable testing over NFS in ZFS performance tests
[mirror_zfs.git] / config / toolchain-simd.m4
1 dnl #
2 dnl # Checks if host toolchain supports SIMD instructions
3 dnl #
4 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [
5 case "$host_cpu" in
6 x86_64 | x86 | i686)
7 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
8 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
9 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
10 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
11 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
12 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
13 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
14 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
15 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
16 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
17 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
18 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
19 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
20 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
21 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
22 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
23 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
24 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
25 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
26 ;;
27 esac
28 ])
29
30 dnl #
31 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
32 dnl #
33 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE], [
34 AC_MSG_CHECKING([whether host toolchain supports SSE])
35
36 AC_LINK_IFELSE([AC_LANG_SOURCE([[
37 void main()
38 {
39 __asm__ __volatile__("xorps %xmm0, %xmm1");
40 }
41 ]])], [
42 AC_DEFINE([HAVE_SSE], 1, [Define if host toolchain supports SSE])
43 AC_MSG_RESULT([yes])
44 ], [
45 AC_MSG_RESULT([no])
46 ])
47 ])
48
49 dnl #
50 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
51 dnl #
52 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2], [
53 AC_MSG_CHECKING([whether host toolchain supports SSE2])
54
55 AC_LINK_IFELSE([AC_LANG_SOURCE([[
56 void main()
57 {
58 __asm__ __volatile__("pxor %xmm0, %xmm1");
59 }
60 ]])], [
61 AC_DEFINE([HAVE_SSE2], 1, [Define if host toolchain supports SSE2])
62 AC_MSG_RESULT([yes])
63 ], [
64 AC_MSG_RESULT([no])
65 ])
66 ])
67
68 dnl #
69 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
70 dnl #
71 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3], [
72 AC_MSG_CHECKING([whether host toolchain supports SSE3])
73
74 AC_LINK_IFELSE([AC_LANG_SOURCE([[
75 void main()
76 {
77 char v[16];
78 __asm__ __volatile__("lddqu %0,%%xmm0" :: "m"(v[0]));
79 }
80 ]])], [
81 AC_DEFINE([HAVE_SSE3], 1, [Define if host toolchain supports SSE3])
82 AC_MSG_RESULT([yes])
83 ], [
84 AC_MSG_RESULT([no])
85 ])
86 ])
87
88 dnl #
89 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
90 dnl #
91 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3], [
92 AC_MSG_CHECKING([whether host toolchain supports SSSE3])
93
94 AC_LINK_IFELSE([AC_LANG_SOURCE([[
95 void main()
96 {
97 __asm__ __volatile__("pshufb %xmm0,%xmm1");
98 }
99 ]])], [
100 AC_DEFINE([HAVE_SSSE3], 1, [Define if host toolchain supports SSSE3])
101 AC_MSG_RESULT([yes])
102 ], [
103 AC_MSG_RESULT([no])
104 ])
105 ])
106
107 dnl #
108 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
109 dnl #
110 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1], [
111 AC_MSG_CHECKING([whether host toolchain supports SSE4.1])
112
113 AC_LINK_IFELSE([AC_LANG_SOURCE([[
114 void main()
115 {
116 __asm__ __volatile__("pmaxsb %xmm0,%xmm1");
117 }
118 ]])], [
119 AC_DEFINE([HAVE_SSE4_1], 1, [Define if host toolchain supports SSE4.1])
120 AC_MSG_RESULT([yes])
121 ], [
122 AC_MSG_RESULT([no])
123 ])
124 ])
125
126 dnl #
127 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
128 dnl #
129 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2], [
130 AC_MSG_CHECKING([whether host toolchain supports SSE4.2])
131
132 AC_LINK_IFELSE([AC_LANG_SOURCE([[
133 void main()
134 {
135 __asm__ __volatile__("pcmpgtq %xmm0, %xmm1");
136 }
137 ]])], [
138 AC_DEFINE([HAVE_SSE4_2], 1, [Define if host toolchain supports SSE4.2])
139 AC_MSG_RESULT([yes])
140 ], [
141 AC_MSG_RESULT([no])
142 ])
143 ])
144
145 dnl #
146 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
147 dnl #
148 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX], [
149 AC_MSG_CHECKING([whether host toolchain supports AVX])
150
151 AC_LINK_IFELSE([AC_LANG_SOURCE([[
152 void main()
153 {
154 char v[32];
155 __asm__ __volatile__("vmovdqa %0,%%ymm0" :: "m"(v[0]));
156 }
157 ]])], [
158 AC_MSG_RESULT([yes])
159 AC_DEFINE([HAVE_AVX], 1, [Define if host toolchain supports AVX])
160 ], [
161 AC_MSG_RESULT([no])
162 ])
163 ])
164
165 dnl #
166 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
167 dnl #
168 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2], [
169 AC_MSG_CHECKING([whether host toolchain supports AVX2])
170
171 AC_LINK_IFELSE([AC_LANG_SOURCE([
172 [
173 void main()
174 {
175 __asm__ __volatile__("vpshufb %ymm0,%ymm1,%ymm2");
176 }
177 ]])], [
178 AC_MSG_RESULT([yes])
179 AC_DEFINE([HAVE_AVX2], 1, [Define if host toolchain supports AVX2])
180 ], [
181 AC_MSG_RESULT([no])
182 ])
183 ])
184
185 dnl #
186 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
187 dnl #
188 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F], [
189 AC_MSG_CHECKING([whether host toolchain supports AVX512F])
190
191 AC_LINK_IFELSE([AC_LANG_SOURCE([
192 [
193 void main()
194 {
195 __asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2");
196 }
197 ]])], [
198 AC_MSG_RESULT([yes])
199 AC_DEFINE([HAVE_AVX512F], 1, [Define if host toolchain supports AVX512F])
200 ], [
201 AC_MSG_RESULT([no])
202 ])
203 ])
204
205 dnl #
206 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
207 dnl #
208 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD], [
209 AC_MSG_CHECKING([whether host toolchain supports AVX512CD])
210
211 AC_LINK_IFELSE([AC_LANG_SOURCE([
212 [
213 void main()
214 {
215 __asm__ __volatile__("vplzcntd %zmm0,%zmm1");
216 }
217 ]])], [
218 AC_MSG_RESULT([yes])
219 AC_DEFINE([HAVE_AVX512CD], 1, [Define if host toolchain supports AVX512CD])
220 ], [
221 AC_MSG_RESULT([no])
222 ])
223 ])
224
225 dnl #
226 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
227 dnl #
228 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ], [
229 AC_MSG_CHECKING([whether host toolchain supports AVX512DQ])
230
231 AC_LINK_IFELSE([AC_LANG_SOURCE([
232 [
233 void main()
234 {
235 __asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2");
236 }
237 ]])], [
238 AC_MSG_RESULT([yes])
239 AC_DEFINE([HAVE_AVX512DQ], 1, [Define if host toolchain supports AVX512DQ])
240 ], [
241 AC_MSG_RESULT([no])
242 ])
243 ])
244
245 dnl #
246 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
247 dnl #
248 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW], [
249 AC_MSG_CHECKING([whether host toolchain supports AVX512BW])
250
251 AC_LINK_IFELSE([AC_LANG_SOURCE([
252 [
253 void main()
254 {
255 __asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2");
256 }
257 ]])], [
258 AC_MSG_RESULT([yes])
259 AC_DEFINE([HAVE_AVX512BW], 1, [Define if host toolchain supports AVX512BW])
260 ], [
261 AC_MSG_RESULT([no])
262 ])
263 ])
264
265 dnl #
266 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
267 dnl #
268 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA], [
269 AC_MSG_CHECKING([whether host toolchain supports AVX512IFMA])
270
271 AC_LINK_IFELSE([AC_LANG_SOURCE([
272 [
273 void main()
274 {
275 __asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2");
276 }
277 ]])], [
278 AC_MSG_RESULT([yes])
279 AC_DEFINE([HAVE_AVX512IFMA], 1, [Define if host toolchain supports AVX512IFMA])
280 ], [
281 AC_MSG_RESULT([no])
282 ])
283 ])
284
285 dnl #
286 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
287 dnl #
288 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI], [
289 AC_MSG_CHECKING([whether host toolchain supports AVX512VBMI])
290
291 AC_LINK_IFELSE([AC_LANG_SOURCE([
292 [
293 void main()
294 {
295 __asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2");
296 }
297 ]])], [
298 AC_MSG_RESULT([yes])
299 AC_DEFINE([HAVE_AVX512VBMI], 1, [Define if host toolchain supports AVX512VBMI])
300 ], [
301 AC_MSG_RESULT([no])
302 ])
303 ])
304
305 dnl #
306 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
307 dnl #
308 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF], [
309 AC_MSG_CHECKING([whether host toolchain supports AVX512PF])
310
311 AC_LINK_IFELSE([AC_LANG_SOURCE([
312 [
313 void main()
314 {
315 __asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}");
316 }
317 ]])], [
318 AC_MSG_RESULT([yes])
319 AC_DEFINE([HAVE_AVX512PF], 1, [Define if host toolchain supports AVX512PF])
320 ], [
321 AC_MSG_RESULT([no])
322 ])
323 ])
324
325 dnl #
326 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
327 dnl #
328 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER], [
329 AC_MSG_CHECKING([whether host toolchain supports AVX512ER])
330
331 AC_LINK_IFELSE([AC_LANG_SOURCE([
332 [
333 void main()
334 {
335 __asm__ __volatile__("vexp2pd %zmm0,%zmm1");
336 }
337 ]])], [
338 AC_MSG_RESULT([yes])
339 AC_DEFINE([HAVE_AVX512ER], 1, [Define if host toolchain supports AVX512ER])
340 ], [
341 AC_MSG_RESULT([no])
342 ])
343 ])
344
345 dnl #
346 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
347 dnl #
348 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL], [
349 AC_MSG_CHECKING([whether host toolchain supports AVX512VL])
350
351 AC_LINK_IFELSE([AC_LANG_SOURCE([
352 [
353 void main()
354 {
355 __asm__ __volatile__("vpabsq %zmm0,%zmm1");
356 }
357 ]])], [
358 AC_MSG_RESULT([yes])
359 AC_DEFINE([HAVE_AVX512VL], 1, [Define if host toolchain supports AVX512VL])
360 ], [
361 AC_MSG_RESULT([no])
362 ])
363 ])
364
365 dnl #
366 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
367 dnl #
368 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES], [
369 AC_MSG_CHECKING([whether host toolchain supports AES])
370
371 AC_LINK_IFELSE([AC_LANG_SOURCE([
372 [
373 void main()
374 {
375 __asm__ __volatile__("aesenc %xmm0, %xmm1");
376 }
377 ]])], [
378 AC_MSG_RESULT([yes])
379 AC_DEFINE([HAVE_AES], 1, [Define if host toolchain supports AES])
380 ], [
381 AC_MSG_RESULT([no])
382 ])
383 ])
384
385 dnl #
386 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
387 dnl #
388 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ], [
389 AC_MSG_CHECKING([whether host toolchain supports PCLMULQDQ])
390
391 AC_LINK_IFELSE([AC_LANG_SOURCE([
392 [
393 void main()
394 {
395 __asm__ __volatile__("pclmulqdq %0, %%xmm0, %%xmm1" :: "i"(0));
396 }
397 ]])], [
398 AC_MSG_RESULT([yes])
399 AC_DEFINE([HAVE_PCLMULQDQ], 1, [Define if host toolchain supports PCLMULQDQ])
400 ], [
401 AC_MSG_RESULT([no])
402 ])
403 ])