gpt4 book ai didi

c++ - 浮点指令异常——FLDZ发生故障?

转载 作者:太空狗 更新时间:2023-10-29 21:26:21 28 4
gpt4 key购买 nike

我正在尝试调试我之前在此处发布的问题: C++ and pin tool -- very weird DOUBLE variable issue with IF statement .我使用 gdb 追踪了奇怪行为发生的那一刻。我发现的内容如下图所示,该图显示了显示反汇编代码和 float 指针寄存器值的 gdb 屏幕截图。 (放大图片 here) before and after FLDZ instruction is executed左侧图像显示了执行突出显示的 FLDZ 指令之前的屏幕截图,右侧图像是执行指令之后的屏幕截图。我查找了 x86 ISA,FLDZ 用于将 +0.0 加载到 ST(0) 中。但是,我得到的是 -nan 而不是 +0.0。有人知道为什么会这样吗?我使用的系统是运行 64 位 CentOS 的 Intel xeon 5645,但我尝试调试的目标程序是 32 位应用程序。另外,正如我在之前的帖子中提到的,我尝试了两个版本的 gcc,4.2.4 和 4.1.2,并发现了同样的问题。谢谢。

--添加--顺便说一句,下面是源代码。

void Router::Evaluate( )
{
if (_id == 0) aaa++;

if ( _partial_internal_cycles != 0 )
{
aaa += 12345;
cout << "this is not a zero : " << endl;
on = true;
}

_partial_internal_cycles += (double) 1.0;

if ( _partial_internal_cycles >= (double)1.0 ) {
_InternalStep( );
_partial_internal_cycles -= (double)1.0;
}

if (GetSimTime() > 8646000 && _id == 0) cout << "aaa = " << aaa << endl;
if ( on)
{
cout << "break. id = " << _id << endl;
assert(false);
}

}

最佳答案

发生异常(注意 I 位在 stat 字段中设置)。作为the documentation说:

If the ST(7) data register which would become the new ST(0) is not empty, both a Stack Fault and an Invalid operation exceptions are detected, setting both flags in the Status Word. The TOP register pointer in the Status Word would still be decremented and the new value in ST(0) would be the INDEFINITE NAN.

顺便说一句,你的根本问题是因为这只是 float 的本质。这不准确。参见,例如,this gcc bug report -- 和 this one .

关于c++ - 浮点指令异常——FLDZ发生故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11860703/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com