@User700

Как заставить GCC не использовать SSE-инструкции с выравниванием для операндов в стеке?

При использовании компилятора GCC 5.1.0 (32bits Windows, компилятор TDM GCC) для компиляции dll-библиотеки при включенных SSE-оптимизациях происходит ошибка SEGFAULT (обращение к 0xffffffff). Выяснил, что ошибка связана с инструкциями типа:
movaps %xmm0,0x50(%esp)
movaps %xmm0,-0x10(%ebp)
Т.к. при этом параметры стека, и следовательно esp, ebp не выровнены по границе 16 байт (вероятно при вызове из основного модуля), то происходит ошибка. Нужно было бы использовать movups для невыровненных данных. Как этого можно достичь? В чем может быть проблема? Есть ли какие-то настройки для использования только movups вместо movaps; возможно есть и другие инструкции, обращающиеся к невыровненным данным. Включение SSE-оптимизаций при линковке основного модуля не дало эффектов.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Логичнее было бы воспользоваться опцией -mstackrealign чтобы выравнивать стек на входе в функцию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ООО "Тераклауд Рус" Санкт-Петербург
от 110 000 ₽
Wärtsilä Digital Technologies Санкт-Петербург
До 180 000 ₽
Eltex Новосибирск
от 50 000 ₽
06 авг. 2020, в 13:53
8000 руб./за проект
06 авг. 2020, в 13:52
700 руб./за проект