2012-06-12 11 views
46

Come mostra this question, con g ++, posso fare g++ -S -masm=intel test.cpp. Inoltre, con clang, posso fare clang++ -S test.cpp, ma -masm=intel non è supportato da clang (warning argument unused during compilation: -masm=intel). Come posso ottenere la sintassi Intel con clang?Come generare codice assembly con clang nella sintassi Intel?

+0

@JerryCoffin: Grazie, ho generato un file '.bc' con clang e poi ho riprodotto con successo l'assembly Intel con' llc'. La mente sta facendo una risposta? –

+0

Oh, immagino che non sia un problema. –

risposta

85

Questo dovrebbe ottenere clang per emettere codice assembly con la sintassi Intel:

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

È possibile utilizzare -mllvm <arg> a passare in opzioni LLVM dalla riga di comando clang. Purtroppo questa opzione non sembra essere ben documentata e quindi l'ho trovata solo sfogliando le mailing list di llvm.


Come noted below by @thakis, questo non è più necessario nelle versioni più recenti di Clang (3.5+) come ora supporta la sintassi -masm=intel.

+0

Ottima informazione, grazie! –

+0

+1: fantastico, esattamente quello che stavo cercando. – Leo

+2

http://llvm.org/bugs/show_bug.cgi?id=17465 richiede il supporto per -masm = intel e oltre. – Trass3r

16

Presumendo che Clang emetta normali codici byte LLVM, è possibile utilizzare llc per compilare il linguaggio assembly e utilizzare l'opzione --x86-asm-syntax=intel per ottenere il risultato nella sintassi Intel.

+0

Grazie ancora. Ho anche scoperto 'llc' per impostazione predefinita delle ottimizzazioni su (-02) mentre gcc e clang non usano ottimizzazioni (-O0) per impostazione predefinita (mi ci è voluto un tempo per capire perché l'output dell'assembly era diverso). –

24

Come clang r208683 (clang 3.5+), comprende -masm=intel. Quindi se il tuo clang è abbastanza nuovo, puoi semplicemente usarlo.

Problemi correlati