looks like you're missing a function prototype which says that cpu_demand
is dword.
However, if you then compare 'demand' against zero after this call, the result 
assembly after call instruction does the right thing.

cheers,
~d


On Monday 08 December 2003 19:19, Tjerk Hofmeijer wrote:
> Hello,
>
> I think I have found a bug in mspgcc:
>
> I'm using Windows XP
> I'm using prebuilt installer msp430-toolchain-win32-20030210.exe
> I use a MSP430F149
> I compile every c file with the following rule :
>
> %.o: %.c
>  msp430-gcc -g -mmcu=msp430x149 -O3 -c -I./include -o $@ $<
>
>
> dword is defined as follows:
>       typedef unsigned long int dword;
>
>
> this is the code for  cpu_demand (it doesn't do anything but the
> generated code is correct)
>
> dword cpu_demand(dword t, word taskcount, OS_Task_Specification *spec)
> {
>   word i;
>   dword sum=0,tmp;
>   sum=0x12345678;
>   return (dword) sum;
> }
>
> 000069fe <cpu_demand>:
>     69fe: 3e 40 78 56        mov #22136, r14 ;#0x5678
>     6a02: 3f 40 34 12        mov #4660, r15 ;#0x1234
>     6a06: 30 41              ret
>
>
> demand is a global variable defined as:
>       dword demand;
>
> and its location is:
>       0000066c g     O .bss  00000004 demand
>
>
> What I want is to execute the following line of code:
>       demand=cpu_demand((dword) SHELL_PERIOD,1,(OS_Task_Specification
> *)taskspec);
>
> This results in the following code:
>
>     8768: 3c 40 86 86        mov #-31098,r12 ;#0x8686
>     876c: 1d 43              mov #1, r13 ;subst r3 with As==01
>     876e: 3e 40 20 03        mov #800, r14 ;#0x0320
>     8772: 0f 43              clr r15  ;
>     8774: b0 12 fe 69        call #27134  ;#0x69fe
>     8778: 82 4f 6c 06        mov r15, &0x066c ;
>     877c: 92 42 6c 06 6e 06  mov &0x066c,&0x066e ;src addr 0x066c
>     8782: 92 52 6e 06 6e 06  rla &0x066e  ;
>     8788: 92 72 6e 06 6e 06  subc &0x066e,&0x066e ;src addr 0x066e
>     878e: b2 e3 6e 06        xor #-1, &0x066e ;subst r3 with As==11
>
>
>
> Since the global defined var demand resides at 0x066c
> I expect that with the following prototype:
>
>       extern dword cpu_demand(dword t, word taskcount,
> OS_Task_Specification *spec);
>
> the value of r14 (lsw) is written at 0x066c and the value of r15 (msw)
> at 0x066e
> This however not the case (see code)
>
> If I use the global var demand afterwards the value it contains is
> 0000:msw instead of msw:lsw
>
> Maybe I'm doing something realy stupid....
>
> regards,
> Tjerk Hofmeijer
> t.j.hofmei...@cs.utwente.nl
>
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: IBM Linux Tutorials.
> Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
> Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
> Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users

-- 
/*****************************************************************
     ("`-''-/").___..--''"`-._     (\   Dimmy the Wild     UA1ACZ
      `6_ 6  )   `-.  (     ).`-.__.`)  State Polytechnical Univ.
      (_Y_.)'  ._   )  `._ `. ``-..-'   Radio-Physics Departament
    _..`--'_..-_/  /--'_.' ,'           Saint Petersburg,  Russia
   (il),-''  (li),'  ((!.-'             +7 (812) 5403923, 5585314
 *****************************************************************/


Reply via email to