[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