ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
14940 Топик полностью
ReAl (27.09.2004 13:08, просмотров: 1) ответил prosto_Alex на Так это один из самых известных глюков интела
Во-первых, даже если это и был когда-то глюк, то он давно не глюк :-) The 8086 does not mask the shift count. However, all other IA-32 processors (starting with the Intel 286 processor) do mask the shift count to 5 bits, resulting in a maximum count of 31. This masking is done in all operating modes (including the virtual-8086 mode) to reduce the maximum execution time of the instruction. Так что AMD обязан делать так же, ибо это уже не баг, а фича :-). Во вторых, как я уже писал, если бы стандарт нормировал, что будет что-то конкретное (0 или не 0 -- не важно), то можно было бы обсуждать компиялтор. Впрочем, что "тут он ни при чём", мы вроде бы как согласны оба. Но я утверждаю, что тут ни при чём и x86 архитектура. Тот же avr-gcc на
unsigned foo(unsigned val) {
	return val << 16;
}
хоть и просто грузит в возврат константу 0 без никаких сдвигов, но выдаёт предупреждение warning: left shift count >= width of type т.е. он не обещает, что во всех последующих версиях он будет при компиляции данного куска вести себя так же, как в этой.