[fpc-devel] I've asked this before, but perhaps I wasn't specific enough that time: what do I *personally*, specifically need to do to ensure that a native Windows 64-bit build winds up on the FPC website for the next release?
Travis Siegel
tsiegel at softcon.com
Thu Jan 13 15:19:40 CET 2022
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.
More information about the fpc-devel
mailing list