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