tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

fenv for softfloat

hi folks,

the patch at the URL below fixes the libm fenv.h interfaces on
softfloat platforms.  (currently on sh3, m68k, mips, and powerpc
the softfloat fenv implementation is actually hardfloat.)

here's what I have for a commit message:

provide a common softfloat fenv implemenation and use it for softfloat builds.
restore ABI compatibility with previous releases for ieeefp.h on sh3.
add namespace.h protection for all the fenv interfaces.
use MKSOFTFLOAT on sh3 instead of assuming softfloat.
standardize on comparing MKSOFTFLOAT with "no".
remove the arm-specific softfloat fenv code (which also had several bugs).
fix logic errors in the arm hardfloat feraiseexcept() and feupdateenv().

does anyone see any problem with this patch?
if not I'll commit in a few days.

I have tested this patch on quite a few combinations of platforms,
though I skipped some where we don't have a softfloat build:

fenv softfloat
arm		good
arm libc_vfp	bad - lib doesn't use hardware round/except state
m68k		? - is linked before
mips		good
powerpc		good
sh3		good

fenv softfloat - old test binary, new libs

arm		good
arm libc_vfp	bad - lib doesn't use hardware round/except state
m68k		? - is linked before
mips		? - no old bins
powerpc		? - no old bins
sh3		good

fenv hardfloat
amd64		good
arm		good
i386		good
m68k		good
mips		good
powerpc		good

fenv hardfloat - old test binary, new libs

arm		good
m68k		good
mips		good
powerpc		? - t_fpsetmask failures, same with old libs

finally, here are some more FP problems that this patch does not fix:

 - m68k softfloat doesn't build because of the dueling softfloat
   implementations in libgcc vs. libc.

 - the arm (which provides hardfloat implementations of functions
   using the softfloat ABI) needs to replace the functions which access
   the rounding and exception state with ones that access the hardware version
   of those.  it looks like the mips has the same issue.

 - the softfloat rounding and exception state is global to the process
   rather than being per-thread as it should be.

I plan to get back to these eventually, but I wanted to be sure to get
my existing changes in for netbsd-8.


Home | Main Index | Thread Index | Old Index