Сдвиг 32-битного операнда на 32 бита на процессорах x86 возвращает исходный результат. Это особенность x86, не имеющая отношения к ротации.
это баг или фича? как сам интел это коментирует? оно на всех х86 или только интеловых?
а если сдвигать 2 раза на 16, оно правильно сдвинется?
Достаточно просто добавить проверку величины сдвига и возвращать 0, если она 32 или более.
+1, + надо включить поддержку -Cppentium2 для того чтоб ето условие быстро исполнялось.
кстати для нормального использования инструкций cmove есть какаято правильная и неправильна запись условий? насколько я понимаю
result := ifthen(rot > 31,0, value shr rot);
будет однозначно с использованием cmove ибо оба операнда вычислены, а вот аналог
if rot <= 31 then
result := value shr rot
else
result := 0;
уже неочевидно. Просветите Сергей.