【问题标题】:Why doesn't PowerPC's stfs instruction behave as expected?为什么 PowerPC 的 stfs 指令没有按预期运行?
【发布时间】:2019-11-08 15:55:48
【问题描述】:

PowerPC 的浮点寄存器只支持双精度格式,因此加载和存储单精度值需要转换。在加载时从单到双的转换是有意义的,但是从双到单的转换以进行存储会造成一些令人困惑的事情。它似乎正确地截断了单精度范围内的数字,以及 NaN、无穷大和零,但对其他所有内容做了一些奇怪的移位,而不是像我预期的那样四舍五入到零或无穷大。

来自 PPC750 CPU 的示例。首先列出了给出我预期结果的示例。

double-precision input    decimal approximation    single-precision output    decimal approximation

0x 400f ffff ffff ffff    3.99999999               0x 407f ffff               3.99999976
0x 7ff8 0000 0000 0000    QNaN                     0x 7fc0 0000               QNaN
0x 7ff0 0000 0000 0000    +inf                     0x 7f80 0000               +inf
0x 8000 0000 0000 0000    -0.0                     0x 8000 0000               -0.0
--------------------------------------------------------------------------------------------------
0x 8000 0000 0000 0001    -4.941e-324              0x 8080 0000               -1.175e-38
0x 00a0 0000 0000 0000    1.139e-305               0x 0500 0000               6.019e-36
0x 7fe0 1234 5678 9abc    9.028e+307               0x 7f00 91a2               1.709e+38

我看了PowerPC Programming Environments Manual 看看它是否可以对此有所了解。第 C.7 节描述了“不需要非规范化”和“需要非规范化”情况的转换步骤。 (请注意,此符号中的|| 表示串联。)

然后继续说:

注意,如果要存储的值是单精度存储 浮点指令的幅度大于最大值 以单一格式表示的数字,第一种情况提到,“不 需要非规范化,”适用。然后存储在 WORD 中的结果是 一个明确定义的值,但在数值上不等于 源寄存器(即单精度加载​​的结果 WORD 中的浮点数不等于 原始源寄存器)。

这解释了为什么我得到了我所做的结果,但它没有解释它有什么用处。在我看来,如果再次从内存中加载这些值会导致可怕的错误。

为什么 stfs 指令不执行正常的舍入?预计结果如何不会引起问题?

【问题讨论】:

    标签: floating-point powerpc


    【解决方案1】:

    stfs 文档说“请注意,在执行 stfs 指令之前,要存储的值应该是单精度格式。”这意味着要存储的寄存器的内容应该是一些产生单精度值的先前指令的结果,例如fmuls(单精度浮点乘法)或frsp(舍入到单精度) .

    我会冒险猜测部分原因是它可以快速且易于实现——stfs 不必进行舍入,也不必使用浮点单元来执行此操作。它可以直接进入加载存储单元,该单元仅具有处理更简单情况的逻辑,其中截断位就足够了。

    【讨论】:

    • 我认为您对 PowerPC 设计者的意图是正确的。但是检查指数并在必要时存储 +/- 零或 +/- 无穷大真的会慢得多吗?它必须已经在检查指数才能找到单精度非正规范围内的数字,所以看起来微不足道的额外逻辑可以覆盖单精度范围之外的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    相关资源
    最近更新 更多