ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
14954 Топик полностью
ReAl (27.09.2004 14:47, просмотров: 1) ответил prosto_Alex на Не в том дело...
В 286 был сдвигатель "циклический", там микрокод и цикл. В 386 и выше, насколько я помню, сдвигатель "барабанный" - куча мультиплексоров, на адреса которым подаются 5 младших бит CL. Но это всё не имеет никакого отношения к исходной теме, ответ на которую звучит
"дело в том, что компилятор имеет право делать всё,
что захочет, включая замену
unsigned long foo(unsigned long u) {
  return u<<16;
}
на голый ret, оставляя в регистре возврата тот мусор, который был при входе в функцию"
А то, что у QC2.5 там оказался "ожидаемый" нуль, а у BC5.02 и gcc/x86 поведение "аналогично x86-му" - чистая случайность, и я именно об этом толкую. Баг ли, фича ли x86-го это маскирование - C-компилятор имеет право поступать как ему удобнее.