For days I'm fighting against a weird bug.
My Haskell code calls into a C function residing in a DLL (I'm on Windows, the DLL is generated using Visual Studio). This C function computes a floating point expression. However, the floating point result is incorrect.
I think I found the source of the problem: the C code expects that all the Intel's x86's floating point register tag bits are set to 1, but it seems the Haskell code does not preserve that.
If I manually clear these tags bits, my code works fine.
Is this something other people encountered as well? I'm trying to make a very simple test case to reproduce the behavior...
I'm not sure if this is a visual C compiler bug, GHC bug, or something I'm doing wrong...
Is it possible to annotate a foreign imported C function to tell the Haskell code generator the functioin is using floating point registers somehow?