As rotações bit a bit são mais lentas que as alterações no CPU Intel atual?

Eu estava curioso sejava.lang.Integer.rotateLeft é otimizado usando uma instrução de rotação e escreveu um benchmark para isso. Os resultados foram inconclusivos: foram muito mais rápidos do que dois turnos, mas um pouco mais lentos que um único. Então eu reescrevi em C ++ e obtive os mesmos resultados. Ao compilar viag++ -S -Wall -O3 Eu posso ver a instrução nomontador gerado. Meu processador é o Intel Core i5.

oreferência é bastante longo e certamente não é o melhor pedaço de código, mas não acho que esteja quebrado. Ou é? De acordo com a documentação, as rotações levam um ciclo, exatamente como os turnos. Alguém pode explicar os resultados?

rotations:  6860
shift:      5100

As duas primeiras respostas estão erradas. Tanto o gcc quanto o java's JIT conhecem as instruções de rotação e as utilizam. Sobre o gcc veja o link acima, sobre java veja meubenchmark de java e seus resultados

benchmark   ns linear runtime
   Rotate 3.48 ====================
NonRotate 5.05 ==============================
    Shift 2.16 ============

questionAnswers(3)

yourAnswerToTheQuestion