Commit graph

264 commits

Author SHA1 Message Date
Trevor Gross
5523607045 Rename canonical_name to base_name
"Canonical" isn't really the right word here, update to "base".
2024-10-30 14:01:39 -05:00
Trevor Gross
360d3ee184 Add float and integer traits from compiler-builtins
In preparation of adding generic algorithms to `libm`, add the traits
from `compiler-builtins`.

Eventually we should be able to unify the two crates so we don't have
duplicate implementations.
2024-10-29 03:46:45 -05:00
Trevor Gross
d6646ae2d1 Move architecture-specific code to src/math/arch
Move the code and call into its new location with
`select_implementation`.
2024-10-28 22:12:13 -05:00
Trevor Gross
7108e80dc2 Update select_implementation to accept arch configuration 2024-10-28 22:12:13 -05:00
Trevor Gross
ec1ca51298 Vendor cfg_if::cfg_if!
`cfg_if` is helpful for applying `cfg` attributes to groups of items,
like we will need to do with architecture-specific modules of `f16` and
`f128`. However, `libm` can't have dependencies.

The `cfg_if` macro is complex but small, so just vendor it here.
2024-10-28 22:12:13 -05:00
Trevor Gross
60e7e3b338 Make use of select_implementation
Replace all uses of `llvm_intrinsically` with select_implementation`.
2024-10-28 19:41:11 -05:00
Trevor Gross
d54896343c Introduce a select_implementation macro
Currently there is a macro called `llvm_intrinsically_optimized` that
uses an intrinsic rather than the function implementation if the
configuration is correct. Add a new macro `select_implementation` that
is somewhat cleaner to use.

In the future, we can update this macro with more fields to specify
other implementations that may be selected, such as something
architecture-specific or e.g. using a generic implementation for `f32`
routines, rather than those that convert to `f64`.

This introduces a `macros` module within `math/support`. We will be able
to move more things here later.
2024-10-28 19:40:32 -05:00
Trevor Gross
1b7346bf5f Introduce math::arch::intrinsics
This module provides implementations of basic functions that defer to
LLVM for what to do, rather than either using a builtin operation or
calling another function in this library.

`math::arch` will become the home of anything architecture-specific in
the future.
2024-10-28 19:40:31 -05:00
Trevor Gross
e6f7053c2e Replace feature = "unstable-intrinsics" with intrinsics_enabled
We currently have a non-additive feature, "force-soft-floats", and we
will need to gain another "no-f16-f128". This makes `cfg` usage in code
somewhat confusing and redundant.

Use `build.rs` to figure out if "unstable-intrinsics" is enabled while
"force-soft-floats" is not enabled and if so, emit a cfg
`intrinsics_enabled`. This is cleaner to use and should make adding more
features easier to reason about.

Also use this as an opportunity to eliminate the build.rs from the
compiler-builtins test crate, replaced with the `[lints]` table in
Cargo.toml.
2024-10-28 18:37:09 -05:00
Trevor Gross
66f8906862 Move the existing "unstable" feature to "unstable-intrinsics"
Currently there is a single feature called "unstable" that is used to
control whether intrinsics may be called. In anticipation of adding
other unstable features that we will want to control separately, create
a new feature called "unstable-intrinsics" that is enabled by
"unstable". Then move everything gated by "unstable" to
"unstable-intrinsics".
2024-10-28 18:37:09 -05:00
Trevor Gross
ee131ffa47 Disable a unit test that is failing on i586 2024-10-28 12:59:38 -05:00
quaternic
750027cbbe fix type of constants in ported sincosf (#331)
* fix type of constants in ported sincosf
2024-10-28 12:59:21 -05:00
Johanna Sörngård
db55857a73 Add basic docstrings to some functions (#337)
* Add docstring to Bessel functions
* Add docstrings to logarithm functions
* Add docstrings to pow functions
* Specify argument bit-size of the Bessel functions
* Specify argument bit-size for pow functions
* Specify argument bit-size for logarithms
* Add docstrings to sin, cos, sincos and sinh functions
* Add docstrings to sqrt
* Add docstrings to tan and tanh functions
* Add an inline link to https://en.wikipedia.org/wiki/Bessel_function to the docstrings of all Bessel functions.
2024-10-28 12:12:45 -05:00
Trevor Gross
ab0c8e84fb Run cargo fmt with new settings
Apply the changes from the `.rustfmt.toml` file added in the previous
commit.
2024-10-26 20:28:28 -05:00
Trevor Gross
79bf4fe1f2 Don't deny warnings in lib.rs
Having `#![deny(warnings)]` for the entire crate is a bit of a
development annoyance. We already run CI with `RUSTFLAGS=-Dwarnings` so
there isn't much of a reason to check this locally. Thus, remove the
attribute.

Additionally, sort the clippy allows.
2024-10-26 00:54:26 -05:00
Trevor Gross
f59dd82cca Move musl-reference-tests to a new libm-test crate
There isn't any reason for this feature to be exposed or part of the
build script. Move it to a separate crate.

We will also want more tests that require some support functions; this
will create a place for them.
2024-10-05 15:54:39 -05:00
Guillaume Gomez
7bc2291ac5 Rename only-soft-floats feature into force-soft-floats 2024-08-07 11:29:47 +02:00
Guillaume Gomez
c1a498db17 Add only-soft-floats feature to prevent using any intrinsics or arch-specific code 2024-08-06 21:23:34 +02:00
Amjad Alsharafi
1b15dd5eb2 Fix clippy::deprecated_cfg_attr on compiler_builtins 2024-04-30 12:14:55 +08:00
Jeff Thuong
9c0ab26d3b Corrected English typos 2024-04-02 11:35:08 +08:00
Amjad Alsharafi
d752cbfb0e Remove unneeded extern core in tgamma 2024-02-21 00:59:37 +00:00
Amanieu d'Antras
cdf7ac490c Allow internal_features lint when building with "unstable" 2024-02-21 00:58:14 +00:00
Mark S. Baranowski
7a32a99352 This updates the exponent calculations done in the nextafter functions related
to detecting underflow/overflow. The functions now match the behavior of the
MUSL implementations these were based on.

Fixes rust-lang/libm#286
2023-10-31 16:03:51 -06:00
Peter Michael Green
36e334dfb0 Fix rint and rintf on x87. 2023-10-05 17:38:44 +00:00
Tobias Decking
8753da27ae Small tweak to mul in fma.rs. 2023-02-16 18:22:17 +01:00
Amanieu d'Antras
576368ea57 Merge pull request rust-lang/libm#275 from moritz-meier/feature/add-generic-helper 2023-02-11 16:54:11 +01:00
James D. Turner
929b5841db Fix descriptions of erfc and erfcf
As described in the second paragraph of the docs for these functions, they are
the complementary error function, not the error function.
2023-01-20 13:40:55 -05:00
Moritz Meier
7777c60a0b add generic libm helper
Add editorconfig + docs


refactor
2023-01-17 20:41:24 +01:00
Luc
b90b2f8547 Fix formatting
Forgot to run cargo fmt last time...
2022-11-16 15:44:43 +01:00
Luc
294eab9520 Remove negative numbers from test 2022-11-16 15:39:13 +01:00
Luc
95c860d1bf Add Small Conformance tests to Sqrt(f) 2022-11-14 16:49:43 +01:00
Jules Bertholet
83524d4aa2 Disable tests on PowerPC 2022-11-07 13:19:05 -05:00
Jules Bertholet
292221cf4c rint/rintf instead of roundeven/roundevenf 2022-11-07 12:54:02 -05:00
Jules Bertholet
e3efddc2c2 Add roundeven and roundevenf 2022-11-07 12:37:44 -05:00
Andrew Tribick
98e9ab973a Use wrapping_neg() to avoid fma errors on underflow 2022-09-30 14:11:15 +02:00
Amanieu d'Antras
d0c0eb9c23 Merge pull request rust-lang/libm#267 from Amanieu/fmaf 2022-08-10 02:17:52 +02:00
Amanieu d'Antras
142261c91c Fix fmaf not to depend on FE_TOWARDZERO
Ported from upstream musl commit 4f3d346bffdf9ed2b1803653643dc31242490944

Fixes rust-lang/libm#263
2022-08-10 01:11:33 +01:00
Amanieu d'Antras
ea2de5ae30 Merge pull request rust-lang/libm#265 from ankane/no_panic 2022-08-01 16:53:42 +02:00
Andrew Kane
fecd4045af Ensure more functions do not panic 2022-07-31 13:57:20 -07:00
Outurnate
ada0be15bf Use smaller IPIO2 table for 16 and 32 bit architectures 2022-07-31 14:37:57 -04:00
Andrew Kane
4d8d134d10 Remove panics from tgamma and tgammaf 2022-07-29 16:52:30 -07:00
Peter Michael Green
8d91281fcc Apply formatting fixes from CI 2022-01-04 21:16:11 +00:00
Peter Michael Green
f8c8c8b2fe allow force_eval! to produce a result and use that result to more explicitly force rounding on x87. 2022-01-04 21:06:28 +00:00
Peter Michael Green
94b416e496 only allow x87-specific result in j1f.rs test on x87 2022-01-04 20:59:42 +00:00
Peter Michael Green
e3c3304557 round to storage format in some tests before comparison to prevent spurious errors on x87. 2022-01-04 20:30:43 +00:00
Peter Michael Green
e95ea2b11d Add forced rounding to storage format for x87 to rem_pio2.rs as well. 2022-01-04 20:30:43 +00:00
Peter Michael Green
874209b56c Use force_eval instead of to_bits/from_bits combination,
Using to_bits/from_bits to force conversion to storage format
apparently doesn't work in release mode. Also add an architecture
conditional to avoid pessimising other architectures.
2022-01-04 20:30:43 +00:00
Peter Michael Green
17c9073298 Fix testcases on x87 2022-01-04 20:30:43 +00:00
Peter Michael Green
d3fb52a7af force test_near_pi in rem_pio2.rs to be evaluated at runtime not compiletime. 2022-01-04 20:30:43 +00:00
Amanieu d'Antras
eb26f75f63 Disable musl tests on powerpc64 2022-01-04 00:09:07 +01:00