]> git.proxmox.com Git - mirror_zfs.git/blob - config/toolchain-simd.m4
Revert "Reduce dbuf_find() lock contention"
[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 amd64 | 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 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE
27 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVE
28 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVEOPT
29 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVES
30 ;;
31 esac
32 ])
33
34 dnl #
35 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
36 dnl #
37 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE], [
38 AC_MSG_CHECKING([whether host toolchain supports SSE])
39
40 AC_LINK_IFELSE([AC_LANG_SOURCE([[
41 void main()
42 {
43 __asm__ __volatile__("xorps %xmm0, %xmm1");
44 }
45 ]])], [
46 AC_DEFINE([HAVE_SSE], 1, [Define if host toolchain supports SSE])
47 AC_MSG_RESULT([yes])
48 ], [
49 AC_MSG_RESULT([no])
50 ])
51 ])
52
53 dnl #
54 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
55 dnl #
56 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2], [
57 AC_MSG_CHECKING([whether host toolchain supports SSE2])
58
59 AC_LINK_IFELSE([AC_LANG_SOURCE([[
60 void main()
61 {
62 __asm__ __volatile__("pxor %xmm0, %xmm1");
63 }
64 ]])], [
65 AC_DEFINE([HAVE_SSE2], 1, [Define if host toolchain supports SSE2])
66 AC_MSG_RESULT([yes])
67 ], [
68 AC_MSG_RESULT([no])
69 ])
70 ])
71
72 dnl #
73 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
74 dnl #
75 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3], [
76 AC_MSG_CHECKING([whether host toolchain supports SSE3])
77
78 AC_LINK_IFELSE([AC_LANG_SOURCE([[
79 void main()
80 {
81 char v[16];
82 __asm__ __volatile__("lddqu %0,%%xmm0" :: "m"(v[0]));
83 }
84 ]])], [
85 AC_DEFINE([HAVE_SSE3], 1, [Define if host toolchain supports SSE3])
86 AC_MSG_RESULT([yes])
87 ], [
88 AC_MSG_RESULT([no])
89 ])
90 ])
91
92 dnl #
93 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
94 dnl #
95 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3], [
96 AC_MSG_CHECKING([whether host toolchain supports SSSE3])
97
98 AC_LINK_IFELSE([AC_LANG_SOURCE([[
99 void main()
100 {
101 __asm__ __volatile__("pshufb %xmm0,%xmm1");
102 }
103 ]])], [
104 AC_DEFINE([HAVE_SSSE3], 1, [Define if host toolchain supports SSSE3])
105 AC_MSG_RESULT([yes])
106 ], [
107 AC_MSG_RESULT([no])
108 ])
109 ])
110
111 dnl #
112 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
113 dnl #
114 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1], [
115 AC_MSG_CHECKING([whether host toolchain supports SSE4.1])
116
117 AC_LINK_IFELSE([AC_LANG_SOURCE([[
118 void main()
119 {
120 __asm__ __volatile__("pmaxsb %xmm0,%xmm1");
121 }
122 ]])], [
123 AC_DEFINE([HAVE_SSE4_1], 1, [Define if host toolchain supports SSE4.1])
124 AC_MSG_RESULT([yes])
125 ], [
126 AC_MSG_RESULT([no])
127 ])
128 ])
129
130 dnl #
131 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
132 dnl #
133 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2], [
134 AC_MSG_CHECKING([whether host toolchain supports SSE4.2])
135
136 AC_LINK_IFELSE([AC_LANG_SOURCE([[
137 void main()
138 {
139 __asm__ __volatile__("pcmpgtq %xmm0, %xmm1");
140 }
141 ]])], [
142 AC_DEFINE([HAVE_SSE4_2], 1, [Define if host toolchain supports SSE4.2])
143 AC_MSG_RESULT([yes])
144 ], [
145 AC_MSG_RESULT([no])
146 ])
147 ])
148
149 dnl #
150 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
151 dnl #
152 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX], [
153 AC_MSG_CHECKING([whether host toolchain supports AVX])
154
155 AC_LINK_IFELSE([AC_LANG_SOURCE([[
156 void main()
157 {
158 char v[32];
159 __asm__ __volatile__("vmovdqa %0,%%ymm0" :: "m"(v[0]));
160 }
161 ]])], [
162 AC_MSG_RESULT([yes])
163 AC_DEFINE([HAVE_AVX], 1, [Define if host toolchain supports AVX])
164 ], [
165 AC_MSG_RESULT([no])
166 ])
167 ])
168
169 dnl #
170 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
171 dnl #
172 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2], [
173 AC_MSG_CHECKING([whether host toolchain supports AVX2])
174
175 AC_LINK_IFELSE([AC_LANG_SOURCE([
176 [
177 void main()
178 {
179 __asm__ __volatile__("vpshufb %ymm0,%ymm1,%ymm2");
180 }
181 ]])], [
182 AC_MSG_RESULT([yes])
183 AC_DEFINE([HAVE_AVX2], 1, [Define if host toolchain supports AVX2])
184 ], [
185 AC_MSG_RESULT([no])
186 ])
187 ])
188
189 dnl #
190 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
191 dnl #
192 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F], [
193 AC_MSG_CHECKING([whether host toolchain supports AVX512F])
194
195 AC_LINK_IFELSE([AC_LANG_SOURCE([
196 [
197 void main()
198 {
199 __asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2");
200 }
201 ]])], [
202 AC_MSG_RESULT([yes])
203 AC_DEFINE([HAVE_AVX512F], 1, [Define if host toolchain supports AVX512F])
204 ], [
205 AC_MSG_RESULT([no])
206 ])
207 ])
208
209 dnl #
210 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
211 dnl #
212 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD], [
213 AC_MSG_CHECKING([whether host toolchain supports AVX512CD])
214
215 AC_LINK_IFELSE([AC_LANG_SOURCE([
216 [
217 void main()
218 {
219 __asm__ __volatile__("vplzcntd %zmm0,%zmm1");
220 }
221 ]])], [
222 AC_MSG_RESULT([yes])
223 AC_DEFINE([HAVE_AVX512CD], 1, [Define if host toolchain supports AVX512CD])
224 ], [
225 AC_MSG_RESULT([no])
226 ])
227 ])
228
229 dnl #
230 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
231 dnl #
232 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ], [
233 AC_MSG_CHECKING([whether host toolchain supports AVX512DQ])
234
235 AC_LINK_IFELSE([AC_LANG_SOURCE([
236 [
237 void main()
238 {
239 __asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2");
240 }
241 ]])], [
242 AC_MSG_RESULT([yes])
243 AC_DEFINE([HAVE_AVX512DQ], 1, [Define if host toolchain supports AVX512DQ])
244 ], [
245 AC_MSG_RESULT([no])
246 ])
247 ])
248
249 dnl #
250 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
251 dnl #
252 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW], [
253 AC_MSG_CHECKING([whether host toolchain supports AVX512BW])
254
255 AC_LINK_IFELSE([AC_LANG_SOURCE([
256 [
257 void main()
258 {
259 __asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2");
260 }
261 ]])], [
262 AC_MSG_RESULT([yes])
263 AC_DEFINE([HAVE_AVX512BW], 1, [Define if host toolchain supports AVX512BW])
264 ], [
265 AC_MSG_RESULT([no])
266 ])
267 ])
268
269 dnl #
270 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
271 dnl #
272 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA], [
273 AC_MSG_CHECKING([whether host toolchain supports AVX512IFMA])
274
275 AC_LINK_IFELSE([AC_LANG_SOURCE([
276 [
277 void main()
278 {
279 __asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2");
280 }
281 ]])], [
282 AC_MSG_RESULT([yes])
283 AC_DEFINE([HAVE_AVX512IFMA], 1, [Define if host toolchain supports AVX512IFMA])
284 ], [
285 AC_MSG_RESULT([no])
286 ])
287 ])
288
289 dnl #
290 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
291 dnl #
292 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI], [
293 AC_MSG_CHECKING([whether host toolchain supports AVX512VBMI])
294
295 AC_LINK_IFELSE([AC_LANG_SOURCE([
296 [
297 void main()
298 {
299 __asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2");
300 }
301 ]])], [
302 AC_MSG_RESULT([yes])
303 AC_DEFINE([HAVE_AVX512VBMI], 1, [Define if host toolchain supports AVX512VBMI])
304 ], [
305 AC_MSG_RESULT([no])
306 ])
307 ])
308
309 dnl #
310 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
311 dnl #
312 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF], [
313 AC_MSG_CHECKING([whether host toolchain supports AVX512PF])
314
315 AC_LINK_IFELSE([AC_LANG_SOURCE([
316 [
317 void main()
318 {
319 __asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}");
320 }
321 ]])], [
322 AC_MSG_RESULT([yes])
323 AC_DEFINE([HAVE_AVX512PF], 1, [Define if host toolchain supports AVX512PF])
324 ], [
325 AC_MSG_RESULT([no])
326 ])
327 ])
328
329 dnl #
330 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
331 dnl #
332 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER], [
333 AC_MSG_CHECKING([whether host toolchain supports AVX512ER])
334
335 AC_LINK_IFELSE([AC_LANG_SOURCE([
336 [
337 void main()
338 {
339 __asm__ __volatile__("vexp2pd %zmm0,%zmm1");
340 }
341 ]])], [
342 AC_MSG_RESULT([yes])
343 AC_DEFINE([HAVE_AVX512ER], 1, [Define if host toolchain supports AVX512ER])
344 ], [
345 AC_MSG_RESULT([no])
346 ])
347 ])
348
349 dnl #
350 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
351 dnl #
352 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL], [
353 AC_MSG_CHECKING([whether host toolchain supports AVX512VL])
354
355 AC_LINK_IFELSE([AC_LANG_SOURCE([
356 [
357 void main()
358 {
359 __asm__ __volatile__("vpabsq %zmm0,%zmm1");
360 }
361 ]])], [
362 AC_MSG_RESULT([yes])
363 AC_DEFINE([HAVE_AVX512VL], 1, [Define if host toolchain supports AVX512VL])
364 ], [
365 AC_MSG_RESULT([no])
366 ])
367 ])
368
369 dnl #
370 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
371 dnl #
372 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES], [
373 AC_MSG_CHECKING([whether host toolchain supports AES])
374
375 AC_LINK_IFELSE([AC_LANG_SOURCE([
376 [
377 void main()
378 {
379 __asm__ __volatile__("aesenc %xmm0, %xmm1");
380 }
381 ]])], [
382 AC_MSG_RESULT([yes])
383 AC_DEFINE([HAVE_AES], 1, [Define if host toolchain supports AES])
384 ], [
385 AC_MSG_RESULT([no])
386 ])
387 ])
388
389 dnl #
390 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
391 dnl #
392 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ], [
393 AC_MSG_CHECKING([whether host toolchain supports PCLMULQDQ])
394
395 AC_LINK_IFELSE([AC_LANG_SOURCE([
396 [
397 void main()
398 {
399 __asm__ __volatile__("pclmulqdq %0, %%xmm0, %%xmm1" :: "i"(0));
400 }
401 ]])], [
402 AC_MSG_RESULT([yes])
403 AC_DEFINE([HAVE_PCLMULQDQ], 1, [Define if host toolchain supports PCLMULQDQ])
404 ], [
405 AC_MSG_RESULT([no])
406 ])
407 ])
408
409 dnl #
410 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE
411 dnl #
412 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE], [
413 AC_MSG_CHECKING([whether host toolchain supports MOVBE])
414
415 AC_LINK_IFELSE([AC_LANG_SOURCE([
416 [
417 void main()
418 {
419 __asm__ __volatile__("movbe 0(%eax), %eax");
420 }
421 ]])], [
422 AC_MSG_RESULT([yes])
423 AC_DEFINE([HAVE_MOVBE], 1, [Define if host toolchain supports MOVBE])
424 ], [
425 AC_MSG_RESULT([no])
426 ])
427 ])
428
429 dnl #
430 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVE
431 dnl #
432 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVE], [
433 AC_MSG_CHECKING([whether host toolchain supports XSAVE])
434
435 AC_LINK_IFELSE([AC_LANG_SOURCE([
436 [
437 void main()
438 {
439 char b[4096] __attribute__ ((aligned (64)));
440 __asm__ __volatile__("xsave %[b]\n" : : [b] "m" (*b) : "memory");
441 }
442 ]])], [
443 AC_MSG_RESULT([yes])
444 AC_DEFINE([HAVE_XSAVE], 1, [Define if host toolchain supports XSAVE])
445 ], [
446 AC_MSG_RESULT([no])
447 ])
448 ])
449
450 dnl #
451 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVEOPT
452 dnl #
453 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVEOPT], [
454 AC_MSG_CHECKING([whether host toolchain supports XSAVEOPT])
455
456 AC_LINK_IFELSE([AC_LANG_SOURCE([
457 [
458 void main()
459 {
460 char b[4096] __attribute__ ((aligned (64)));
461 __asm__ __volatile__("xsaveopt %[b]\n" : : [b] "m" (*b) : "memory");
462 }
463 ]])], [
464 AC_MSG_RESULT([yes])
465 AC_DEFINE([HAVE_XSAVEOPT], 1, [Define if host toolchain supports XSAVEOPT])
466 ], [
467 AC_MSG_RESULT([no])
468 ])
469 ])
470
471 dnl #
472 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVES
473 dnl #
474 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_XSAVES], [
475 AC_MSG_CHECKING([whether host toolchain supports XSAVES])
476
477 AC_LINK_IFELSE([AC_LANG_SOURCE([
478 [
479 void main()
480 {
481 char b[4096] __attribute__ ((aligned (64)));
482 __asm__ __volatile__("xsaves %[b]\n" : : [b] "m" (*b) : "memory");
483 }
484 ]])], [
485 AC_MSG_RESULT([yes])
486 AC_DEFINE([HAVE_XSAVES], 1, [Define if host toolchain supports XSAVES])
487 ], [
488 AC_MSG_RESULT([no])
489 ])
490 ])