将 rax 寄存器的最高位设置为 rdx 寄存器中的最低位的最快方法

Fastest way to set highest order bit of rax register to lowest order bit in rdx register

这是我的方法:

and rdx, 0x1
ror rdx, 1
or rax, rdx

但是我觉得这样效率不是很高。而且我不知道轮班操作是否更具成本效益。

如果 rdx 可以被销毁,那么你不需要那样屏蔽它,因为左移无论如何都会清除剩余的位

shl rdx, 63
or rax, rdx

这里假设rax的MSB被清空,如

尝试

 add rax,rax
 shld rdx, rax, 63

先去掉rax的msb,然后拼接后的序列只包含rdx的lsb和rax的63位,要左移到rdx

 add rax, rax
 shrd rax, rdx, 1

(这个答案假定问题中的解释是正确的,而代码是错误的——因为 'copying' 使用该代码不可能在设置位上清除位。)

旋转在现代处理器上和移位一样快,但在旧处理器上,它可能会很慢,所以如果可以解决问题,最好使用移位。

如果你能破坏 rdx,我很确定下面的指令序列是任何 x86_64 处理器上最快的。

shl rdx, 63
or rax, rdx