https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97311
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- I don't see how manually written arithmetic with explicit % operations is going to beat using built-in types that do that automatically. If 64-bit arithmetic is faster than 32-bit arithmetic, I would expect the compiler to use 64-bit registers and mask them off to produce 32-bit results. If the user has to do that manually to get better performance, then the compiler has a bug. The only reason not to use uint32_t is because some platforms don't support it, and as I've already said that's not relevant for this implementation.