[fpc-devel] Extended type

Hans-Peter Diettrich DrDiettrich1 at aol.com
Tue Apr 19 13:15:20 CEST 2011


Nikolai Zhubr schrieb:

>>>> Originally MS spread info it wouldn't work at all under Windows, but
>>>> that proved to be false,
>>>> the FPU works technically. Now MS just states it is unsupported.
>>>
>>> And deprecated:
>>> http://msdn.microsoft.com/en-us/library/ee418798(VS.85).aspx#Porting_to_64bit 
>>>
>>>
>>
>> Thanks. I always knew that Windows is not an OS for serious work, but I
>> never heard that from Microsoft so clearly :-(
> 
> Not being an ms fan whatsoever, but you all seem to have missed the 
> technical point here.
> 
> Because x87 (and also MMX in some sense) is a coprocessor (and has its 
> own register space) its full state has to be saved/restored (by an OS) 
> between different running processes in case any process might use 
> fpu/mmx.

The same applies to the XMM/YMM registers. While dropping MMX support is 
acceptable, in favor of the new vector arithmetic instruction set, I see 
no point in dropping 80 bit reals before a new 128 bit arithmetic 
becomes available.

> Clearly this may become rather inefficient performance-wise 
> (because, well, an application might just want to use 2 fpu registers at 
> a time, and OS will still have to store the whole bunch all the time...) 
> Now, with the introduction of 64-bit processors IIRC AMD took care of 
> this problem by providing some means to execute floating-point 
> operations without the need for traditional FPU register space, thus 
> allowing to avoid the need to save/restore FPU state. IIRC these are 
> some _new_ opcodes, unavailable on earlier CPUs.

When AMD aliased the FPU and MMX registers, I don't understand why they 
*added* new XMM registers, instead of extending the already existing MMX 
registers - just for fast switching. But it is as it is...

> So, for performance reasons, and because 64-bit applications (are now 
> supposed to be) able to do all floating-point without touching the 
> traditional FPU, ms (supposedly) decided to just not preserve FPU/MMX 
> state between 64-bit processes. Thats all. IMHO is makes some sense 
> actually, though it would be much nicer if there was some option to 
> select this deliberately (say at boot time or whatever).

At least an application should have a chance to specify, which register 
sets have to be saved on an task switch. Unless stated otherwise by MS, 
the entire state should be saved, as long as x87/MMX is only deprecated, 
not dropped. Any official information on this issue?

DoDi




More information about the fpc-devel mailing list