|Important||This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer|
/QIPF_fr32 (Do Not Use Upper 96 Floating Point Registers)
Tells the compiler to only use the lower 32 floating-point registers and to not use the upper 96 floating-point registers when compiling for Itanium.
/QIPF_fr32 is only available in compilers targeting Itanium. This compiler option is not available in the compilers targeting x64 or x86.
When writing a device driver, which executes in kernel mode context, compiling with /QIPF_fr32 is strongly recommended. If an application switches out of kernel mode and one of its upper 96 registers is not intact, as could happen if an interrupt occurred, the application will fail when it switches back to user mode. Consider the following scenario:
An application runs in user mode, when an interrupt occurs.
Control passes to the kernel, and the upper 96 floating-point registers are not saved.
The kernel calls a driver that was compiled without /QIPF_fr32.
The driver destroys one of the upper floating-point registers
Driver returns to kernel mode.
Kernel returns from interrupt, and one of the application's upper floating-point registers is destroyed.
In addition to the correctness that it gives applications that switch to user mode from kernel mode, /QIPF_fr32 also enhances the performance of context changes in user mode (upper 96 floating-point registers do not have to be saved or reloaded).
To set this compiler option in the Visual Studio development environment
/QIPF_fr32 is not available in the Visual Studio development environment.
To set this compiler option programmatically