Как выровнять стек по 32 байтам Граница в GCC?

Я использую сборку 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 не поддерживается для этой цели. У меня нет идей.

8
задан 眠りネロク 7 November 2017 в 14:53
поделиться