This is a behaviour change. Without your optimisation `2 ^^ 32 == 0`. Not sure if this is ok. I can't find anything in the spec what says whether this overflow is defined or not.