Czy rotacje bitowe są wolniejsze niż zmiany w obecnym procesorze Intel?

Byłem ciekawy, czyjava.lang.Integer.rotateLeft zostaje zoptymalizowany za pomocą instrukcji rotacji i napisał dla niego test porównawczy. Wyniki były niejednoznaczne: było znacznie szybsze niż dwie zmiany, ale nieco wolniejsze niż pojedyncza. Przepisałem to w C ++ i uzyskałem te same wyniki. Podczas kompilacji przezg++ -S -Wall -O3 Widzę instrukcję wwygenerowany asembler. Mój procesor to Intel Core i5.

Thereper jest dość długi i na pewno nie najładniejszy kawałek kodu, ale nie sądzę, żeby był zepsuty. Albo to jest? Zgodnie z dokumentacją rotacje mają jeden cykl, podobnie jak zmiany. Czy ktoś może wyjaśnić wyniki?

rotations:  6860
shift:      5100

Pierwsze dwie odpowiedzi są błędne. Zarówno gcc, jak i java JIT znają instrukcje rotacji i używają ich. Jeśli chodzi o gcc, zobacz link powyżej, dotyczący java zobacz mójjava benchmark i jego wyniki

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

questionAnswers(3)

yourAnswerToTheQuestion