【发布时间】:2013-06-18 05:51:55
【问题描述】:
是否有一个或两个用于在 XMM 寄存器之间交换值的 x86 指令;类似于 XCHG 指令?不能使用内存、临时寄存器或 XOR 副本。
【问题讨论】:
-
XOR 交换的算术版本呢?但是为什么你什么都不能用呢?
-
@BrettHale 他必须为此使用暂存器
-
如果您考虑一下,要使 xchg 工作,它必须首先在某处使用偷偷摸摸的寄存器或内存位置来交换值。如果你可以“什么都不用”,那么只有 xor 会这样做。看起来他们从未为 xmm 寄存器集提供此功能
-
@ady 完全没有意义,
xchg的问题在于,如果它有一个内存操作数,它就有一个隐式锁。这不是交换的固有问题。两个 xmm 寄存器之间的交换会很好。他们甚至可以通过寄存器重命名来实现它,使其成为 0 延迟(他们为fxch这样做,所以为什么不这样做)。我怀疑它不存在的原因是它没有足够的必要——你可以只使用一个临时寄存器..