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