]> git.proxmox.com Git - mirror_zfs.git/blobdiff - config/toolchain-simd.m4
Don't assume pthread_t is uint_t for portability
[mirror_zfs.git] / config / toolchain-simd.m4
index 0f8c1f2d9fe809be3b373338fc57dcd5bc9cdc34..37627b813bb3dbbb590eaa35bb1140cbff8b8e48 100644 (file)
@@ -12,6 +12,17 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [
                        ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
                        ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
                        ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
+                       ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
                        ;;
        esac
 ])
@@ -170,3 +181,223 @@ AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2], [
                AC_MSG_RESULT([no])
        ])
 ])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512F])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512F], 1, [Define if host toolchain supports AVX512F])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512CD])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vplzcntd %zmm0,%zmm1");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512CD], 1, [Define if host toolchain supports AVX512CD])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512DQ])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512DQ], 1, [Define if host toolchain supports AVX512DQ])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512BW])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512BW], 1, [Define if host toolchain supports AVX512BW])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512IFMA])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512IFMA], 1, [Define if host toolchain supports AVX512IFMA])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512VBMI])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512VBMI], 1, [Define if host toolchain supports AVX512VBMI])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512PF])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512PF], 1, [Define if host toolchain supports AVX512PF])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512ER])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vexp2pd %zmm0,%zmm1");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512ER], 1, [Define if host toolchain supports AVX512ER])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL], [
+       AC_MSG_CHECKING([whether host toolchain supports AVX512VL])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("vpabsq %zmm0,%zmm1");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AVX512VL], 1, [Define if host toolchain supports AVX512VL])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES], [
+       AC_MSG_CHECKING([whether host toolchain supports AES])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("aesenc %xmm0, %xmm1");
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_AES], 1, [Define if host toolchain supports AES])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])
+
+dnl #
+dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ], [
+       AC_MSG_CHECKING([whether host toolchain supports PCLMULQDQ])
+
+       AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [
+               void main()
+               {
+                       __asm__ __volatile__("pclmulqdq %0, %%xmm0, %%xmm1" :: "i"(0));
+               }
+       ]])], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_PCLMULQDQ], 1, [Define if host toolchain supports PCLMULQDQ])
+       ], [
+               AC_MSG_RESULT([no])
+       ])
+])