> > __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.