web-dev-qa-db-fra.com

Comment générer du code d'assemblage avec clang dans la syntaxe Intel?

Comme cette question montre, avec g ++, je peux faire g++ -S -masm=intel test.cpp. De plus, avec clang, je peux faire clang++ -S test.cpp, mais -masm=intel n'est pas pris en charge par clang (warning argument unused during compilation: -masm=intel). Comment obtenir la syntaxe Intel avec Clang?

56
Jesse Good

Comme noté ci-dessous par @thakis , les nouvelles versions de Clang (3.5+) acceptent le -masm=intel argument.


Pour les versions plus anciennes, cela devrait faire en sorte que le code Assembly soit émis avec la syntaxe Intel:

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

Vous pouvez utiliser -mllvm <arg> pour passer les options llvm à partir de la ligne de commande clang. Malheureusement, cette option ne semble pas bien documentée, et je ne l'ai donc trouvée qu'en parcourant les listes de diffusion llvm.

101
dcoles

À partir de clang r20868 (clang 3.5+), il comprend -masm=intel. Donc, si votre clang est suffisamment nouveau, vous pouvez simplement l'utiliser.

34
thakis

En supposant que Clang puisse émettre des codes d'octets LLVM normaux, vous pouvez ensuite utiliser llc pour compiler en langage assembleur et utiliser son --x86-asm-syntax=intel option pour obtenir le résultat dans la syntaxe Intel.

16
Jerry Coffin