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.