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. 

Reply via email to