Я хочу скомпилировать glibc с отключенным sse - PullRequest
0 голосов
/ 20 ноября 2018

Я подумал, что не хочу использовать инструкции SSE в функциях библиотеки libc, таких как strcpy().

, поэтому я попытался выполнить сборку из исходного кода с параметром -mno-sse.Тем не менее, я получил сообщение об ошибке, подобное следующему, я не смог ее сделать.

 ../stdlib/bits/stdlib-float.h: In function ‘atof’:
 ../stdlib/bits/stdlib-float.h:26:1: error: SSE register return with SSE disabled

Кто-нибудь знает причину?Кто-нибудь может решить это?

1 Ответ

0 голосов
/ 20 ноября 2018

Соглашение о вызовах 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-битные процессоры имеют его, поэтому наборы инструментов и библиотеки должны поддерживать компиляцию без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...