Sean Kelly wrote:
On Apr 20, 2011, at 10:46 AM, JimBob wrote:
"Sean Kelly" <[email protected]> wrote in message
news:[email protected]...
On Apr 20, 2011, at 5:06 AM, Don wrote:
Sean Kelly wrote:
On Apr 16, 2011, at 1:02 PM, Robert Jacques wrote:
On Sat, 16 Apr 2011 15:32:12 -0400, Walter Bright
<[email protected]> wrote:
The dmd startup code (actually the C startup code) does an fninit. I
never thought about new thread starts. So, yeah, druntime should do an
fninit on thread creation.
The documentation I've found on fninit seems to indicate it defaults to
64-bit precision, which means that by default we aren't seeing the
benefit of D's reals. I'd much prefer 80-bit precision by default.
There is no option to set "80-bit precision" via the FPU control word.
??? Yes there is.
enum PrecisionControl : short {
PRECISION80 = 0x300,
PRECISION64 = 0x200,
PRECISION32 = 0x000
};
So has Intel deprecated 80-bit FPU support? Why do the docs for this say
that 64-bit
is the highest precision? And more importantly, does this mean that we
should be setting
the PC field explicitly instead of relying on fninit? The docs say that
fninit initializes to
64-bit precision. Or is that inaccurate as well?=
You misread the docs, it's talking about precision which is just the size of
the mantisa, not the actual full size of the floating point data. IE...
80 float = 64 bit precision
64 float = 53 bit precision
32 float = 24 bit precision
Oops, you're right. So to summarize: fninit does what we want because it sets
64-bit precision, which is effectively 80-bit mode. Is this correct?
Yes.