cvs commit: src/lib/libc/amd64 _fpmath.h src/lib/libc/i386 _fpmath.h src/lib/libc/ia64 _fpmath.h

Bruce Evans bde at FreeBSD.org
Thu Jan 17 08:39:07 PST 2008


bde         2008-01-17 16:39:07 UTC

  FreeBSD src repository

  Modified files:
    lib/libc/amd64       _fpmath.h 
    lib/libc/i386        _fpmath.h 
    lib/libc/ia64        _fpmath.h 
  Log:
  Add an alternative view of the bits in an 80-bit long double (64+16
  instead of 32+32+15+1) on all arches that have such long doubles (amd64,
  ia64 and i386).  Large objects should be be accessed in large units,
  and the 32+32+15+1[+padding] decomposition asks for almost the opposite
  of that, sometimes resulting in very slow accesses depending on how
  well the compiler ignores what we ask for and converts to the best
  units for the given machine.  E.g., on Athlons, there is a 10-20 cycle
  penalty for accessing the middle 32-bit word immediately after an
  80-bit store.
  
  Whether actually using the alternative view is better is very machine-
  dependent.  A 32+32+16 view is probably best with old 32-bit systems
  and gcc through 4.2.1.  The compiler should mostly avoid the view and
  generate best accesses, but gcc-4.2.1 is far from doing that.  I think
  64+16 is best for now.  Similarly for doubles -- they should be using
  64+0 especially on 64-bit machines, but fdlibm uses 32+32 extensively
  for them.  Fortunately, in 64-bit mode for doubles, gcc already ignores
  the 32+32-bit view and generates best accesses in many cases.
  
  Revision  Changes    Path
  1.7       +6 -1      src/lib/libc/amd64/_fpmath.h
  1.6       +6 -1      src/lib/libc/i386/_fpmath.h
  1.7       +12 -1     src/lib/libc/ia64/_fpmath.h


More information about the cvs-src mailing list