Какая альтернатива FPU на x86-64?

Код, производящий вычисления над числами с плавающей точкой использует разные расширения на x86 и x86-64 системах. На x86 это FPU, а на x86-64?


Ответы (1 шт):

Автор решения: Fat-Zer

Они одинаковые.
В обоих режимах можно использовать два набора инструкций: x87 (то что в вопросе, видимо, названо FPU) и SSE(в том числе последующие расширения: SSE2/3/4 и т.д.). Конечно, при условии, что конкретный процессор процессор поддерживает данные расширения: x87 встроен во всё начиная, с i486, а SSE[2] во всех ЦП общего назначения со времён Pentium 4.

Для x86_64 есть мелкие отличия, но сути они не меняют. Например, для SSE в длинном режиме доступны 16 регистров (%xmm0-%xmm15), а не 8.

Также некоторые компиляторы (gcc в частности) для сборки под x86-цель обычно по умолчанию используют арифметику основанную на x87, а при сборке под x86_64SSE.* Подробности см. в документации gcc к опциям -mfpmath и -ffast-math. Большинство других современных компиляторов по умолчанию обычно используют SSE-арифметику и для x86-целей.


* Cпасибо @Eugene Ryabtsev за уточнение
→ Ссылка