std::detect - Rust's standard library run-time CPU feature detectionThe private std::detect module implements run-time feature detection in Rust's standard library. This allows detecting whether the CPU the binary runs on supports certain features, like SIMD instructions.
std::detect APIs are available as part of libstd. Prefer using it via the standard library than through this crate. Unstable features of std::detect are available on nightly Rust behind various feature-gates.
If you need run-time feature detection in #[no_std] environments, Rust core library cannot help you. By design, Rust core is platform independent, but performing run-time feature detection requires a certain level of cooperation from the platform.
You can then manually include std_detect as a dependency to get similar run-time feature detection support than the one offered by Rust's standard library. We intend to make std_detect more flexible and configurable in this regard to better serve the needs of #[no_std] targets.
All x86/x86_64 targets are supported on all platforms by querying the cpuid instruction directly for the features supported by the hardware and the operating system. std_detect assumes that the binary is an user-space application.
Linux/Android:
arm{32, 64}, mips{32,64}{,el}, powerpc{32,64}{,le}, loongarch{32,64}, s390x: std_detect supports these on Linux by querying ELF auxiliary vectors (using getauxval when available), and if that fails, by querying /proc/self/auxv.arm64: partial support for doing run-time feature detection by directly querying mrs is implemented for Linux >= 4.11, but not enabled by default.riscv{32,64}: std_detect supports these on Linux by querying riscv_hwprobe, and by querying ELF auxiliary vectors (using getauxval when available).FreeBSD:
arm32, powerpc64: std_detect supports these on FreeBSD by querying ELF auxiliary vectors using elf_aux_info.arm64: run-time feature detection is implemented by directly querying mrs.OpenBSD:
powerpc64: std_detect supports these on OpenBSD by querying ELF auxiliary vectors using elf_aux_info.arm64: run-time feature detection is implemented by querying sysctl.Windows:
arm64: run-time feature detection is implemented by querying IsProcessorFeaturePresent.This project is licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in std_detect by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.