浮点指令异常 - FLDZ错误?(floating point instruction anoma

2019-09-21 00:46发布

我试图调试我张贴早些时候这里的问题: C ++和插头工具-用IF语句非常奇怪的双变量的问题 。 我找到了那一刻的时候用gdb发生了怪异的行为。 我发现在低于该图所示示出了屏幕截图的gdb显示反汇编代码和浮动指针寄存器值。 (放大图像此处 ) 左侧图像显示的屏幕截图的突出前FLDZ执行指令并执行所述指令之后的右侧图像是。 我抬起头,在x86 ISA和FLDZ是装载+0.0ST(0) 不过,我得到的是-nan而不是+0.0 。 是否有人知道为什么会这样? 我使用的系统是英特尔至强5645运行64位的CentOS,但我试图调试目标程序是32位应用程序。 此外,正如我在前面的文章中提到,我试过GCC,4.2.4和4.1.2两个版本,并观察到了同样的问题。 谢谢。

--added--顺便说,下面是源代码。

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);
  }

}

Answer 1:

生成了异常(注意I位被设置在统计字段)。 由于该文件说:

如果这将成为新的ST(0)的ST(7)数据寄存器不为空,这两个堆栈错误和无效操作异常被检测到,在状态字设置两个标记。 在状态字仍然会递减而在ST新值的高位寄存器指针(0)将无限期NAN。

顺便说一句,你的潜在的问题是,因为这是浮点只是性质。 它并不确切。 见,例如, 该GCC bug报告 -而这一个 。



文章来源: floating point instruction anomaly — FLDZ malfunctioning?
标签: c++ x87