Битовые вращения медленнее, чем сдвиги на текущем процессоре Intel?

Мне было любопытно, еслиjava.lang.Integer.rotateLeft оптимизируется с помощью инструкции поворота и пишет для нее тест. Результаты были неубедительными: это было намного быстрее, чем две смены, но немного медленнее, чем одна. Поэтому я переписал его на C ++ и получил примерно те же результаты. При компиляции черезg++ -S -Wall -O3 Я могу видеть инструкцию всгенерированный ассемблер, Мой процессор - Intel Core i5.

эталонный тест довольно длинный и, конечно, не самый хороший кусок кода, но я не думаю, что он сломан. Либо это? Согласно документации, вращение занимает один цикл, как и смены. Кто-нибудь может объяснить результаты?

rotations:  6860
shift:      5100

Первые два ответа неверны. JIT и gcc, и java знают инструкции поворота и используют их. По поводу gcc смотрите ссылку выше, по поводу java смотрите мойJava-тест и его результаты

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

Ответы на вопрос(3)

Ваш ответ на вопрос