首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM V7M 64位除法

ARM V7M 64位除法
EN

Stack Overflow用户
提问于 2015-01-06 03:30:40
回答 2查看 1.8K关注 0票数 1

最有效的实现方式是什么?

代码语言:javascript
复制
d=u / v
r=u mod v 

对于ARM V7M指令集,其中u是无符号64位,v是无符号32位?

我特别感兴趣的是这种特殊情况,即v是“标准化的”,因此它的高位被设置。

我已经在Knuth的“计算机编程艺术(第2卷)”中看到了各种选择,但我很难看到使用可用的V7M指令UMULL等实现这一点的最佳方式。

EN

回答 2

Stack Overflow用户

发布于 2015-01-06 08:58:09

(这与其他答案类似,只是从另一个角度)

ARM 32位工具链需要一个名为__aeabi_uldivmod的函数实现来卸载此操作,您可能可以找到各种实现,其中一个来自clang udivmoddi4.c,它指向Figure 3-40 of The PowerPC Compiler Writer's Guide (第3.2.3.7节)

票数 2
EN

Stack Overflow用户

发布于 2015-01-06 05:52:24

既然您的编译器几乎肯定支持64位数据类型,那么让编译器生成合适的代码有什么错呢?编译器包含大量特定于目标的知识,可能会产生最佳结果。

给定:

代码语言:javascript
复制
uint64_t u = x ;
uint32_t v = y ;

然后:

代码语言:javascript
复制
uint64_t d = u / v ;
uint32_t r = u % v ; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27786490

复制
相关文章

相似问题

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