Avoid UB on 32 bit targets
Shifting an operand by a shift amount greater than or equal to the width of that operand results in UB, which can happen when shifting an unsigned long on a 32 bit target by an amount from 0 to 63.
This is probably the cause of the crash at the following bug: