This repository was archived by the owner on Apr 28, 2025. It is now read-only.
This repository was archived by the owner on Apr 28, 2025. It is now read-only.
Use core::arch
intrinsics for for rint
and rintf
where possible #421
Closed
Description
These functions don't have any arch-specialized versions right now. I believe they can be done with smaller code size and better performance on some targets:
- On Wasm,
f{32,64}_nearest
are always available and already exposed in core::arch (cc Usecore::arch::wasm
functions rather than intrinsics #418). - AArch64 with target_feature=neon has
frintn
but the scalar versions don't seem to be exposed in core::arch. I guess the vector versions (e.g.,vrndn_f32
) are still an improvement over softfloat even if they need an unnecessary scalar->vector splat. - On x86 and x86_64, there's
_mm_round_{sd,ss}
and_MM_FROUND_TO_NEAREST_INT
. But this requires SSE4.1 so it's not applicable unless someone happens to build libm from crates.io with appropriate RUSTFLAGS.- GCC manages to emit inline code for it with just SSE2 but it's not exactly pretty and I'm not sure if it's even significantly better than the generic implementation in this crate.
Metadata
Metadata
Assignees
Labels
No labels