Hi Dimitry,

run the software below and at the end you get x=1 (should be 0!!)

It seems that gcc uses the flags of sub for the next if(); but it should do
a additional cmp !! (first it is a unsigned operation, then a signed)

msp430-gcc main.c -mmcu=msp430x149 -g -O2 -ffunction-sections 
-Wl,--gc-sections,-uInterruptVectors -o main.elf
(gcc from the download, maybe you have already fixed that bug??)

#include <stdlib.h>

int x=0;

func1(uint a, uint b)
{
  uint ud;
  int  d;

  ud = a-b;
  d = ud;
  if ( d<0 )
    x|=1;
}

func2(uint a, uint b)
{
  volatile uint ud;
  volatile int  d;

  ud = a-b;
  d = ud;
  if ( d<0 )
    x|=2;
}

main()
{
 func1(32768,20000);
 func2(32768,20000);
}

        Matthias

Reply via email to