I think this is slower than the straight implementation (please look at the generated asm).