| Previous | Next |
| STATUS_FLOAT_OVERFLOW | STATUS_FLOAT_UNDERFLOW |
STATUS_FLOAT_STACK_CHECK
The x87 floating-point register stack is inconsistent
This status concerns the eight-entry x87 floating-point register stack, not the thread’s memory stack. It can occur when x87 instructions push onto a full register stack, pop an empty entry, or use an unexpected stack tag. Hand-written assembly, inline assembly, mismatched calling code, or incorrect exception recovery are typical causes.
Modern compiler-generated SSE/AVX arithmetic does not use the x87 stack in the same way, so first identify the instruction set at the fault. Inspect the x87 status word, TOP field, and tag state before another floating-point instruction changes them. If the fault follows a callback or foreign-language boundary, verify that the callee preserves the floating-point environment and balances every x87 stack operation.
What to inspect
- Disassemble the x87 instruction sequence and count pushes, pops, and exchanges.
- Capture the x87 status word, TOP value, tags, and register contents.
- Check inline assembly and cross-language calling boundaries.
- Do not investigate thread stack reserve unless a separate stack exception exists.
References
- Microsoft Learn: _fpieee_flt
- Microsoft Learn: _control87 and _controlfp
- Intel: Floating-Point Reference Sheet
- Microsoft Windows SDK metadata: ntstatus.h
Looking for a different code? Search another status or error code.