6 releases
Uses old Rust 2015
0.1.5 | Apr 17, 2019 |
---|---|
0.1.4 | Feb 18, 2019 |
0.1.3 | Jan 30, 2019 |
#413 in Hardware support
94KB
2K
SLoC
std::detect
- Rust's standard library run-time CPU feature detection
The 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.
Usage
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 the feature(stdsimd)
feature-gate.
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.
Features
-
std_detect_dlsym_getauxval
(enabled by default, requireslibc
): Enable to uselibc::dlsym
to query whethergetauxval
is linked into the binary. When this is not the case, this feature allows other fallback methods to perform run-time feature detection. When this feature is disabled,std_detect
assumes thatgetauxval
is linked to the binary. If that is not the case the behavior is undefined. -
std_detect_file_io
(enabled by default, requiresstd
): Enable to perform run-time feature detection using file APIs (e.g./proc/cpuinfo
, etc.) if other more performant methods fail. This feature requireslibstd
as a dependency, preventing the crate from working on applications in whichstd
is not available.
Platform support
-
All
x86
/x86_64
targets are supported on all platforms by querying thecpuid
instruction directly for the features supported by the hardware and the operating system.std_detect
assumes that the binary is an user-space application. If you need raw support for queryingcpuid
, consider using thecupid
crate. -
Linux:
arm{32, 64}
,mips{32,64}{,el}
,powerpc{32,64}{,le}
:std_detect
supports these on Linux by querying ELF auxiliary vectors (usinggetauxval
when available), and if that fails, by querying/proc/cpuinfo
.arm64
: partial support for doing run-time feature detection by directly queryingmrs
is implemented for Linux >= 4.11, but not enabled by default.
-
FreeBSD:
arm64
: run-time feature detection is implemented by directly queryingmrs
.
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
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.