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