User Manual
(the manual describes build 1002xx)
Hex-Rays Decompiler - Floating point support
The current release of the decompiler supports floating point instructions.
While everything works automatically, the following points are worth noting:
- IDA v5.5 or higher is required for floating point support. Earlier versions
do not have the required functionality and
the decompiler represents fpu instructions using inline assembler statements.
- The decompiler knows about all floating point types, including: float, double, long double,
and _TBYTE. We introduced _TBYTE because
sizeof(long double) is often different from sizeof(tbyte).
While the size of long double can be configured
(it is implicitly set to a reasonable value when the compiler is set), the size
of tbyte is always equal to 10 bytes.
- 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.
- The decompiler performs fpu stack analysis, which is similar to the
simplex method
performed by IDA Pro. 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.
- The decompiler ignores all manipulations with the floating point control word.
In practice this means that it may miss an unusual rounding mode. We will address
this issue in the future, as soon as we find a robust method to handle it.
- SSE floating point instructions are represented by
intrinsic functions. Scalar SSE instructions are however directly mapped to
floating point operations in pseudocode.
- 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