小编ubw*_*ubw的帖子

128位乘64位本机划分

我需要在 Rust 中执行 128 位乘 64 位除法。x86-64 ISA 包含用于此目的的本机 DIV 指令。但是,我编译的测试代码没有使用该指令。

测试代码:

pub fn div(hi: u64, lo: u64, divisor: u64) -> u64 {
   assert!(hi < divisor);

   let dividend = ((hi as u128) << 64) + lo as u128;
   (dividend / divisor as u128) as u64
}
Run Code Online (Sandbox Code Playgroud)

编译器资源管理器输出:

example::div:
    push    rax
    cmp     rdi, rdx
    jae     .LBB0_1
    mov     rax, rdi
    mov     rdi, rsi
    mov     rsi, rax
    xor     ecx, ecx
    call    qword ptr [rip + __udivti3@GOTPCREL]
    pop     rcx
    ret
.LBB0_1:
    ...
Run Code Online (Sandbox Code Playgroud)

相反,通过 __udivti3 …

x86-64 rust

3
推荐指数
1
解决办法
208
查看次数

标签 统计

rust ×1

x86-64 ×1