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