PPC float context only 4 Bytes per register?
Till Straumann
strauman at SLAC.Stanford.EDU
Mon Nov 12 22:22:31 UTC 2001
To quote from a lesson out of my first English textbook:
"What a shock for Mrs. Dent..."
I had a look at the code in question and I must agree. This simple
test program confirms our suspicions:
void fpctxt_tst(void *parm)
{
volatile double val;
register double tst;
rtems_interrupt_level l;
int i,j;
char mval[50];
rtems_interrupt_disable(l);
tst = val = sqrt(2.);
rtems_interrupt_enable(l);
j=0;
do {
if (j) rtems_task_wake_after(2);
j++;
rtems_interrupt_disable(l);
i = (tst == val);
rtems_interrupt_enable(l);
} while( i );
rtems_interrupt_disable(l);
sprintf(mval,"%.20g",val);
rtems_interrupt_enable(l);
printf("FP register mismatch in %ith loop, should be %s but is
%.20g\n",j,mval,tst);
}
I must admit that I'm quite a bit shocked -
thanks to Thomas for pointing this out. How come that this
has been known for a while (see Sergej's message) but not fixed?
IMO, this deserved at least a 'known-issues' entry or similar.
Luckily, it should be easy - is somebody working on this already?
-- Till
Thomas Doerfler wrote:
> Hi,
>
> I have just had some looks into the
> libcpu/powerpc/new_exception_processing/cpu_asm.S code to
> save/restore a floating-point context. In there it seems that
> for every context switch all the float registers are saved
> into 4 byte locations (in "single" precision format).
>
> From my point of view this results in rounding errors for
> "double precision" (64 bit) float arithmetics. So if I have
> written some code using "double precision" variables I will
> get roundoff errors, if there has been a context switch during
> calculations. (I did not try that out, but it seems logical to
> me...)
>
> Did I miss something there?
>
> Any comments welcome...
>
> Thomas Doerfler.
> --------------------------------------------
> IMD Ingenieurbuero fuer Microcomputertechnik
> Thomas Doerfler Herbststrasse 8
> D-82178 Puchheim Germany
> email: Thomas.Doerfler at imd-systems.de
> PGP public key available at: http://www.imd-
> systems.de/pgp_key.htm
More information about the users
mailing list