首页 > 解决方案 > 64 位乘法/除法没有 64 位乘法或除法指令

问题描述

我正在研究一个 Forth 实现,我遇到了对双单元算术(Forth 实现是 32 位)的需求,包括双单元乘法和除法/余数。但是,我正在为其开发的架构 ARM Cortex-M4 缺少 64x64 乘法或 64/64 除法/余数指令(它只有 32x32 乘法和 32/32 除法以及 32x32+64 乘法/累加指令)。

虽然我可以使用 32x64 乘法(因为对于无论如何都不会溢出的情况,可以用它模拟 64x64 乘法),并且对于某些事情,64/32 除法/余数就足够了,我希望至少有一个完整的 64 /64 除法/余数以及 32x64 乘法,所以我可以完全实现双单元算术。

标签: matharm64-bitcortex-mforth

解决方案


您可以将bigmath.f库(或其他变体)作为示例——Wil Baden 的 Double Number Arithmetic。

有定义D*DU/MOD词。

关于执照。我认为这段代码在公共领域。它作为参考实现发表在 Forth Dimensions 1中,作者在那里说:“要获得本文源代码的副本,请发送电子邮件请求 Stretching Forth #19: Double Number Arithmetic”。

字面上DU/MOD,Wil Baden 还指出:“该算法基于 Knuth 在他的计算机编程艺术第 2 卷中的算法,简化为两格除数和两格除数”。

1威尔巴登 (1998)。拉伸标准 Forth #19:双数算术。Forth Dimensions XIX.6 March-April 1998, pp. 33-34

第 4 页上,我们还可以阅读:

本期刊中包含的材料(但不是代码)的版权归文章的个人作者和 Forth Interest Group, Inc. [...] 任何带有版权声明的代码,但是,只有在获得许可的情况下才能使用版权所有者的。

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


推荐阅读