2 dnl # Checks if host toolchain supports SIMD instructions
4 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [
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
32 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
34 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE], [
35 AC_MSG_CHECKING([whether host toolchain supports SSE])
37 AC_LINK_IFELSE([AC_LANG_SOURCE([[
40 __asm__ __volatile__("xorps %xmm0, %xmm1");
43 AC_DEFINE([HAVE_SSE], 1, [Define if host toolchain supports SSE])
51 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
53 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2], [
54 AC_MSG_CHECKING([whether host toolchain supports SSE2])
56 AC_LINK_IFELSE([AC_LANG_SOURCE([[
59 __asm__ __volatile__("pxor %xmm0, %xmm1");
62 AC_DEFINE([HAVE_SSE2], 1, [Define if host toolchain supports SSE2])
70 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
72 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3], [
73 AC_MSG_CHECKING([whether host toolchain supports SSE3])
75 AC_LINK_IFELSE([AC_LANG_SOURCE([[
79 __asm__ __volatile__("lddqu %0,%%xmm0" :: "m"(v[0]));
82 AC_DEFINE([HAVE_SSE3], 1, [Define if host toolchain supports SSE3])
90 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
92 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3], [
93 AC_MSG_CHECKING([whether host toolchain supports SSSE3])
95 AC_LINK_IFELSE([AC_LANG_SOURCE([[
98 __asm__ __volatile__("pshufb %xmm0,%xmm1");
101 AC_DEFINE([HAVE_SSSE3], 1, [Define if host toolchain supports SSSE3])
109 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
111 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1], [
112 AC_MSG_CHECKING([whether host toolchain supports SSE4.1])
114 AC_LINK_IFELSE([AC_LANG_SOURCE([[
117 __asm__ __volatile__("pmaxsb %xmm0,%xmm1");
120 AC_DEFINE([HAVE_SSE4_1], 1, [Define if host toolchain supports SSE4.1])
128 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
130 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2], [
131 AC_MSG_CHECKING([whether host toolchain supports SSE4.2])
133 AC_LINK_IFELSE([AC_LANG_SOURCE([[
136 __asm__ __volatile__("pcmpgtq %xmm0, %xmm1");
139 AC_DEFINE([HAVE_SSE4_2], 1, [Define if host toolchain supports SSE4.2])
147 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
149 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX], [
150 AC_MSG_CHECKING([whether host toolchain supports AVX])
152 AC_LINK_IFELSE([AC_LANG_SOURCE([[
156 __asm__ __volatile__("vmovdqa %0,%%ymm0" :: "m"(v[0]));
160 AC_DEFINE([HAVE_AVX], 1, [Define if host toolchain supports AVX])
167 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
169 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2], [
170 AC_MSG_CHECKING([whether host toolchain supports AVX2])
172 AC_LINK_IFELSE([AC_LANG_SOURCE([
176 __asm__ __volatile__("vpshufb %ymm0,%ymm1,%ymm2");
180 AC_DEFINE([HAVE_AVX2], 1, [Define if host toolchain supports AVX2])
187 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
189 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F], [
190 AC_MSG_CHECKING([whether host toolchain supports AVX512F])
192 AC_LINK_IFELSE([AC_LANG_SOURCE([
196 __asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2");
200 AC_DEFINE([HAVE_AVX512F], 1, [Define if host toolchain supports AVX512F])
207 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
209 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD], [
210 AC_MSG_CHECKING([whether host toolchain supports AVX512CD])
212 AC_LINK_IFELSE([AC_LANG_SOURCE([
216 __asm__ __volatile__("vplzcntd %zmm0,%zmm1");
220 AC_DEFINE([HAVE_AVX512CD], 1, [Define if host toolchain supports AVX512CD])
227 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
229 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ], [
230 AC_MSG_CHECKING([whether host toolchain supports AVX512DQ])
232 AC_LINK_IFELSE([AC_LANG_SOURCE([
236 __asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2");
240 AC_DEFINE([HAVE_AVX512DQ], 1, [Define if host toolchain supports AVX512DQ])
247 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
249 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW], [
250 AC_MSG_CHECKING([whether host toolchain supports AVX512BW])
252 AC_LINK_IFELSE([AC_LANG_SOURCE([
256 __asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2");
260 AC_DEFINE([HAVE_AVX512BW], 1, [Define if host toolchain supports AVX512BW])
267 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
269 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA], [
270 AC_MSG_CHECKING([whether host toolchain supports AVX512IFMA])
272 AC_LINK_IFELSE([AC_LANG_SOURCE([
276 __asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2");
280 AC_DEFINE([HAVE_AVX512IFMA], 1, [Define if host toolchain supports AVX512IFMA])
287 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
289 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI], [
290 AC_MSG_CHECKING([whether host toolchain supports AVX512VBMI])
292 AC_LINK_IFELSE([AC_LANG_SOURCE([
296 __asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2");
300 AC_DEFINE([HAVE_AVX512VBMI], 1, [Define if host toolchain supports AVX512VBMI])
307 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
309 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF], [
310 AC_MSG_CHECKING([whether host toolchain supports AVX512PF])
312 AC_LINK_IFELSE([AC_LANG_SOURCE([
316 __asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}");
320 AC_DEFINE([HAVE_AVX512PF], 1, [Define if host toolchain supports AVX512PF])
327 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
329 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER], [
330 AC_MSG_CHECKING([whether host toolchain supports AVX512ER])
332 AC_LINK_IFELSE([AC_LANG_SOURCE([
336 __asm__ __volatile__("vexp2pd %zmm0,%zmm1");
340 AC_DEFINE([HAVE_AVX512ER], 1, [Define if host toolchain supports AVX512ER])
347 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
349 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL], [
350 AC_MSG_CHECKING([whether host toolchain supports AVX512VL])
352 AC_LINK_IFELSE([AC_LANG_SOURCE([
356 __asm__ __volatile__("vpabsq %zmm0,%zmm1");
360 AC_DEFINE([HAVE_AVX512VL], 1, [Define if host toolchain supports AVX512VL])
367 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
369 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES], [
370 AC_MSG_CHECKING([whether host toolchain supports AES])
372 AC_LINK_IFELSE([AC_LANG_SOURCE([
376 __asm__ __volatile__("aesenc %xmm0, %xmm1");
380 AC_DEFINE([HAVE_AES], 1, [Define if host toolchain supports AES])
387 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
389 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ], [
390 AC_MSG_CHECKING([whether host toolchain supports PCLMULQDQ])
392 AC_LINK_IFELSE([AC_LANG_SOURCE([
396 __asm__ __volatile__("pclmulqdq %0, %%xmm0, %%xmm1" :: "i"(0));
400 AC_DEFINE([HAVE_PCLMULQDQ], 1, [Define if host toolchain supports PCLMULQDQ])
407 dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE
409 AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE], [
410 AC_MSG_CHECKING([whether host toolchain supports MOVBE])
412 AC_LINK_IFELSE([AC_LANG_SOURCE([
416 __asm__ __volatile__("movbe 0(%eax), %eax");
420 AC_DEFINE([HAVE_MOVBE], 1, [Define if host toolchain supports MOVBE])