最快的Cortex M0 + Thumb 32x32 = 64倍增功能?

时间:2014-04-25 03:25:02

标签: algorithm assembly arm multiplication cortex-m

是否有人(或可以轻松编写)Thumb模式下ARM Cortex M0 +处理器的最佳内联汇编函数,以将两个32位数相乘并返回64位数?

由于M0 +没有长乘法,唯一可以实现的方法是通过原始乘法,编译器调用__aeabi_lmul,在34条指令中执行64x64 = 64乘法。我希望存在一个明显更快的算法,因为输入只有32位。

2 个答案:

答案 0 :(得分:1)

我在 Code Review 上发布了 26 个周期的版本。有人建议将其减少到 24 或 25 个周期。

答案 1 :(得分:0)

那你在谈论无符号或有符号乘法吗?如果签名然后你做64x64 = 64无论如何不是32x32 = 64。如果没有签名,则获取gcc库函数的源代码并修改它,因为你知道操作数的上半部分为零。

或者看看Hackers Delight(hackersdelight.org),看看是否存在比gcc库更快实现的算法。