-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add backend for 32 bit targets with wide multiplication? #133
Comments
The current 32-bit backend is largely targeted at things like microcontrollers and should probably be gated on |
According to the comment it may be also useful on i386 targets, no? I guess we can make the 32-bit wide backend default and enable the 32-bit nonwide one only for selected targets. What are your thoughts about the potential 64-bit nonwide backend? |
Wasn't aware Rust even supported those!
I think it's ok to add additional backends (or perhaps decompose the existing backends into separate target-specific codepaths) as long as there's a reasonable performance justification. |
Currently
polyval
(and thus crates built on top of it) uses 32-bit soft backend which was written with targets without wide multiplication in mind. However, this code can be quite inefficient for targets which do support wide multiplication, such as:u32
s can be extended to 64 bits and multiplied usingi64.mul
.MULHU
andMUL
operations (hardware may fuse them later into a single instruction).Also it may be worth to add a soft backend for 64-bit targets without wide multiplication? Though right now I can't name a target for which it could be useful.
The text was updated successfully, but these errors were encountered: