Я использую сборку MinGW64 на основе GCC 4.6.1 для 64-битной цели Windows. Я играюсь с новыми инструкциями Intel AVX. Мои аргументы командной строки: -march = corei7-avx -mtune = corei7-avx -mavx
.
Но я начал сталкиваться с ошибками сегментации при размещении локальных переменных в стеке. GCC использует выровненные перемещения VMOVAPS
и VMOVAPD
для перемещения __ m256
и __ m256d
вокруг, и эти инструкции требуют 32-байтового выравнивания. Однако стек для 64-битной Windows имеет только 16-байтовое выравнивание.
Как я могу изменить выравнивание стека GCC на 32 байта?
Я пробовал использовать -mstackrealign
, но безрезультатно, так как это выравнивается только до 16 байтов. Я не смог заставить работать __ attribute __ ((force_align_arg_pointer))
, он все равно выравнивается по 16 байтам. Мне не удалось найти никаких других параметров компилятора, которые могли бы решить эту проблему. Приветствуется любая помощь.
РЕДАКТИРОВАТЬ: стек для Windows 64bit имеет только 16-байтовое выравнивание.
Как я могу изменить выравнивание стека GCC на 32 байта?
Я пробовал использовать -mstackrealign
, но безрезультатно, так как это выравнивается только до 16 байтов. Я не смог заставить работать __ attribute __ ((force_align_arg_pointer))
, он все равно выравнивается по 16 байтам. Мне не удалось найти никаких других параметров компилятора, которые могли бы решить эту проблему. Приветствуется любая помощь.
РЕДАКТИРОВАТЬ: стек для Windows 64bit имеет только 16-байтовое выравнивание.
Как я могу изменить выравнивание стека GCC на 32 байта?
Я пробовал использовать -mstackrealign
, но безрезультатно, так как это выравнивается только до 16 байтов. Я не смог заставить работать __ attribute __ ((force_align_arg_pointer))
, он все равно выравнивается по 16 байтам. Мне не удалось найти никаких других параметров компилятора, которые могли бы решить эту проблему. Приветствуется любая помощь.
РЕДАКТИРОВАТЬ: Не удалось найти какие-либо другие параметры компилятора, которые могли бы решить эту проблему. Приветствуется любая помощь.
РЕДАКТИРОВАТЬ: Не удалось найти какие-либо другие параметры компилятора, которые могли бы решить эту проблему. Приветствуется любая помощь.
РЕДАКТИРОВАТЬ:
Я пробовал использовать -mpreferred-stack-boundary = 5
, но GCC сообщает, что 5 не поддерживается для этой цели. У меня нет идей.