Commit Graph

322511 Commits

Author SHA1 Message Date
Trevor Gross 6bbf64e1dd roundeven: Use an assembly implementation on i586
Add an assembly implementation for roundeven which also works for
`rint`, similar to the existing `ceil` and `floor` implementations. This
resolves cases where values close to the *.5 boundary would round the
incorrect direction, such as -519629176421.49976 (tested in
`case_list`).
2026-04-06 20:57:45 -04:00
Brian Cain 312b9946c7 c-b: Add hexagon common entry/exit ABI routines and memcpy_dwloop
Add callee-saved register save/restore routines for three hexagon ABIs
(abi1, abi2, legacy) and a double-word loop memcpy implementation. Also
add a FALLTHROUGH_TAIL_CALL macro to func_macro.s for chaining function
entry points without branches.

Refer to https://github.com/llvm/llvm-project/tree/c1fd7d7a1f573477d86a716bacda01ed1d8c7a43/compiler-rt/lib/builtins/hexagon for corresponding clang-rt hexagon builtin source.
2026-04-04 04:45:51 -04:00
Trevor Gross 719d7f9e17 bench: Rename the benchmark baselines
These no longer test just softfloat and hardfloat, but also the fallback
implementations in `mem` compared to those that make use of assembly.
Change the baseline names to be more accurate of the difference.
2026-04-02 04:05:53 -04:00
Trevor Gross dee26f70d1 libm: Deprecate feature = "force-soft-float"
This was needed while some codegen backends did not support inline
assembly, or ran into circular issues using vector intrinsics. All such
issues have since been resolved with the in-tree backends. The remaining
need was to be able to toggle these features in tests, which we can do
via the enabled-by-default `arch` feature. Since there aren't any cases
requiring `force-soft-float`, remove its functionality and deprecate it.

It is possible that future codegen backends may have a similar need to
disable inline assembly until pairity with the LLVM backend can be
reached. In these cases rather than having `force-soft-float`, it would
be better to have rustc provide a `cfg(target_supports_inline_asm)`.
`build.rs` can then do something like:

    let nightly = cfg!(feature = "compiler-builtins") || cfg!(feature = "unstable");
    let asm_support = env::var("CARGO_CFG_TARGET_SUPPORTS_INLINE_ASM").is_ok();
    let arch_enabled = cfg!(feature = "arch") && (!nightly || (nightly && asm_support));
    set_cfg("arch_enabled", arch_enabled);

This is about what we have now with `cfg(target_has_reliable_f16)` and
`cfg(target_has_reliable_f128)` being set by rustc, which is
significantly easier to use than the `feature = "no-f16-f128"` that it
replaced. Having rustc directly tell us what it supports means we don't
need to bubble subtractive options up to bootstrap via a chain of Cargo
features that aren't really meant to support disabling things.

I'm sketching this out for future reference since it seems likely that
the need comes back up eventually.
2026-04-01 19:45:21 -04:00
Trevor Gross 5448797944 ci: Bump ubuntu:25.10 docker images to 26.04 2026-04-01 18:47:14 -04:00
Trevor Gross 2f57167feb Revert "ci: Don't re-archive the tar.xz benchmark baseline"
Unfortunately the `gh` CLI tool can't yet download non-zipped archives.
Attempting to do so says:

    error downloading baseline-icount-i686-202604011355-ba4c48868cad.tar.xz: error extracting zip archive: zip: not a valid zip file

Drop this change until the CLI is updated.

This reverts commit 0a57b9e3eda70c3673815fc47fad137a3c62da98.
2026-04-01 16:45:54 -04:00
Trevor Gross 6b97e039e4 c-b: Replace the no-asm feature with an opposite-polarity arch
Make `libm` and `compiler-builtins` use the same configuration:

* By default there is an `arch` feature which allows `core::arch` and
  inline assembly.
* Disabling the `arch` feature turns these off.

Positive feature flags are easier to reason about than negative, so this
will allow for some build script cleanup as well.
2026-04-01 09:49:04 -04:00
Trevor Gross fc47fbcf51 ci: Don't re-archive the tar.xz benchmark baseline
The new version of `actions/upload-artifact` allows for skipping the
automatic file zipping, which is good because our files are already
compressed.
2026-04-01 09:04:29 -04:00
Mend Renovate 858156eb42 chore(deps): lock file maintenance 2026-04-01 06:15:30 -04:00
Mend Renovate d89fb1df02 chore(deps): update github actions 2026-04-01 06:14:11 -04:00
Mend Renovate 9c41dadd30 chore(deps): update actions/upload-artifact action to v7 2026-04-01 06:10:47 -04:00
Mend Renovate 6dd2ec0ce5 chore(deps): update rust crate object to 0.39.0 2026-04-01 05:55:05 -04:00
Marco Ieni 7d709d16ad renovate: don't raise individual PRs for crates non breaking changes
Before this PR, we were receiving PRs when crate `1.2.3` was updated to
`1.3.0`. With this PR, we should receive PRs only when `2.0.0` is out.

Similar to https://github.com/rust-lang/crates-io-auth-action/pull/220
2026-04-01 05:31:28 -04:00
Jakub Beránek c1c86519dc ci: Fix rustc-pull workflow
See https://github.com/rust-lang/josh-sync/pull/40.
2026-04-01 09:21:19 +00:00
Trevor Gross b551fa8f03 c-b: Turn mem-unaligned from a feature to a cfg
For anything that doesn't need to be configurable via Cargo, using a
`cfg` rather than a feature is cleaner.
2026-04-01 04:51:47 -04:00
Trevor Gross 3975322675 build: Print build config if LIBM_BUILD_VERBOSE is set
Make it easier to see what is being enabled without enabling Cargo's
`-vv` output.
2026-04-01 04:51:47 -04:00
Trevor Gross ed1274749d test: Turn feature = "no-sys-f128" and similar into plain cfg
These are internal configuration that Cargo doesn't need to be aware of.
Clean them up from the Cargo.toml feature list.
2026-04-01 02:55:13 -04:00
Trevor Gross 22579364d8 c-b: Clean up the mem feature
`mem` only enables the unmangled names; the functions are always
available via mangled names, so this doesn't have any purpose in our
tests. Thus, remove it from `builtins-test`.

The remaining `feature = "mem"` configuration in tests is for the
`aeabi_mem*` files, which call the compiler-builtins functions via
extern definitions. Move these to builtins-test-intrinsics, which is the
home of other tests that require unmangled symbols. Unfortunately these
tests have apparently not worked for a long time; this situation is
unchanged.
2026-03-31 21:54:45 -04:00
Trevor Gross 9a7c3e1607 bench: Enable unmangled-names when running benchmarks
Ensure that our compiler-builtins is providing the runtime, so we can
see the effect of changes in c-b on libm functions. This was happening
implicitly before because the `mangled-names` feature was not enabled in
tests, so unmangled names were exposed. In commit "c-b: Change the
`mangled-names` feature to `unmangled-names`" things were reversed,
meaning the unmangled names are no longer exposed by default, so our
benches started using the platform symbols. (Hence apparent regressions
in fmaf128, ldexpf128, powif128, and scalbnf128).
2026-03-31 21:35:45 -04:00
Trevor Gross ce25428693 c-b: Change the mangled-names feature to unmangled-names
This feature is somewhat backwards because the mangled names are always
available; enabling the `mangled-names` feature disables unmangled
names. This was likely somehow related to default features when the
crate was published on crates.io.

Rename the feature and reverse the logic such that unmangled names are
exposed when the feature `unmangled-names` is enabled.

Note that this changes some benchmarking logic; see the following commit
message for details.
2026-03-31 21:35:45 -04:00
Trevor Gross cb4025be48 c-b: Remove the mangled-names feature from builtins-test
This isn't used anywhere in CI and there doesn't seem to be a reason
that it would need to be toggled. Enable `mangled-names` on the
`compiler-builtins` dependency by default and remove the from
`builtins-test`.
2026-03-31 21:35:45 -04:00
Trevor Gross cf6b8b38c0 ci: Allow both benchmark versions to run on regressions
Don't exit immediately if a benchmark has regressions. Instead, save the
error and continue with the rest, then exit at the end.
2026-03-31 19:46:58 -04:00
Trevor Gross 0f19a2db1a ci: Temporarily disable the RISC-V runners
There are a limited amount of runners for these jobs, which is causing a
slow point in CI. Once more runners are available we can re-enable the
job.
2026-03-31 19:29:48 -04:00
Trevor Gross 03e408b22b ci: Explicitly set the compiler-builtins feature for symcheck
Since this is no longer a default feature, we need to enable it to avoid
getting errors about symbols from `core`.
2026-03-31 17:02:03 -04:00
The rustc-josh-sync Cronjob Bot 2bea478362 Merge ref '0e95a0f4c677' from rust-lang/rust
Pull recent changes from https://github.com/rust-lang/rust via Josh.

Upstream ref: rust-lang/rust@0e95a0f4c6
Filtered ref: rust-lang/compiler-builtins@84dcb0e1ae
Upstream diff: https://github.com/rust-lang/rust/compare/db3e99bbab28c6ca778b13222becdea54533d908...0e95a0f4c677002a5d4ac5bc59d97885e6f51f71

This merge was created using https://github.com/rust-lang/josh-sync.
2026-03-31 20:37:37 +00:00
Jules Bertholet c88ef81131 Promote char::is_case_ignorable from perma-unstable to unstable 2026-04-05 13:35:09 +00:00
The rustc-josh-sync Cronjob Bot cf46b0a82c Prepare for merging from rust-lang/rust
This updates the rust-version file to 0e95a0f4c6.
2026-03-31 20:35:11 +00:00
Ubiratan Soares 3f2745ce6e ci: fix rustc-pull permissions 2026-03-31 16:24:25 -04:00
bors 48cc71ee88 Auto merge of #154638 - JonathanBrouwer:rollup-oLBZ6Tr, r=JonathanBrouwer
Rollup of 4 pull requests

Successful merges:

 - rust-lang/rust#150752 (Update libc to v0.2.183)
 - rust-lang/rust#152432 (add rustc option -Zpacked-stack)
 - rust-lang/rust#154634 (Use `Hcx`/`hcx` consistently for `StableHashingContext`.)
 - rust-lang/rust#154635 (./x run miri: default to edition 2021)
2026-03-31 20:16:05 +00:00
bors 0e95a0f4c6 Auto merge of #154637 - JonathanBrouwer:rollup-fGsU36o, r=JonathanBrouwer
Rollup of 12 pull requests

Successful merges:

 - rust-lang/rust#154419 (Take first task group for further execution)
 - rust-lang/rust#154569 (Fix  type alias where clause suggestion spacing issue)
 - rust-lang/rust#154617 (Update flate2 users to use zlib-rs)
 - rust-lang/rust#154618 (Fix AtomicPtr::update's cfg gate)
 - rust-lang/rust#154620 (stabilize new Range type and iterator)
 - rust-lang/rust#151932 (refactor: remove `Adjust::ReborrowPin`)
 - rust-lang/rust#153980 (refactor: move doc(rust_logo) check to parser)
 - rust-lang/rust#154134 (fix: guard paren-sugar pretty-printing on short trait args)
 - rust-lang/rust#154270 (Create `Ty` type alias in `rustc_type_ir`)
 - rust-lang/rust#154580 (Split AttributeParserError Diagnostic implementation into subfunctions)
 - rust-lang/rust#154606 (misc test cleanups)
 - rust-lang/rust#154612 (Add a test for a now fixed ICE with `offset_of!()`)
2026-03-31 16:44:16 +00:00
Jonathan Brouwer c13822a584 Rollup merge of #154635 - RalfJung:miri-run-edition, r=Mark-Simulacrum
./x run miri: default to edition 2021

Fixes https://github.com/rust-lang/rust/issues/154630
2026-03-31 15:27:20 +02:00
Jonathan Brouwer 3cef5b54bc Rollup merge of #154634 - nnethercote:hcx, r=petrochenkov
Use `Hcx`/`hcx` consistently for `StableHashingContext`.

The `HashStable` and `ToStableHashKey` traits both have a type parameter that is sometimes called `CTX` and sometimes called `HCX`. (In practice this type parameter is always instantiated as `StableHashingContext`.) Similarly, variables with these types are sometimes called `ctx` and sometimes called `hcx`. This inconsistency has bugged me for some time.

The `HCX`/`hcx` form is more informative (the `H`/`h` indicates what type of context it is) and it matches other cases like `tcx`, `dcx`, `icx`.

Also, RFC 430 says that type parameters should have names that are "concise UpperCamelCase, usually single uppercase letter: T". In this case `H` feels insufficient, and `Hcx` feels better.

Therefore, this commit changes the code to use `Hcx`/`hcx` everywhere.

r? @petrochenkov
2026-03-31 15:27:19 +02:00
Jonathan Brouwer f883d62ea5 Rollup merge of #152432 - fneddy:s390x_packed_stack_attribute, r=nikic
add rustc option -Zpacked-stack

this enables `-Zpacked-stack` just as `-mpacked-stack` in clang and gcc. packed-stack is needed on s390x for kernel development.

For reference: rust-lang/rust#151154 and rust-lang/rust#150766

look at @uweigand s post for full explanation of what this does. Here a wrap-up:

https://github.com/rust-lang/rust/pull/150766#issuecomment-3729074303
> [...]
> packed-stack [...] modifies how the compiler-generated function prolog/epilog code makes use of the 160 byte register save area provided by a caller to the callee [...]  this variant is not actually incompatible with the ABI - packed-stack and regular functions can freely call each other without ABI issues.
> [...]
> combination of -mpacked-stack and -mbackchain [...]  the location in the stack frame where the backchain link ought to be stored is not available. [...] is not supported at all with the default ABI
> [...]
> However, in the special case of also using soft-float, our (implied) soft-float ABI provides a different location for the backchain that is compatible with -mpacked-stack, so that combination should be supported
> [...]
2026-03-31 15:27:18 +02:00
Jonathan Brouwer 470facce55 Rollup merge of #150752 - thesummer:update-libc-0.2.179, r=tgross35
Update libc to v0.2.183

Follow-up of https://github.com/rust-lang/rust/pull/150484.
This PR updates libc to include the latest patches to make rtems target (and probably others) compile again.
2026-03-31 15:27:18 +02:00
bors ba11b1e3f0 Auto merge of #154576 - Zalathar:cache-on-disk, r=nnethercote
Simplify the `cache_on_disk_if` modifier to just `cache_on_disk`



Thanks to https://github.com/rust-lang/rust/pull/154304, there is now only one remaining query with a non-trivial cache-on-disk condition (`check_liveness`). But prior experiments at https://github.com/rust-lang/rust/pull/153441#issuecomment-4009037104 indicate that `check_liveness` can also be made non-disk-caching with little or no measurable effect.

This PR takes advantage of those facts to replace the `cache_on_disk_if` modifier with a simpler `cache_on_disk` modifier:
- When combined with `separate_provide_extern`, only values for “local” keys are cached to disk.
- For any other query with `cache_on_disk`, values are cached to disk unconditionally.

r? nnethercote (or compiler)
2026-03-31 13:13:38 +00:00
Jonathan Brouwer bbeec421ea Rollup merge of #154612 - jakubadamw:issue-125805, r=Kivooeo
Add a test for a now fixed ICE with `offset_of!()`

Adds a test for rust-lang/rust#125805, which was an ICE with `offset_of!()` on a field with the type of a trait object missing `dyn` and a required lifetime parameter.

Closes rust-lang/rust#125805.
2026-03-31 13:58:44 +02:00
Jonathan Brouwer e9f6a7794c Rollup merge of #154606 - cyrgani:misc-test-cleanups, r=Kivooeo
misc test cleanups

These are some mixed cleanups to `tests/ui` that individually seemed too small for a PR of their own. Some duplicated tests are removed, `issues-*` tests are renamed and more FIXMEs are added to `ui/README.md`.
Reasoning for the deleted tests:
* `tests/ui/associated-types/issue-47814.rs`: duplicate of `tests/ui/associated-consts/issue-47814.rs`
* rename `tests/ui/closures/2229_closure_analysis/migrations/issue-78720.rs` to `.../nested-copy-drops-83176.rs` since rust-lang/rust#78720 was not the correct issue, rust-lang/rust#83176 was.
* `tests/ui/specialization/defaultimpl/specialization-feature-gate-default.rs`: duplicate of `tests/ui/specialization/specialization-feature-gate-default.rs`
* `fn/issue-1900.rs`: duplicate of `error-codes/E0131.rs`

r? @Kivooeo
2026-03-31 13:58:43 +02:00
Jonathan Brouwer 6188955b76 Rollup merge of #154580 - scrabsha:push-uzvmzwlqvqzr, r=jdonszelmann
Split AttributeParserError Diagnostic implementation into subfunctions
2026-03-31 13:58:43 +02:00
Jonathan Brouwer 286263335b Rollup merge of #154270 - Jamesbarford:chore/move-ty-pt1, r=lcnr
Create `Ty` type alias in `rustc_type_ir`

r? lcnr

Anywhere that required the use of the trait `Ty` I used `ty::Ty<I>` otherwise it should be `Ty<I>`
2026-03-31 13:58:42 +02:00
Jonathan Brouwer 29c210d5bd Rollup merge of #154134 - Embers-of-the-Fire:fix-153855, r=fmease
fix: guard paren-sugar pretty-printing on short trait args

Fix rust-lang/rust#153855 by adding a guard on trait with only one argument.
2026-03-31 13:58:42 +02:00
Jonathan Brouwer bfffbb6f41 Rollup merge of #153980 - mehdiakiki:pr-check_attrs-rust_logo, r=jdonszelmann
refactor: move doc(rust_logo) check to parser

Reducing `check_attr.rs` size by moving the `#[doc(rust_logo)]` feature gate into `DocParser`.
2026-03-31 13:58:41 +02:00
Jonathan Brouwer 3869a8e617 Rollup merge of #151932 - frank-king:refactor/pin-coerce-3, r=jackh726
refactor: remove `Adjust::ReborrowPin`

Followed by rust-lang/rust#149130, this PR removes `Adjust::ReborrowPin` and use an `Adjust::Deref(DerefAdjustKind::Pin)` followed by an `Adjust::Borrow(AutoBorrow::Pin)` instead.
2026-03-31 13:58:40 +02:00
Jonathan Brouwer 028a626a19 Rollup merge of #154620 - pitaj:stabilize-new_range_api, r=tgross35
stabilize new Range type and iterator

For rust-lang/rust#125687
Stabilizes `core::range::Range` and `core::range::RangeIter`, newly stable API:

```rust
// in core::range

pub struct Range<Idx> {
    pub start: Idx,
    pub end: Idx,
}

impl<Idx: fmt::Debug> fmt::Debug for Range<Idx> { /* ... */ }

impl<Idx: PartialOrd<Idx>> Range<Idx> {
    pub const fn contains<U>(&self, item: &U) -> bool
    where
        Idx: [const] PartialOrd<U>,
        U: ?Sized + [const] PartialOrd<Idx>;

    pub const fn is_empty(&self) -> bool
    where
        Idx: [const] PartialOrd;
}

impl<Idx: Step> Range<Idx> {
    pub fn iter(&self) -> RangeIter<Idx>;
}

impl<T> const RangeBounds<T> for Range<T> { /* ... */ }
impl<T> const RangeBounds<T> for Range<&T> { /* ... */ }

impl<T> const From<Range<T>> for legacy::Range<T> { /* ... */ }
impl<T> const From<legacy::Range<T>> for Range<T> { /* ... */ }

pub struct RangeIter<A>(/* ... */);

// `RangeIter::remainder` not stabilized

impl<A: Step> Iterator for RangeIter<A> {
    type Item = A;
    /* ... */
}

impl<A: Step> DoubleEndedIterator for RangeIter<A> { /* ... */ }
impl<A: Step> FusedIterator for RangeIter<A> { }
impl<A: Step> IntoIterator for Range<A> {
    type Item = A;
    type IntoIter = RangeIter<A>;
    /* ... */
}

impl ExactSizeIterator for RangeIter<u8> { }
impl ExactSizeIterator for RangeIter<i8> { }

unsafe impl<T> const SliceIndex<[T]> for range::Range<usize> {
    type Output = [T];
    /* ... */
}
unsafe impl const SliceIndex<str> for range::Range<usize> {
    type Output = str;
    /* ... */
}
```

Updates docs to reflect stabilization (removed "experimental")
2026-03-31 13:58:40 +02:00
Jonathan Brouwer d304cd64f2 Rollup merge of #154618 - CAD97:atomicptr-update-cfg-is-not-eight, r=joshtriplett
Fix AtomicPtr::update's cfg gate

I'm *pretty* sure this is supposed to be `#[cfg(target_has_atomic = "ptr")]` like `AtomicPtr::try_update` is.

cc @GrigorenkoPV (author), @Noratrieb (r+ to rust-lang/rust#133829)
2026-03-31 13:58:39 +02:00
Jonathan Brouwer c91d04086a Rollup merge of #154617 - joshtriplett:flate2-zlib-rs, r=Mark-Simulacrum
Update flate2 users to use zlib-rs

flate2 is looking to make zlib-rs the default.

Go ahead and make build-manifest and rust-installer use it, to make sure it
doesn't introduce any issues.
2026-03-31 13:58:39 +02:00
Jonathan Brouwer 04987e7b67 Rollup merge of #154569 - chenyukang:yukang-fix-153567-where-clause-space, r=jackh726
Fix  type alias where clause suggestion spacing issue

Fixes rust-lang/rust#153567
2026-03-31 13:58:38 +02:00
Jonathan Brouwer 8427445bde Rollup merge of #154419 - zetanumbers:take-first-group, r=nnethercote
Take first task group for further execution

Continuing from https://github.com/rust-lang/rust/pull/153768#discussion_r2938828363.

I thought that storing a first group of tasks for immediate execution instead of pushing and immediately poping it from rayon's local task queue in par_slice would avoid overwhelming work stealing potentially blocking the original thread. So I've implemented this change.

8 threads benchmarks:

<table><tr><td rowspan="2">Benchmark</td><td colspan="1"><b>baseline~~9</b></th><td colspan="2"><b>new~take-first-group~1</b></th></tr><tr><td align="right">Time</td><td align="right">Time</td><td align="right">%</th></tr><tr><td>🟣 <b>hyper</b>:check</td><td align="right">0.1110s</td><td align="right">0.1086s</td><td align="right">💚  -2.13%</td></tr><tr><td>🟣 <b>hyper</b>:check:initial</td><td align="right">0.1314s</td><td align="right">0.1298s</td><td align="right">💚  -1.23%</td></tr><tr><td>🟣 <b>hyper</b>:check:unchanged</td><td align="right">0.0771s</td><td align="right">0.0755s</td><td align="right">💚  -2.14%</td></tr><tr><td>🟣 <b>clap</b>:check</td><td align="right">0.3787s</td><td align="right">0.3757s</td><td align="right"> -0.80%</td></tr><tr><td>🟣 <b>clap</b>:check:initial</td><td align="right">0.4680s</td><td align="right">0.4564s</td><td align="right">💚  -2.48%</td></tr><tr><td>🟣 <b>clap</b>:check:unchanged</td><td align="right">0.2337s</td><td align="right">0.2301s</td><td align="right">💚  -1.52%</td></tr><tr><td>🟣 <b>syn</b>:check</td><td align="right">0.4321s</td><td align="right">0.4265s</td><td align="right">💚  -1.31%</td></tr><tr><td>🟣 <b>syn</b>:check:initial</td><td align="right">0.5586s</td><td align="right">0.5401s</td><td align="right">💚  -3.31%</td></tr><tr><td>🟣 <b>syn</b>:check:unchanged</td><td align="right">0.3434s</td><td align="right">0.3429s</td><td align="right"> -0.14%</td></tr><tr><td>🟣 <b>regex</b>:check</td><td align="right">0.2755s</td><td align="right">0.2661s</td><td align="right">💚  -3.40%</td></tr><tr><td>🟣 <b>regex</b>:check:initial</td><td align="right">0.3350s</td><td align="right">0.3347s</td><td align="right"> -0.11%</td></tr><tr><td>🟣 <b>regex</b>:check:unchanged</td><td align="right">0.1851s</td><td align="right">0.1832s</td><td align="right">💚  -1.01%</td></tr><tr><td>Total</td><td align="right">3.5296s</td><td align="right">3.4695s</td><td align="right">💚  -1.70%</td></tr><tr><td>Summary</td><td align="right">1.0000s</td><td align="right">0.9837s</td><td align="right">💚  -1.63%</td></tr></table>
2026-03-31 13:58:38 +02:00
Trevor Gross f9aeb48c51 libm: Add an approx module
As we port more correctly rounded implementatinos from CORE-MATH, it
would be nice to keep the existing versions around since they are
simpler, typically smaller and faster, and easier to port to other float
types. The implementations have also been reasonably well tested. 

Introduce an `approx` module that will serve as a home for these. As the
first member, add back the old `cbrt` implementation that was replaced
in 75a7f3df3ed7 ("Port the CORE-MATH version of `cbrt`").
2026-03-31 06:41:10 -04:00
Trevor Gross 816765baa0 hypot: Add cr_hypot from CORE-math
Replace our current implementation with one that is correctly rounded.

Source: https://gitlab.inria.fr/core-math/core-math/-/blob/93d9f3bab7561cfb62f746f7e70c0888bb5c9a00/src/binary64/hypot/hypot.c
2026-03-31 05:56:54 -04:00
Trevor Gross 2dc08eaf3d hypot: Move the existing implementation to the approx module 2026-03-31 05:56:54 -04:00