> If you give me more information about what you are seeing (perhaps send me 
> the code and how you are invoking the toolchain) I'll see what I can figure 
> out.

Sure.  I got sucked into a conversation on comparative microcontroller 
architectures, and have been providing sample code produced by various PIC 
compilers, avr-gcc, and I wanted to add msp430 to the conversation.  I happen 
to have a simple program that works pretty well as an example, except I don't 
understand the code produced when I add optimization.

I'm using "msp430-gcc -mcpu=430 -Os -c flames.c"  (various substitutes for -Os; 
all but -O0 seem to have the same weird code.)  I've attached the full program, 
but the part in question is:

        led_all_on();
        for (pwm_delay = 128; pwm_delay !=0; pwm_delay--) {
             /*
              * We have a random number in each PWM between 1 and 128
              * and we're going to have 128 cycles of delay.  So each
              * decremented output can only cross zero once, at which
              * time we toggle the output state.
              */
             if (--pwm1 == 0) {
                 led1_off;
             }
             if (--pwm2 == 0) {
                 led2_off;
             }
             if (--pwm3 == 0) {
                 led3_off;
             }

Which produces:

  38:   b0 12 00 00     call    #0x0000         ;; call to all_led_on()
  3c:   45 4b           mov.b   r11,    r5      
  3e:   75 50 80 ff     add.b   #-128,  r5      ;;  WTF? 1
  42:   46 8b           sub.b   r11,    r6      ;;    ...
  44:   47 8b           sub.b   r11,    r7      ;;      ...
  46:   48 8b           sub.b   r11,    r8      ;;        ...
  48:   49 8b           sub.b   r11,    r9      ;;         ...
  4a:   7b 53           add.b   #-1,    r11     ;r3 As==11   ;; makes sense if 
pwm1 is in r11.
  4c:   02 20           jnz     $+6    
  4e:   b0 12 00 00     call    #0x0000         ;; call to led1_off
  52:   4f 46           mov.b   r6,     r15
  54:   4f 5b           add.b   r11,    r15     ;;  WTF? 2?  It thinks r11 has 
-1?  How?  Why?     
  56:   02 20           jnz     $+6
  58:   b0 12 00 00     call    #0x0000         ;; call to led2_off
  5c:   4f 47           mov.b   r7,     r15     
  5e:   4f 5b           add.b   r11,    r15     
  60:   02 20           jnz     $+6
  62:   b0 12 00 00     call    #0x0000         ;; call to led3_off

The unoptimized code looks fine, if … unoptimized (size/speed wise, anyway):

  5a:   b0 12 00 00     call    #0x0000         ;; call to all_led_on()
  5e:   f4 40 80 ff     mov.b   #-128,  -4(r4)
  62:   fc ff 
  64:   25 3c           jmp     $+76
  66:   f4 53 f6 ff     add.b   #-1,    -10(r4)   ;; add to stack variable
  6a:   c4 93 f6 ff     tst.b   -10(r4) ;0xfff6(r4)  ;; check for zero 
(unneeded.)
  6e:   02 20           jnz     $+6
  70:   b0 12 00 00     call    #0x0000 
  74:   f4 53 f7 ff     add.b   #-1,    -9(r4)
  78:   c4 93 f7 ff     tst.b   -9(r4)
  7c:   02 20           jnz     $+6
  7e:   b0 12 00 00     call    #0x0000 
  82:   f4 53 f8 ff     add.b   #-1,    -8(r4)
  86:   c4 93 f8 ff     tst.b   -8(r4)        
  8a:   02 20           jnz     $+6           
  8c:   b0 12 00 00     call    #0x0000 

I'd expect to see something like:
        call all_led_on
        mov.b 128, r5           ;; loop counter
        add.b #-1, r6           ;; pwm1 in register
        jnz  $+6
        call led1_off
        add.b #-1, r7           ;; pwm2 in register
        jnz  $+6
        call led2_off
        ;; etc


------------------------------------------------------------------------------
Own the Future-Intel® Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game 
on Steam. $5K grand prize plus 10 genre and skill prizes. 
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to