rust/library/compiler-builtins/libm
Trevor Gross 28b6df8603 Add assembly version of simple operations on aarch64
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.
2025-04-09 00:46:53 -05:00
..
.github/workflows ci: Pin the nightly toolchain for aarch64 jobs 2025-02-23 21:10:11 -05:00
ci Switch musl from a script download to a submodule 2025-01-28 00:39:45 -06:00
crates Resolve small errors identified by recent clippy 2025-04-08 22:04:58 -05:00
etc Add assembly version of simple operations on aarch64 2025-04-09 00:46:53 -05:00
src Add assembly version of simple operations on aarch64 2025-04-09 00:46:53 -05:00
.editorconfig add generic libm helper 2023-01-17 20:41:24 +01:00
.git-blame-ignore-revs Add a .git-blame-ignore-revs file 2024-10-26 20:30:41 -05:00
.gitignore Switch musl from a script download to a submodule 2025-01-28 00:39:45 -06:00
.gitmodules Switch musl from a script download to a submodule 2025-01-28 00:39:45 -06:00
.rustfmt.toml Add a rustfmt.toml file matching rust-lang/rust 2024-10-26 20:28:28 -05:00
build.rs Rework the available Cargo profiles 2025-01-25 07:38:15 +00:00
Cargo.toml Upgrade all dependencies to the latest 2025-03-18 19:46:34 -05:00
CHANGELOG.md chore: release v0.2.11 2024-10-28 20:08:07 +00:00
configure.rs Account for optimization levels other than numbers 2025-01-07 17:58:54 -05:00
CONTRIBUTING.md Switch musl from a script download to a submodule 2025-01-28 00:39:45 -06:00
LICENSE.txt Update licensing to MIT AND (MIT OR Apache-2.0) 2024-10-26 17:09:57 -05:00
README.md Use https: links in README.md 2024-11-14 18:13:10 +00:00

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.