> >   __fpscr_values[0] &= off;
> >   __fpscr_values[0] |= on;
> >   __fpscr_values[1] &= off;
> >   __fpscr_values[1] |= on;
> 
>   Ok, I'll bite.  Why are there two of them?!

Well, this is the real reason why we need an API and not just a simple
builtin.  GCC uses that table of values to quickly switch the FPU
modes between single and double precision.  However, it discards all
the other fpscr bits at that time, unless the table is also updated.

So, if you want to set a specific bit in fpscr, you have to not only
set the actual $fpscr, but also all the entries in that table -
however many there may be at the moment.  There are currently two.

The fact that we have to update a table defined and used by GCC is my
main reason for wanting to add a well-defined APi to *libgcc* to
interface with those.  Higher-level control (such as in <fenv.h>)
would be added on top of this API, to ease compatibility between
versions.

Reply via email to