Setting the FPU control word?
    Bill Baxter 
    dnewsgroup at billbaxter.com
       
    Mon Mar 10 18:25:35 PDT 2008
    
    
  
Jarrett Billingsley wrote:
> "Bill Baxter" <dnewsgroup at billbaxter.com> wrote in message 
> news:fr3k2f$30b5$1 at digitalmars.com...
>> Anyone know how to translate these instructions to D? (specifically 
>> DMD/Win flavor of D, but GDC/Win also appreciated if different):
>>
>>    http://www.cs.cmu.edu/~quake/robust.pc.html
>>
>> --bb
> 
> Would std.c.fenv (or tango.stdc.fenv, same module) be of any use here? 
Ah, fsetprec(FE_DOUBLE) does indeed seem to be intended to be the thing.
Except, it doesn't work.  The asm fldcw thing does seem to work though.
----
module fpctrl;
import std.c.fenv;
import std.stdio;
enum FPPrecision : short
{
     Single = 0x0000,
     Double = 0x0200,
     Real = 0x0300,
     Mask = 0x0300,
}
void setFPControlWord(FPPrecision precision)
{
     FPPrecision oldcw;
     asm
     {
         fstcw oldcw;
         fwait;
         fldcw precision;
     }
     writefln("oldcw was: 0x%x", oldcw);
}
void main()
{
     fesetround(FE_FLTPREC); // should set ctrl word to 0x_2__
     setFPControlWord(FPPrecision.Double); // prints 0x_3__, the default
}
--bb
    
    
More information about the Digitalmars-d-learn
mailing list