]> git.proxmox.com Git - mirror_zfs.git/blame - config/toolchain-simd.m4
OpenZFS 9185 - Enable testing over NFS in ZFS performance tests
[mirror_zfs.git] / config / toolchain-simd.m4
CommitLineData
fc0c72b1
GN
1dnl #
2dnl # Checks if host toolchain supports SIMD instructions
3dnl #
4AC_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
32ffaa3d
GN
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
010d1247
NL
24 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
25 ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
fc0c72b1
GN
26 ;;
27 esac
28])
29
30dnl #
31dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
32dnl #
33AC_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
49dnl #
50dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
51dnl #
52AC_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
68dnl #
69dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
70dnl #
71AC_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
88dnl #
89dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
90dnl #
91AC_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
107dnl #
108dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
109dnl #
110AC_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
126dnl #
127dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
128dnl #
129AC_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
145dnl #
146dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
147dnl #
148AC_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
165dnl #
166dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
167dnl #
168AC_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])
32ffaa3d
GN
184
185dnl #
186dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
187dnl #
188AC_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
205dnl #
206dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
207dnl #
208AC_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
225dnl #
226dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
227dnl #
228AC_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
245dnl #
246dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
247dnl #
248AC_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
265dnl #
266dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
267dnl #
268AC_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
285dnl #
286dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
287dnl #
288AC_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
305dnl #
306dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
307dnl #
308AC_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
325dnl #
326dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
327dnl #
328AC_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
345dnl #
346dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
347dnl #
348AC_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])
010d1247
NL
364
365dnl #
366dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
367dnl #
368AC_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
385dnl #
386dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
387dnl #
388AC_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])