Assembly 如何基于cmpss输出进行跳转(浮点比较)?
根据这一点,我可以通过执行以下操作来比较xmm1和xmm2是否相等:Assembly 如何基于cmpss输出进行跳转(浮点比较)?,assembly,x86,Assembly,X86,根据这一点,我可以通过执行以下操作来比较xmm1和xmm2是否相等: cmpss xmm2, xmm1, 0 但是,似乎没有设置零标志。相反,结果存储在xmm2中。如果像je或jz这样的指令依赖于零标志,我如何根据它们是否相等来进行跳转?cmpss和它的朋友更倾向于给你可以进行无分支计算的掩码,您可以将其提取到GPR,然后进行测试,等等,但这一切都有点冗长和不必要 如果您想进行分支,ucomiss(或comiss,具体取决于您想对NaNs做什么)更适合。也许是这样: ucomiss xmm2,
cmpss xmm2, xmm1, 0
但是,似乎没有设置零标志。相反,结果存储在xmm2中。如果像
je
或jz
这样的指令依赖于零标志,我如何根据它们是否相等来进行跳转?cmpss
和它的朋友更倾向于给你可以进行无分支计算的掩码,您可以将其提取到GPR,然后进行测试,等等,但这一切都有点冗长和不必要
如果您想进行分支,ucomiss
(或comiss
,具体取决于您想对NaNs做什么)更适合。也许是这样:
ucomiss xmm2, xmm1
jp unordered
jz equal
看起来intel忘记在SIMD指令中添加受影响的
标志
部分。这通常用于整数指令*嗯,似乎他们在任何时候都随机添加了它……AMD似乎做得更好,他们的手册明确指出,rFLAGS不受影响。