Là 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?
Trả lời
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
.
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.
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). –
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ó.
@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? –
Ồ, tôi đoán đó không phải là vấn đề. –