This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: Problems with port to Hitex HiCO.SH-4 board.
"Gary D. Thomas" <gary.thomas@mind.be> writes:
> On Mon, 2003-07-21 at 11:27, Francois Retief wrote:
>
> > /* construct digits into buffer in reverse order */
> > if( n == 0 ) buf[bpos++] = '0';
> > 8002797a: 00 ea mov #0,r10
> > 8002797c: b8 2b tst r11,r11
> > 8002797e: 2f 8f bf.s 800279e0 <_diag_write_long_num+0xa0>
> > 80027980: 30 e1 mov #48,r1
> > 80027982: 01 ea mov #1,r10
> > 80027984: 10 2e mov.b r1,@r14
> > else while( n != 0 )
> > {
> > cyg_ucount8 d = n % base;
> > buf[bpos++] = digits[d];
> > n /= base; <<<--- Expecting a DIV opcode here
> > }
> >
>
> Odd. It looks like this whole 'while' loop has vanished! This could
> certainly cause you problems later on. Try commenting out the 'else'
> to make it look like this:
> if( n == 0 ) buf[bpos++] = '0';
> /*else*/ while( n != 0 )
> {
> cyg_ucount8 d = n % base;
> buf[bpos++] = digits[d];
> n /= base;
> }
>
> You might also try changing the optimization level from -O2 to be -O1.
That bf.s 800279e0 jumps beyond the listed end of the function. It
looks like the compiler has moved the whole while loop out of the main
body of the routine. It is in an else clause after all.
--
Nick Garnett eCos Kernel Architect
http://www.ecoscentric.com The eCos and RedBoot experts
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss