Цитата(defunct @ Apr 3 2008, 14:14)

нет тут никакого глюка.
и нет смысла проверять оптимизацию на программках из трех строк.
Глюк есть.
На трех строках никто и не проверял, это выжимка из реального кода в которой проблема осталась.
Цитата
Не должен компилятор генерить swap если количество сдвигов задано переменной.
да не задано оно переменной, сдвиг на 5 разрядов к переменной x
не имеет никакого отношения
Было что-то типа такого:
Код
#include <avr\io.h>
unsigned char y=0x34;
int main()
{
ADMUX = (1<<MUX2)|(1<<MUX0);
............................
y = y >> 5;
............................
TCNT0 = 5;
...........................
while (1);
}
С вот таким результатом компиляции:
Код
8: ADMUX = (1<<MUX2)|(1<<MUX0);
+00000032: E095 LDI R25,0x05 Load immediate
+00000033: B997 OUT 0x07,R25 Out to I/O location
10: y = y >> 5;
+00000034: 91800060 LDS R24,0x0060 Load direct from data space
+00000036: 2E09 MOV R0,R25 Copy register
+00000037: C001 RJMP PC+0x0002 Relative jump
+00000038: 9586 LSR R24 Logical shift right
+00000039: 940A DEC R0 Decrement
+0000003A: F7EA BRPL PC-0x02 Branch if plus
+0000003B: 93800060 STS 0x0060,R24 Store direct to data space
12: TCNT0 = 5;
+0000003D: BF92 OUT 0x32,R25 Out to I/O location