assembly 功率伊萨中的fadd与fadd

tkclm6bt  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(194)

有谁知道Power伊萨中“fadd”和“fadds”的区别吗?正如我所得到的,它应该是单精度的,但结果是这样的:
在浮点寄存器中,我有{0,0,1,0}
当我使用fadd本身时,结果是1.7014,这是有意义的。但当我使用fadds时,结果是“0”。我不明白为什么。

ergxz8rk

ergxz8rk1#

https://www.ibm.com/docs/en/aix/7.2?topic=set-fadd-fa-floating-add-instruction表示fadd是双精度浮点加法,而不是整数。
但请注意,添加两个次正规(全零指数域)如果结果也是次正规的double,则相同符号的double只是将它们的尾数相加,就像整数加法一样。(并且至少当与其自身相加时,整个位模式仅左移1,即使结果变为标准化的,否则尾数保持不变,指数递增1。)
看起来像是0x 3f 800000这样的单精度位模式(它代表1.0f),而在高半部分全零。所以你有一个位模式为0x 00000003 f800000的double。将它加到自身上,使其加倍为0x 00000007 f000000。左移尾数,因为结果仍然是次正规的,指数没有变化。(表示值2.056...E-317

将该double位模式的下半部分作为位模式为0x7f000000的单精度float,它表示值1.7014118346e+38。(https://www.h-schmidt.net/FloatConverter/IEEE754.html

这比你声称得到的结果1.7014大了38个数量级,但这5个匹配的数字不可能是一个巧合。我敢肯定这一定是你做的。检查一下你是如何打印或查看单精度浮点数的,以确保你没有以某种方式截断字符串,从而丢失科学记数法中的指数。
IDK你的{0,0,1,0}表示法应该是什么意思;说明书上说faddfadds在64位或32位FP寄存器上操作,而不是矢量。OTOH我对POWER / PowerPC或Altivec了解不多。

相关问题