Отключение предикации в gcc / g ++ - PullRequest
4 голосов
/ 08 марта 2011

Мне было интересно, есть ли способ отключить предикацию в gcc / g ++.Когда я получаю объектный дамп своего кода, я не хочу, чтобы в нем были какие-либо инструкции CMOV, CCMP и т. Д.

Я прошел страницу руководства gcc без какого-либо успеха.Пока что единственный путь вперед - это взломать сам gcc.Использование gcc 4.3 на машине RHEL x86_64.Есть идеи?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

Я сталкивался с этой проблемой раньше, и в моем случае решение было отключить if-преобразование.Вы можете использовать флаги компиляции:

-fno-if-conversion -fno-if-conversion2 
2 голосов
/ 08 марта 2011

Вы можете попробовать нацелить предыдущий набор команд x86, в котором не было этих инструкций?

http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Target-Options.html

gcc -b i386 main.c

(я не пробовал это)

1 голос
/ 15 июля 2018

Попробуйте следующие аргументы в командной строке gcc:

-fno-if-conversion -fno-if-conversion2 -fno-tree-loop-if-convert

Это сработало для меня, и уловка была последним аргументом, который необходим в некоторых случаях, когда ifs преобразуются в условные перемещения внутри циклов, и эти два случая не охватываются двумя другими аргументами.

Я обнаружил это на основе этого разговора из списков рассылки gcc:

--- Комментарий № 1 от Эндрю Пински --- Я не думаю, что -fno-if-translation и -fno-if-translation2 разработаны отключить все предикатные инструкции.

Примечание. -O3 включает -ftree-loop-if-convert, что также вызывает производство предикатных инструкций (предикатных ходов).

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