Цитата(SysRq @ Aug 24 2008, 15:55)

Ну само собой! При попытке чего-то оптимизировать теряем в универсальности..

Что называется, почувствуйте разницу.
Я не думал что будет ТАКОЕ:
gcc 4.1.2 Os
Код
volatile unsigned short a;
volatile unsigned short b;
volatile unsigned short с;
a = (unsigned short)SPDR<<8; // Hi
b6: 8f b1 in r24, 0x0f; 15
b8: 99 27 eor r25, r25
ba: 98 2f mov r25, r24
bc: 88 27 eor r24, r24
be: 9e 83 std Y+6, r25; 0x06
c0: 8d 83 std Y+5, r24; 0x05
a |= SPDR; // Low
c2: 2d 81 ldd r18, Y+5; 0x05
c4: 3e 81 ldd r19, Y+6; 0x06
c6: 8f b1 in r24, 0x0f; 15
c8: 99 27 eor r25, r25
ca: 28 2b or r18, r24
cc: 39 2b or r19, r25
ce: 3e 83 std Y+6, r19; 0x06
d0: 2d 83 std Y+5, r18; 0x05
*((unsigned char*)&b + 1) = SPDR; // Hi
d2: 8f b1 in r24, 0x0f; 15
d4: 8a 83 std Y+2, r24; 0x02
*((unsigned char*)&b + 0) = SPDR; // Low
d6: 8f b1 in r24, 0x0f; 15
d8: 89 83 std Y+1, r24; 0x01
c = a+b;
da: 8d 81 ldd r24, Y+5; 0x05
dc: 9e 81 ldd r25, Y+6; 0x06
de: 29 81 ldd r18, Y+1; 0x01
e0: 3a 81 ldd r19, Y+2; 0x02
e2: 82 0f add r24, r18
e4: 93 1f adc r25, r19
e6: 9c 83 std Y+4, r25; 0x04
e8: 8b 83 std Y+3, r24; 0x03
Так будет лучше, но....
gcc 4.3.0 Os
Код
a = (unsigned short)SPDR<<8; // Hi
b0: 2f b1 in r18, 0x0f; 15
b2: 92 2f mov r25, r18
b4: 80 e0 ldi r24, 0x00; 0
b6: 9a 83 std Y+2, r25; 0x02
b8: 89 83 std Y+1, r24; 0x01
a |= SPDR; // Low
ba: 29 81 ldd r18, Y+1; 0x01
bc: 3a 81 ldd r19, Y+2; 0x02
be: 8f b1 in r24, 0x0f; 15
c0: 90 e0 ldi r25, 0x00; 0
c2: 82 2b or r24, r18
c4: 93 2b or r25, r19
c6: 9a 83 std Y+2, r25; 0x02
c8: 89 83 std Y+1, r24; 0x01