Как сгенерировать ассемблерный код с помощью clang в синтаксисе Intel?

Какэтот вопрос показывает, с g ++ я могу сделатьg++ -S -masm=intel test.cpp. Also, with clang, I can do clang++ -S test.cpp, но-masm=intel не поддерживается clang (warning argument unused during compilation: -masm=intel). Как получить синтаксис Intel с помощью Clang?

 Jesse Good12 июн. 2012 г., 05:39
@JerryCoffin: Спасибо, я сгенерировал.bc файл с Clang и затем успешно вывести сборку Intel сllc, Не могли бы вы сделать ответ?
 Jerry Coffin12 июн. 2012 г., 05:45
О, я думаю, это не проблема.

Ответы на вопрос(3)

Решение Вопроса

Это должно заставить clang выдавать ассемблерный код с синтаксисом Intel:

clang++ -S -mllvm --x86-asm-syntax=intel test.cpp

Ты можешь использовать-mllvm <arg> передать в llvm параметры из командной строки clang. К сожалению, эта опция не выглядит хорошо документированной, и, таким образом, я нашел ее, только просматривая списки рассылки llvm.

Какотмечено ниже @thakisбольше не требуется в новых версиях Clang (3.5+), так как теперь он поддерживает-masm=intel синтаксис.

 03 февр. 2016 г., 00:20
@AlexanderCska Я не уверен, что это возможно без ручного исправления. Хотя синтаксис NASM аналогичен Intel, между ними есть некоторые несовместимости.
 04 июл. 2013 г., 10:27
Отличная информация, спасибо!
 06 авг. 2015 г., 18:58
@ saumya-suhagiya Я только что подтвердил, что это все еще работает с clang 3.8.0-svn244195-1 ~ exp1. Команда, показанная выше, сгенерирует файл с именемtest.s, Вы изменяете это выходное местоположение на пользовательское местоположение, используя-o <path> вариант.
 29 янв. 2016 г., 22:55
@dcoles Привет, возможно, не такой умный вопрос. Можно ли скомпилировать и связать код сборки сnasm?
 22 окт. 2013 г., 17:30
llvm.org/bugs/show_bug.cgi?id=17465 просит поддержки для -masm = intel и не только.

Предполагая, что Clang может генерировать нормальные байтовые коды LLVM, вы можете использоватьооо скомпилировать на ассемблере и использовать его--x86-asm-syntax=intel возможность получить результат в синтаксисе Intel.

 Jesse Good12 июн. 2012 г., 06:18
Еще раз спасибо. Я также узналllc по умолчанию включает оптимизации (-02), в то время как gcc и clang не используют оптимизацию (-O0) по умолчанию (мне потребовалось целую вечность, чтобы выяснить, почему выходные данные сборки были другими).

Как лязгr208683 (лязг 3.5+), он понимает-masm=intel, Так что, если ваш лязг достаточно новый, вы можете просто использовать это.

Ваш ответ на вопрос