[GHC] #7289: Mingw FPU init not Windows compatible.

GHC ghc-devs at haskell.org
Wed Dec 30 14:01:18 UTC 2015


#7289: Mingw FPU init not Windows compatible.
-----------------------------------+--------------------------------
        Reporter:  Lennart         |                Owner:
            Type:  bug             |               Status:  upstream
        Priority:  normal          |            Milestone:  8.2.1
       Component:  Runtime System  |              Version:  7.2.2
      Resolution:                  |             Keywords:
Operating System:  Windows         |         Architecture:  x86
 Type of failure:  None/Unknown    |            Test Case:
      Blocked By:                  |             Blocking:
 Related Tickets:                  |  Differential Rev(s):
       Wiki Page:                  |
-----------------------------------+--------------------------------
Changes (by bgamari):

 * status:  new => upstream
 * milestone:  8.0.1 => 8.2.1


Old description:

> Mingw initializes the FPU top 80 bit precision instead of MSVC's 53 bits
> (which is the standard).  I suggest ghc linking on Windows should be
> changed to that it uses 53 bits instead.  This will make programs more
> Windows compatible (and possibly faster).
>
> Here's a comment from Mingw's Float.h:
>
> /*
> MSVCRT.dll _fpreset initializes the control register to 0x27f,
> the status register to zero and the tag word to 0FFFFh.
> This differs from asm instruction finit/fninit which set control
> word to 0x37f (64 bit mantissa precison rather than 53 bit).
> By default, the mingw version of _fpreset sets fp control as
> per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when
> building your application.
> */

New description:

 Mingw initializes the FPU top 80 bit precision instead of MSVC's 53 bits
 (which is the standard).  I suggest ghc linking on Windows should be
 changed to that it uses 53 bits instead.  This will make programs more
 Windows compatible (and possibly faster).

 Here's a comment from Mingw's Float.h:

 {{{#!c
 /*
 MSVCRT.dll _fpreset initializes the control register to 0x27f,
 the status register to zero and the tag word to 0FFFFh.
 This differs from asm instruction finit/fninit which set control
 word to 0x37f (64 bit mantissa precison rather than 53 bit).
 By default, the mingw version of _fpreset sets fp control as
 per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when
 building your application.
 */
 }}}

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7289#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list