At first I thought that the following issue is actually not a bug, but a result of a discrepancy with an outdated information in the following MSDN article:
But then I have found that compiler generates incorrect code in some cases.
1). "By default, the compiler uses the coprocessor's 80-bit registers to hold the intermediate results of floating-point calculations. "
2). "Expression evaluation will follow the C99 FLT_EVAL_METHOD=2, with one exception. When programming for x86 processors, because the FPU is set to 53-bit precision, this will be considered long double precision."
The first statement is not true. By default, the compiler uses the XMM registers instead of the 80-bit FPU registers. This doesn't correspond to the first statement.
Sometimes the compiler generates code that uses just 32-bit parts of the XMM registers to hold the intermediate results instead of the 64-bit ones (in the case of using float data type). This doesn't correspond to the first and the second statement. I have attached an example of such code.
Excuse me for any inconvenience if this is not a real bug.