簡體   English   中英

如何讓 cargo/rustc 為 Rust 代碼生成簡潔的匯編語言?

[英]How to have cargo/rustc generate concise assembly language for Rust code?

我發現 godbolt 對於比較同一算法的不同實現如何產生不同的匯編代碼非常有用。 例如

pub fn range_north(sq: u8) -> impl Iterator<Item = u8> {
    (sq..=(sq | 0b111000)).step_by(8)
}

pub fn range_north2(sq: u8) -> impl Iterator<Item = u8> {
    let (rk, fl) = (sq / 8, sq % 8);
    let n = 8 - rk;
    (sq..=63).step_by(8).take(n as usize)
}

example::range_north:
        mov     rax, rdi
        movzx   ecx, sil
        or      sil, 56
        movzx   edx, sil
        shl     edx, 8
        or      edx, ecx
        mov     word ptr [rdi + 8], dx
        mov     word ptr [rdi + 10], 256
        mov     qword ptr [rdi], 7
        ret

example::range_north2:
        mov     rax, rdi
        movzx   ecx, sil
        shr     sil, 3
        mov     dl, 8
        sub     dl, sil
        or      ecx, 16128
        movzx   edx, dl
        mov     qword ptr [rdi], 7
        mov     word ptr [rdi + 8], cx
        mov     word ptr [rdi + 10], 256
        mov     qword ptr [rdi + 16], rdx
        ret

而已。 我如何使用 Rust 的命令行工具離線生成這個 output 而沒有樣板代碼和其他無法幫助我比較生成的程序集的部分,如上所示?

cargo rustc --release -- --emit asm -C "llvm-args=-x86-asm-syntax=intel"將生成具有 Intel 語法的優化 GAS。

您也可以使用cargo asm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM