¿Las rotaciones a nivel de bits son más lentas que los cambios en la CPU Intel actual?

Tenía curiosidad sijava.lang.Integer.rotateLeft se optimiza mediante el uso de una instrucción de rotación y escribió un punto de referencia para ello. Los resultados no fueron concluyentes: fue mucho más rápido que dos turnos pero un poco más lento que uno solo. Así que lo reescribí en C ++ y obtuve los mismos resultados. Al compilar a través deg++ -S -Wall -O3 Puedo ver la instrucción en elensamblador generado. Mi CPU es Intel Core i5.

lospunto de referencia Es bastante largo y seguramente no es el código más bonito, pero no creo que esté roto. ¿O es eso? Según la documentación, las rotaciones toman un ciclo, al igual que los turnos. ¿Alguien puede explicar los resultados?

rotations:  6860
shift:      5100

Las dos primeras respuestas están equivocadas. Tanto el JIT de gcc como el de java conocen las instrucciones de rotación y las utilizan. Con respecto a gcc, vea el enlace de arriba, sobre java vea mijava benchmark y sus resultados

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta