This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problem with ARM port and pow() function


Alle 19:08, martedì 23 ottobre 2007, Fau Marz ha scritto:

> Now I'm going to recompile newlib with -O0 option, and I want also to try 
> adding in makefiles CFLAGS_TO_TARGET the --mcpu=arm7tdmi-s -gdwarf-2 
> options. 

I've tried that, too.
No results: the same math functions continue to crash.

Now I can follow the code step-by-step with insight; I've examined the 
tan(22.2) function: the execution is regular up to the __ieee754_rem_pio2 
call inside the tan function. The __ieee754_rem_pio2 function itself is 
regular too, up to when it calls the fabs() function at line 128; fabs() 
seems to be executed regularly, but at the return point it doesn't return 
back to __ieee754_rem_pio2: instead it go to the starting point of the 
floor() function (with no apparently good reasons...).
At this point the execution start to be "not regular": the program flow does 
not follow the "if... else" flow, but it executes every line.
Following every line up to the end of floor(), it flows to another uncalled 
function scalbn(), then copysign(), then _fpadd_parts() and here at line 675 
(a simple sum) the program crashes with a data abort.

The fabs() function, where the problems seems to start, simply has two lines:

double fabs(double x)
{
	__uint32_t high;
	GET_HIGH_WORD(high,x);
	SET_HIGH_WORD(x,high&0x7fffffff);
        return x;
}

Could it be a problem with the endianness of the union structs used by these 
macros? (GET_HIGH_WORD and SET_HIGH_WORD use union structs defined in 
fdlibm.h).

Anyone has an idea?


Thanks,

Fausto

-- 
Faumarz


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]