Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly cmpeqpd有时返回错误的值_Assembly_Floating Point_Sse_Avx_Denormal Numbers - Fatal编程技术网

Assembly cmpeqpd有时返回错误的值

Assembly cmpeqpd有时返回错误的值,assembly,floating-point,sse,avx,denormal-numbers,Assembly,Floating Point,Sse,Avx,Denormal Numbers,出于某种原因,有时在我的节目中我看到了这一点 cmpeqpd xmm3,xmm0 其中xmm0=={0x2cd000000000,0x2cd000000000} 和xmm3=={0x0,0x2011D08000000000} 在xmm3中恰好返回{0xffffffffffffffff,0x0},这是错误的,因为(double)0x0不等于(double)0x2cd00000000 我注意到这种情况只是偶尔发生。我用rr记录了程序的执行情况,以便一致地重现。有趣的是,在一个超级简化的简单程序中,

出于某种原因,有时在我的节目中我看到了这一点

cmpeqpd xmm3,xmm0
其中
xmm0=={0x2cd000000000,0x2cd000000000}
xmm3=={0x0,0x2011D08000000000}
在xmm3中恰好返回
{0xffffffffffffffff,0x0}
,这是错误的,因为
(double)0x0
不等于
(double)0x2cd00000000

我注意到这种情况只是偶尔发生。我用rr记录了程序的执行情况,以便一致地重现。有趣的是,在一个超级简化的简单程序中,我再也不能重现这个问题了。我想知道,是否有任何隐藏的微体系结构状态可以改变cmpeqpd(cmppd)行为

请注意,我检查了相应ymm寄存器中的高128位是否为零。

0x2CD000000000(或0x00002CD00000000,以使指数的作用更加明显)是非规范的。确实有一个设置可以使非规范比较等于零:


DAZ标志可能是在某个时候设置的,这可以解释为什么简化程序不再显示这种行为。

疯狂,我认为一定有一些标志寄存器可以控制这种行为。谢谢!