On 1/13/2022 12:48 AM, Nikolay Nikolov via fpc-devel wrote:
The i386 compiler uses the x87 FPU for floating point. The x87
supports the 32-bit single precision floating point type, the 64-bit
double precision floating point type and the 80-bit extended precision
extended floating point type. So, the best precision you get is 80-bit.
The x86_64 compiler uses SSE2 instructions for floating point.
However, the SSE2 instructions only support 32-bit and 64-bit float types.
X86_64 processors still have the FPU, and it still functions in 64-bit
mode, so the x86_64 compiler can still use the FPU for the 80-bit
extended type. In fact, this is why the linux x86_64 compiler works
without limitations. However, Windows doesn't guarantee future
compatibility if the FPU is used.
https://docs.microsoft.com/en-us/windows/win32/dxtecharts/sixty-four-bit-programming-for-game-developers?redirectedfrom=MSDN#Porting_to_64bit
Quote:
"The x87, MMX, and 3DNow! instruction sets are deprecated in 64-bit
modes. The instructions sets are still present for backward
compatibility for 32-bit mode; however, to avoid compatibility issues
in the future, their use in current and future projects is discouraged."
A logical question that follows is how can they break it in future
Windows versions, if it's supported by the CPU. The answer is, since
Windows is a multitasking operating system, they might stop saving the
FPU registers when switching between 64-bit tasks. So, the only
guarantee that x87 FPU code will continue to work in future Windows
versions is if it's in a 32-bit process.
It kinda sucks, but it is what it is. Microsoft have decided that the
FPU is considered "legacy" and "deprecated". However, the replacement
(SSE2) doesn't have all the capabilities that the FPU has, namely it
doesn't have 80-bit extended precision. I guess, you can complain to
Microsoft about that and not to Free Pascal developers, but I doubt
that they will care. :)
Nikolay
Thank you, a very well written explanation. Now it makes sense. I
appreciate your time and effort explaning the issue.
I wasn't aware of the whole MS not supporting the FPU thing, that was
the missing puzzle piece.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel