首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效mod 3在x86装配中的应用

高效mod 3在x86装配中的应用
EN

Stack Overflow用户
提问于 2017-05-27 02:18:59
回答 1查看 1.4K关注 0票数 7

DIV指令在现代处理器上是昂贵的。在x86程序集中是否有更快的方法来减少64位整数mod 3?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-27 02:55:48

有一些算法是基于乘法除法和除数的倒数。在这方面有各种文件,其中最常引用的一篇是:

作者声明: Peter L.“用乘法除以不变整数。”ACM SIGPLAN通知。第29卷,第6号,1994年8月,第61-72页(在线)

当打开优化时,您的C/C++编译器很可能已经使用了该算法的一个变体。例如,我的Intel编译器version 13会将以下内容转换为:

代码语言:javascript
复制
#include <stdint.h>
uint64_t mod3 (uint64_t a)
{
    return a % 3;
}

转到这个(行尾注解,我的):

代码语言:javascript
复制
mod3    PROC
; parameter 1: rcx
        mov       r8, 0aaaaaaaaaaaaaaabH      ;; (scaled) reciprocal of 3
        mov       rax, rcx
        mul       r8                          ;; multiply with reciprocal
        shr       rdx, 1                      ;; quotient
        lea       r9, QWORD PTR [rdx+rdx*2]   ;; back multiply with 3
        neg       r9
        add       rcx, r9                     ;; subtract from dividend 
        mov       rax, rcx                    ;; remainder
        ret
mod3    ENDP
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44212301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档