Skip to content
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
hanna-kruppe opened this issue Jan 11, 2025 · 2 comments · Fixed by #430
Closed

Use core::arch intrinsics for for rint and rintf where possible #421

hanna-kruppe opened this issue Jan 11, 2025 · 2 comments · Fixed by #430

Comments

@hanna-kruppe
Copy link
Contributor

hanna-kruppe commented Jan 11, 2025

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 Use core::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.
@tgross35
Copy link
Contributor

tgross35 commented Jan 12, 2025

This would be very welcome, are you able to put up a PR? They just need to be exposed in math/arch and then select_implementation! in the relevant functions.

If you aren’t able to, I’ll try to get to this at some point.

@hanna-kruppe
Copy link
Contributor Author

I have very limited time for non-day job contributions, I think I'll be able to cobble together something from the godbolt experiments I did while writing this issue but if it gets more complicated I'll have to bail out and leave the rest to you.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants