ARM V7M 64位分区

时间:2015-01-05 19:30:40

标签: c algorithm assembly arm

实施

的最有效方法是什么?
d=u / v
r=u mod v 

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

我特别感兴趣的是v是“规范化”的特殊情况,以便设置其高位。

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

2 个答案:

答案 0 :(得分:2)

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

ARM 32位工具链需要一个名为__aeabi_uldivmod的函数实现来卸载此操作,可能您可以找到各种实现,其中一个特定来自clang udivmoddi4.c,指向{{ 3}}(第3.2.3.7节)

答案 1 :(得分:0)

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

假设:

uint64_t u = x ;
uint32_t v = y ;

然后:

uint64_t d = u / v ;
uint32_t r = u % v ;