64 位 multiply/divide 无 64 位乘法或除法指令

64-bit multiply/divide without 64-bit multiply or divide instructions

我正在研究 Forth 实现,我遇到了双单元运算的需求(Forth 实现是 32 位),包括双单元乘法和 division/remainder。但是,我为此开发的架构 ARM Cortex-M4 缺少 64x64 乘法或 64/64 division/remainder 指令(它只有 32x32 乘法和 32/32 除法以及 32x32+64 multiply/accumulate 指令) .

虽然我可以接受 32x64 乘法(因为 64x64 乘法可以用它来模拟无论如何都不会溢出的情况),并且对于某些事情 64/32 division/remainder 就足够了,我想除了 32x64 乘法之外,至少要有一个完整的 64/64 division/remainder,这样我就可以完全实现双单元格算术。

您可以以 bigmath.f library (or another variant) — Wil Baden 的双数算术为例。

定义了 D*DU/MOD 个词。

关于许可证。我认为这段代码在 public 域中。它作为参考实现发表在 Forth Dimensions1 上,作者在那里说:“如需本文来源的副本,请发送电子邮件请求 Stretching Forth #19: Double Number算术。

对于DU/MOD这个词,Wil Baden 还指出:“该算法基于 Knuth 的计算机编程艺术第 2 卷中的算法,针对双单元被除数和双单元除数进行了简化”。

1 威尔·巴登 (1998)。扩展标准 Forth #19:双数算术。 第四维度 XIX.6 March-April 1998, pp. 33-34

page 4我们还可以看到:

The material contained in this periodical (but not the code) is copyrighted by the individual authors of the articles and by Forth Interest Group, Inc., [...] Any code bearing a copyright notice, however, can be used only with permission of the copyright holder.

而且代码和文章似乎都没有任何版权声明。