2012-06-12 37 views
46

this question chương trình, với g ++, tôi có thể thực hiện g++ -S -masm=intel test.cpp. Ngoài ra, với tiếng kêu, tôi có thể làm clang++ -S test.cpp, nhưng -masm=intel không được hỗ trợ bởi clang (warning argument unused during compilation: -masm=intel). Làm thế nào để tôi có được cú pháp intel với clang?Làm thế nào để tạo mã lắp ráp với cú pháp trong cú pháp Intel?

+0

@JerryCoffin: Cảm ơn, tôi đã tạo tệp '.bc' bằng tiếng kêu và sau đó xuất thành công cụm Intel bằng' llc'. Tâm trí làm cho một câu trả lời? –

+0

Ồ, tôi đoán đó không phải là vấn đề. –

Trả lời

85

này nên kêu vang phát ra mã lắp ráp với cú pháp Intel:

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

Bạn có thể sử dụng -mllvm <arg> để vượt qua trong các tùy chọn llvm từ dòng lệnh kêu vang. Đáng buồn thay tùy chọn này dường như không được tài liệu tốt, và do đó tôi chỉ tìm thấy nó bằng cách duyệt qua các danh sách gửi thư của llvm.


Như noted below by @thakis, điều này không còn cần thiết trong các phiên bản mới hơn của Clang (3.5+) như bây giờ hỗ trợ cú pháp -masm=intel.

+0

Thông tin tuyệt vời, cảm ơn! –

+0

+1: Tuyệt vời, chính xác những gì tôi đang tìm kiếm. – Leo

+2

http://llvm.org/bugs/show_bug.cgi?id=17465 yêu cầu hỗ trợ cho -masm = intel và hơn thế nữa. – Trass3r

16

Giả sử bạn có thể có Clang phát ra mã byte LLVM bình thường, sau đó bạn có thể sử dụng llc để biên dịch sang ngôn ngữ assembly và sử dụng tùy chọn --x86-asm-syntax=intel để nhận kết quả theo cú pháp của Intel.

+0

Cảm ơn bạn lần nữa. Tôi cũng phát hiện ra 'llc' theo mặc định bật tối ưu hóa (-02) trong khi gcc và clang sử dụng không tối ưu hóa (-O0) theo mặc định (nó đã cho tôi mãi mãi để tìm ra lý do tại sao đầu ra lắp ráp khác nhau). –

24

Vì clang r208683 (clang 3.5+), nó hiểu được -masm=intel. Vì vậy, nếu tiếng kêu của bạn là đủ mới, bạn chỉ có thể sử dụng nó.

Các vấn đề liên quan