Какая альтернатива FPU на x86-64?
Код, производящий вычисления над числами с плавающей точкой использует разные расширения на x86 и x86-64 системах. На x86 это FPU, а на x86-64?
Ответы (1 шт):
Они одинаковые.
В обоих режимах можно использовать два набора инструкций: x87 (то что в вопросе, видимо, названо FPU) и SSE(в том числе последующие расширения: SSE2/3/4 и т.д.). Конечно, при условии, что конкретный процессор процессор поддерживает данные расширения: x87 встроен во всё начиная, с i486, а SSE[2] во всех ЦП общего назначения со времён Pentium 4.
Для x86_64 есть мелкие отличия, но сути они не меняют. Например, для SSE в длинном режиме доступны 16 регистров (%xmm0-%xmm15), а не 8.
Также некоторые компиляторы (gcc в частности) для сборки под x86-цель обычно по умолчанию используют арифметику основанную на x87, а при сборке под x86_64 — SSE.* Подробности см. в документации gcc к опциям -mfpmath и -ffast-math. Большинство других современных компиляторов по умолчанию обычно используют SSE-арифметику и для x86-целей.
* Cпасибо @Eugene Ryabtsev за уточнение