Replace `core::arch` versions of the following with handwritten assembly, which avoids recursion issues (cg_gcc using `rint` as a fallback) as well as problems with `aarch64be`. * `rint` * `rintf` Additionally, add assembly versions of the following: * `fma` * `fmaf` * `sqrt` * `sqrtf` If the `fp16` target feature is available, which implies `neon`, also include the following: * `rintf16` * `sqrtf16` `sqrt` is added to match the implementation for `x86`. `fma` is included since it is used by many other routines. There are a handful of other operations that have assembly implementations. They are omitted here because we should have basic float math routines available in `core` in the near future, which will allow us to defer to LLVM for assembly lowering rather than implementing these ourselves. |
||
|---|---|---|
| .. | ||
| .github/workflows | ||
| ci | ||
| crates | ||
| etc | ||
| src | ||
| .editorconfig | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| .gitmodules | ||
| .rustfmt.toml | ||
| build.rs | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| configure.rs | ||
| CONTRIBUTING.md | ||
| LICENSE.txt | ||
| README.md | ||
libm
A port of MUSL's libm to Rust.
Goals
The short term goal of this library is to enable math support (e.g. sin, atan2) for the
wasm32-unknown-unknown target (cf. rust-lang/compiler-builtins). The longer
term goal is to enable math support in the core crate.
Already usable
This crate is on crates.io and can be used today in stable #![no_std] programs.
The API documentation can be found here.
Benchmark
The benchmarks are located in crates/libm-bench and require a nightly Rust toolchain.
To run all benchmarks:
cargo +nightly bench --all
Contributing
Please check CONTRIBUTING.md
Minimum Rust version policy
This crate supports rustc 1.63 and newer.
License
Usage is licensed under the MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT).
Contribution
Contributions are licensed under both the MIT license and the Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0). Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as mentioned, without any additional terms or conditions.
See LICENSE.txt for full details.