【发布时间】:2019-07-11 15:37:54
【问题描述】:
我正在尝试翻转 xmm0 中最低有效浮点数的符号位。我试图将 -0 转换为另一个 xmm 寄存器并与 xmm0 进行异或。不幸的是,尽管我的浮动值消失了,但我已经实现了翻转标志。有没有办法在 asm 中使用xorps 来翻转符号位?我还在stackoverflow 上看到了一些帖子,但确实是这样做的,但是在 c 中。
# xmm0 contains 4 floats
# goal is to flip the sign of the least significant one
mov eax, -0
cvtsi2ss xmm1, eax
xorps xmm0, xmm1
【问题讨论】:
-
mov eax, 0x80000000; movd xmm1, eax; xorps xmm0, xmm1 -
@Jester 非常感谢!那很快。我尝试过类似的方法,但并没有像我预期的那样成功。很遗憾,我无法接受您的解决方案。
-
仅供参考:-0 和 0 是相同的 2 的补码整数。 -0.0 和 0.0 是不同的浮点数。所以
mov eax, -0等价于mov eax, 0 -
@Jester 或者将
0x80000000放在内存中并用内存操作数引用它。 -
@Jester:如果你要即时生成它,我倾向于选择
pcmpeqd xmm1,xmm1/pslld xmm1, 31,除非你特别想不修改高元素。跨度>