Floating point support
The x86 decompiler supports floating point instructions. While everything works automatically, the following points are worth noting:
The decompiler knows about all floating point types, including: float, double, long double, and _TBYTE (the extended floating format used by x86 FPU). We introduced _TBYTE because sizeof(long double) is often different from the size of _TBYTE. While sizeof(long double) can be configured in the compiler settings, the size of _TBYTE is always equal to 10 bytes.
The decompiler performs FPU stack analysis, which is similar to the simplex method performed by IDA. If it fails, the decompiler represents FPU instructions using inline assembler statements. In this case the decompiler adds one more prefix column to the disassembly listing, next to the stack pointer values. This column shows the calculated state of the FPU stack and may help to determine where exactly the FPU stack tracing went wrong.
Wrong prototypes of the called functions returning a value on the FPU stack may lead to a failure of the FPU stack analysis, leading to inline assembly as explain in the previous bullet point.
The decompiler ignores all manipulations with the floating point control word. In practice this means that it may miss an unusual rounding mode.
SSE floating point instructions are represented by intrinsic functions. Scalar SSE instructions are however directly mapped to floating point operations in pseudocode.
Casts from integers types to floating point types and vice versa are always displayed in the listing, even if the output has the same meaning without them.
Feel free to report all anomalies and problems with floating point support using the Send database command. This will help us to improve the decompiler and make it more robust. Thank you!
See also: Failures and troubleshooting
Last updated
Was this helpful?