Если вы хотите использовать insne SSE2 double
, вы должны скомпилировать с gcc -mfpmath=sse -msse2
.
Опция -msse2
сама по себе позволит вам использовать встроенные функции SSE2, -mfpmath=sse
вызовет GCCдля создания insne SSE2 для всех операций FP.
Также обратите внимание, что векторизация включена на -O3
.
Преимущества векторизованного insn SSE2-4 очевидны, процессоры Sandy Bridge могут выполнять дотри 256-битных операции за цикл (например, 4 двойных умножения, 4 двойных сложения и некоторое перемешивание сверху)
Однако руководство по оптимизации Intel рекомендует использовать SSE даже для скалярных операций, по причинам, включающим модель с единым регистроми более короткие задержки по сравнению с устаревшими x87 insns.
РЕДАКТИРОВАТЬ:
Забыл упомянуть, что для 32-битного кода вы также можете добавить -msseregparm
, что будетзаставить аргументы FP и возвращаемые значения передаваться через регистры SSE.По умолчанию они передаются в памяти и в %st0
соответственно.Естественно, это меняет ABI, поэтому все взаимодействующие модули должны быть скомпилированы с этой опцией.