最有效的实现方式是什么?
d=u / v
r=u mod v 对于ARM V7M指令集,其中u是无符号64位,v是无符号32位?
我特别感兴趣的是这种特殊情况,即v是“标准化的”,因此它的高位被设置。
我已经在Knuth的“计算机编程艺术(第2卷)”中看到了各种选择,但我很难看到使用可用的V7M指令UMULL等实现这一点的最佳方式。
发布于 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节)
发布于 2015-01-06 05:52:24
既然您的编译器几乎肯定支持64位数据类型,那么让编译器生成合适的代码有什么错呢?编译器包含大量特定于目标的知识,可能会产生最佳结果。
给定:
uint64_t u = x ;
uint32_t v = y ;然后:
uint64_t d = u / v ;
uint32_t r = u % v ; https://stackoverflow.com/questions/27786490
复制相似问题