Re: floating point optimization

al davis <[email protected]>
Newsgroups gmane.comp.gnu.gnucap.devel
Message-ID <[email protected]>
In case anyone wants to try it, here is the source for the 
plug-in that forces 64 bit math on an Intel processor:
============================
// "ieee-math.cc"
/*
  This puts the X86 FPU in 64-bit precision mode.  The default
  under Linux is to use 80-bit mode, which produces subtle
  differences from FreeBSD and other systems, eg,
  (int)(1000*atof("0.3")) is 300 in 64-bit mode, 299 in 80-bit
  mode.
*/

#include <fpu_control.h>

class IEEE_MATH {
  fpu_control_t old_cw;
public:
  IEEE_MATH() {
    fpu_control_t cw;
    _FPU_GETCW(cw);
    old_cw = cw;
    cw &= ~_FPU_EXTENDED;
    cw |= _FPU_DOUBLE;
    _FPU_SETCW(cw);
  }
  ~IEEE_MATH() {
    _FPU_SETCW(old_cw);
  }    
};

static IEEE_MATH x;
============================

To use it: 
Compile with "-fPIC -shared" options:
"g++ -PIC -shared ieee-math.cc -o ieee-math.so"

Run gnucap, when inside load it:
gnucap> attach ./ieee-math.so

Note that the file name must have a slash in it.  It can be a 
local or full path name.  Without a slash it will use 
LD_LIBRARY_PATH to find it.

If you want it to always load, make a file ".gnucaprc" in your 
home directory, and put the attach command (with a dot) there.

You can revert to full 80 bit precision by detaching it:
gnucap> detach  ./ieee-math.so

Question for all:
On an intel processor, what should be the default:
( ) 64 bit IEEE compliant math
( ) mixed 64 and 80 bit math
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.