2012-06-12 11 views
46

Jako this question wyświetlam, używając g ++, mogę wykonać g++ -S -masm=intel test.cpp. Również z clang, mogę zrobić clang++ -S test.cpp, ale -masm=intel nie jest obsługiwany przez clang (warning argument unused during compilation: -masm=intel). Jak uzyskać składnię inteligencji z klang?Jak wygenerować kod zestawu z klangiem w składni Intela?

+0

@JerryCoffin: Dzięki, wygenerowałem plik '.bc' z klangiem, a następnie z powodzeniem wyprowadzam zespół Intela za pomocą' llc'. Umysł czyni to odpowiedź? –

+0

Och, myślę, że to nie problem. –

Odpowiedz

85

ten powinien dostać dzyń emitować kod montaż ze składni Intel:

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

Można użyć -mllvm <arg> przejść w opcjach LLVM z linii poleceń dzyń. Niestety ta opcja nie wydaje się być dobrze udokumentowana, a więc znalazłem ją tylko przeglądając listy mailingowe llvm.


Jak noted below by @thakis, to nie jest już potrzebne w nowszych wersjach Clang (nowszej niż 3.5), ponieważ obsługują składnię -masm=intel.

+0

Doskonała informacja, dzięki! –

+0

+1: Świetnie, dokładnie tego, czego szukałem. – Leo

+2

http://llvm.org/bugs/show_bug.cgi?id=17465 wymaga wsparcia dla -masm = intel i nie tylko. – Trass3r

16

Zakładając, że Clang może emitować normalne kody bajtów LLVM, można następnie użyć llc do kompilacji do języka asemblera i użyć jego opcji --x86-asm-syntax=intel, aby uzyskać wynik w składni Intela.

+0

Jeszcze raz dziękuję. Również domyślnie "llc" włącza optymalizacje na (-02), podczas gdy gcc i clang nie używają optymalizacji (-O0) domyślnie (zajęło mi to na zawsze zrozumienie, dlaczego dane wyjściowe zespołu były różne). –

24

Od numeru r208683 (clang 3.5+), rozumie on -masm=intel. Więc jeśli twój klang jest wystarczająco nowy, możesz go po prostu użyć.

Powiązane problemy