提问人:RTC222 提问时间:11/17/2023 最后编辑:Peter CordesRTC222 更新时间:11/17/2023 访问量:29
基于 vcmpsd 结果的分支
Branch based on the results of vcmpsd
问:
以下是 NASM 代码的一小部分:
vpxor xmm3,xmm3,xmm3
vmovsd xmm0,[rdi+rcx]
vmovsd xmm1,[rsi+rcx]
vsubsd xmm2,xmm0,xmm1
vcmpsd xmm4,xmm2,xmm3,0
je c_this
c_not_this:
mov rax,0
c_this:
mov rax,0
在前两行中,我移动两个数字(双精度)以比较为 xmm0 和 xmm1。在这种情况下,它们是相等的。接下来我减去它们,xmm2 的结果为零。最后,我将减法的结果与零进行比较,我希望 xmm4 为零,但事实并非如此:
(gdb) p $xmm4.v2_double
$3 = {-nan(0xfffffffffffff), 0}
因此,在 xmm4 中比较的结果是 -nan(0xfffffffffffff)。在分支语句中,它不会跳转到c_this,因此 -nan 不会被视为零。
作为一个更普遍的问题,我如何对 vcmpsd 的结果进行分支?该指令显然不会影响标志。令人惊讶的是,互联网上关于这方面的信息很少。
答: 暂无答案
评论
vcmpsd
movmskpd
test
double
ucomisd
comisd
if (d1 == d2) dummy = 0;
double
vucomisd
ucomisd