Соглашение о вызовах x86-64 System V ABI возвращает float
и double
в регистрах XMM.
SSE2 является базовой для x86-64.64-битный код может принять это без проверки, поэтому стандартное соглашение о вызовах использует его.Вам никогда не нужно отключать SSE2 для совместимости с аппаратным обеспечением.
Для компиляции без SSE для x86-64 вам понадобится компилятор, который может использовать альтернативное соглашение о вызовах для плавающей запятой, или вам нужно будет собратьglibc без любых аргументов с плавающей запятой или возвращаемых значений, если это возможно.(Код FP внутри функции в порядке; gcc знает, как вернуться к x87, если SSE недоступен, даже в 64-битном коде.)
Даже тогда не может быть рукописная версия x86-64 asm strcpy
без SSE2 в glibc, только для 32-разрядных x86.Поэтому glibc может не скомпилироваться по этой причине, даже если вы избежали проблемы float
/ double
.И если это произойдет, универсальный C strcpy
будет отстой по производительности по сравнению с SSE2.
Он должен хорошо работать для сборки glibc для 32-битного x86 без SSE .Соглашение о вызовах i386 System V ABI передает аргументы FP в стек и возвращает их в x87 st0
.
SSE - необязательное расширение 32-битной x86;не все 32-битные процессоры имеют его, поэтому наборы инструментов и библиотеки должны поддерживать компиляцию без него.