[PD-dev] amd64: rsqrt~

Thomas Grill gr at grrrr.org
Sun Sep 11 00:59:57 CEST 2005


Hi all,

>the current implementation of rsqrt~ is most likely broken.
>i was sshing to carmen's amd64 machine ... looked like that filling the
>lookup table isn't really working ...
>
>static void init_rsqrt(void)
>{
>    int i;
>    for (i = 0; i < DUMTAB1SIZE; i++)
>    {
>        float f;
>        long l = (i ? (i == DUMTAB1SIZE-1 ? DUMTAB1SIZE-2 : i) : 1)<< 23;
>        *(long *)(&f) = l;
>        rsqrt_exptab[i] = 1./sqrt(f);   
>    }
>    for (i = 0; i < DUMTAB2SIZE; i++)
>    {
>        float f = 1 + (1./DUMTAB2SIZE) * i;
>        rsqrt_mantissatab[i] = 1./sqrt(f);      
>    }
>}
>
>couldn't really look into it, but i guess, the wild cast in
>        *(long *)(&f) = l;
>might be a problem on th x86_64 architecture ...
>
>  
>
i don't have physical access to a 64-bit machine bit it should be no 
problem replacing long by int which is 32 bit in any case (i don't think 
there are any 16 bit platforms left, are they?!), or by some other 
32-bit signed integer type, like __int32 under msvc.

best greetings,
Thomas





More information about the Pd-dev mailing list