• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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