Я думаю, что проблема, которую вы видите, вызвана тем, что (1<<n)-1
оценивается как (1<<(n%64))-1
на некоторых чипах. Особенно, если n является или может быть оптимизировано как константа.
Учитывая это, вы можете сделать множество незначительных изменений. Например:
((1ULL<<(n/2))<<((n+1)/2))-1;
Вам нужно будет измерить, чтобы узнать, быстрее ли это, чем специальный корпус 64:
(n<64)?(1ULL<<n)-1:~0ULL;