]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - config/toolchain-simd.m4
Revert "Develop tests for issues #5866 and #8858"
[FreeBSD/FreeBSD.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 ])