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