It is probably a good idea to check that n2 is positive (or do that in no_overflow_lsl), I am not certain that the behaviour of shift is the same on all architectures.