【问题标题】:Fastest Cortex M0+ Thumb 32x32=64 multiplication function?最快的 Cortex M0+ Thumb 32x32=64 乘法函数?
【发布时间】:2014-04-25 03:25:01
【问题描述】:

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

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

【问题讨论】:

  • 我找到了这个gcc patch。我不明白您是否正是在无法访问umull的情况下,但也有一些汇编代码。看看有没有帮助
  • Cortex-M0 是 ARMv6 架构,看起来 OP 实际上是在获取 gcc 补丁中提到的“慢”版本。

标签: algorithm assembly arm multiplication cortex-m


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    那么您是在谈论无符号乘法还是有符号乘法?如果已签名,那么您无论如何都在做 64x64=64 而不是 32x32=64。如果未签名,则获取 gcc 库函数的源代码并对其进行修改,因为您知道操作数的上半部分为零。

    或者看看 Hackers Delight (hackersdelight.org),看看有没有比 gcc 库实现得更快的算法。

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 2020-03-22
      • 2016-06-19
      • 2011-03-21
      • 1970-01-01
      • 2017-02-24
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多