1# Run-time CPU feature detection 2 3This module has run-time CPU feature detection implementations. 4 5Here is the table of targets that support run-time CPU feature detection and the instruction or API used: 6 7| target_arch | target_os/target_env | instruction/API | features | note | 8| ----------- | -------------------- | --------------- | -------- | ---- | 9| x86_64 | all (except for sgx) | cpuid | all | Enabled by default | 10| aarch64 | linux | getauxval | all | Only enabled by default on `*-linux-gnu*`, and `*-linux-musl*"` (default is static linking)/`*-linux-ohos*` (default is dynamic linking) with dynamic linking enabled. | 11| aarch64 | android | getauxval | all | Enabled by default | 12| aarch64 | freebsd | elf_aux_info | lse, lse2 | Enabled by default | 13| aarch64 | netbsd | sysctlbyname | all | Enabled by default | 14| aarch64 | openbsd | sysctl | all | Enabled by default | 15| aarch64 | macos/ios/tvos/watchos/visionos | sysctlbyname | all | Currently only used in tests (see [aarch64_apple.rs](aarch64_apple.rs)). | 16| aarch64 | illumos | getisax | lse, lse2 | Disabled by default | 17| aarch64/arm64ec | windows | IsProcessorFeaturePresent | lse | Enabled by default | 18| aarch64 | fuchsia | zx_system_get_features | lse | Enabled by default | 19| riscv32 | linux | riscv_hwprobe | all | Disabled by default | 20| riscv64 | linux | riscv_hwprobe | all | Disabled by default | 21| powerpc64 | linux | getauxval | all | Disabled by default | 22| powerpc64 | freebsd | elf_aux_info | all | Disabled by default | 23| powerpc64 | openbsd | elf_aux_info | all | Disabled by default | 24 25Run-time detection is enabled by default on most targets and can be disabled with `--cfg portable_atomic_no_outline_atomics`. 26 27On some targets, run-time detection is disabled by default mainly for compatibility with older versions of operating systems or incomplete build environments, and can be enabled by `--cfg portable_atomic_outline_atomics`. (When both cfg are enabled, `*_no_*` cfg is preferred.) 28 29For targets not included in the above table, run-time detection is always disabled and works the same as when `--cfg portable_atomic_no_outline_atomics` is set. 30 31See [auxv.rs](auxv.rs) module-level comments for more details on Linux/Android/FreeBSD/OpenBSD. 32 33See also [docs on `portable_atomic_no_outline_atomics`](https://github.com/taiki-e/portable-atomic/blob/HEAD/README.md#optional-cfg-no-outline-atomics) in the top-level readme. 34