cvs commit: src/lib/msun/i387 fenv.c fenv.h

David Schultz das at FreeBSD.org
Thu Mar 17 14:21:46 PST 2005


das         2005-03-17 22:21:46 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/i387        fenv.c fenv.h 
  Log:
  Make the fenv.h routines work for programs that use SSE for
  floating-point arithmetic on i386.  Now I'm going to make excuses
  for why this code is kinda scary:
  
  - To avoid breaking the ABI with 5.3-RELEASE, we can't change
    sizeof(fenv_t).  I stuck the saved mxcsr in some discontiguous
    reserved bits in the existing structure.
  
  - Attempting to access the mxcsr on older processors results
    in an illegal instruction exception, so support for SSE must
    be detected at runtime.  (The extra baggage is optimized away
    if either the application or libm is compiled with -msse{,2}.)
  
  I didn't run tests to ensure that this doesn't SIGILL on older 486's
  lacking the cpuid instruction or on other processors lacking SSE.
  Results from running the fenv regression test on these processors
  would be appreciated.  (You'll need to compile the test with
  -DNO_STRICT_DFL_ENV.)  If you have an 80386, or if your processor
  supports SSE but the kernel didn't enable it, then you're probably out
  of luck.
  
  Also, I un-inlined some of the functions that grew larger as a result
  of this change, moving them from fenv.h to fenv.c.
  
  Revision  Changes    Path
  1.2       +176 -4    src/lib/msun/i387/fenv.c
  1.4       +86 -81    src/lib/msun/i387/fenv.h


More information about the cvs-all mailing list