Hi, I experimented with IAR c-compiler for MSP430 (that came with eZ430-F2013). Here is my source code: #include "msp430x20x3.h" int main(void) { signed char sc; unsigned char uc; signed int si; unsigned int ui; sc=P1IN+P1IN; uc=P1IN+P1IN; si=P1IN+P1IN; ui=P1IN+P1IN; return (sc+uc+si+ui); } That compiler did not like all four cases of P1IN+P1IN in the above code! Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement The complier has four levels of optimization: None, Low, Med, or High. And you can specify whether to optimize Size or Speed. I tried all eight combinations and got three different results. When using High or Med optimization for either Size or Speed, I got: 00F810 120A push.w R10 00F812 120B push.w R11 00F814 403B 0020 mov.w #0x20,R11 00F818 4B6C mov.b @R11,R12 00F81A 5B6C add.b @R11,R12 00F81C 4B6E mov.b @R11,R14 00F81E 5B6E add.b @R11,R14 00F820 4B6A mov.b @R11,R10 00F822 4B6F mov.b @R11,R15 00F824 5F0A add.w R15,R10 00F826 4B6D mov.b @R11,R13 00F828 4B6F mov.b @R11,R15 00F82A 5F0D add.w R15,R13 00F82C 118C sxt R12 00F82E 5E0C add.w R14,R12 00F830 5A0C add.w R10,R12 00F832 5D0C add.w R13,R12 00F834 413B pop.w R11 00F836 413A pop.w R10 00F838 4130 ret When using Low optimization for either Size or Speed, I got: 00F810 120A push.w R10 00F812 425C 0020 mov.b &P1IN,R12 00F816 525C 0020 add.b &P1IN,R12 00F81A 425E 0020 mov.b &P1IN,R14 00F81E 525E 0020 add.b &P1IN,R14 00F822 425A 0020 mov.b &P1IN,R10 00F826 F03A 00FF and.w #0xFF,R10 00F82A 425F 0020 mov.b &P1IN,R15 00F82E F03F 00FF and.w #0xFF,R15 00F832 5F0A add.w R15,R10 00F834 425D 0020 mov.b &P1IN,R13 00F838 F03D 00FF and.w #0xFF,R13 00F83C 425F 0020 mov.b &P1IN,R15 00F840 F03F 00FF and.w #0xFF,R15 00F844 5F0D add.w R15,R13 00F846 118C sxt R12 00F848 F03E 00FF and.w #0xFF,R14 00F84C 5E0C add.w R14,R12 00F84E 5A0C add.w R10,R12 00F850 5D0C add.w R13,R12 00F852 413A pop.w R10 00F854 4130 ret When using None optimization for either Size or Speed, I got: 00F810 120A push.w R10 00F812 120B push.w R11 00F814 425E 0020 mov.b &P1IN,R14 00F818 525E 0020 add.b &P1IN,R14 00F81C 4E4C mov.b R14,R12 00F81E 425E 0020 mov.b &P1IN,R14 00F822 525E 0020 add.b &P1IN,R14 00F826 4E4D mov.b R14,R13 00F828 425E 0020 mov.b &P1IN,R14 00F82C F03E 00FF and.w #0xFF,R14 00F830 425F 0020 mov.b &P1IN,R15 00F834 F03F 00FF and.w #0xFF,R15 00F838 5F0E add.w R15,R14 00F83A 4E0A mov.w R14,R10 00F83C 425E 0020 mov.b &P1IN,R14 00F840 F03E 00FF and.w #0xFF,R14 00F844 425F 0020 mov.b &P1IN,R15 00F848 F03F 00FF and.w #0xFF,R15 00F84C 5F0E add.w R15,R14 00F84E 4E0B mov.w R14,R11 00F850 118C sxt R12 00F852 F03D 00FF and.w #0xFF,R13 00F856 5D0C add.w R13,R12 00F858 5A0C add.w R10,R12 00F85A 5B0C add.w R11,R12 00F85C 413B pop.w R11 00F85E 413A pop.w R10 00F860 4130 ret
Lichen Wang Darwin was wrong. Monkeys might have evolved. Human did not. --------------------------------- Want to be your own boss? Learn how on Yahoo! Small Business.