Rya*_*own 5 64-bit x86 assembly
这些指令有什么区别?MOVDQU 是未对齐的双四字移动,MOVUPD 是未对齐的两个 64 位浮点移动。我的意思是他们都只是移动未对齐的 128 位数据。
MOVDQU 位于第 948 页,MOVUPD 位于 intel x64 手册的第 995 页。
阿格纳雾说:
当与 [128 位] 寄存器操作数一起使用时,指令
MOVDQA,MOVDQU,MOVAPS,MOVUPS,MOVAPD和MOVUPD都是相同的
然后他继续说(他在他的例子中使用了对齐的版本,但我猜这同样适用于未对齐的变体):
在 Intel Core 2 和更早的 Intel 处理器上,一些浮点指令以整数单位执行。这包括 XMM 移动指令、布尔值和一些洗牌和打包指令。当与使用浮点单元的指令混合时,这些指令具有旁路延迟。在大多数其他处理器上,使用的执行单元是根据指令名称,例如
MOVAPS XMM1,XMM2使用浮点单元,MOVDQA XMM1,XMM2使用整数单元。
读取或写入内存的指令使用单独的单元。在某些处理器上,从内存单元到浮点单元的旁路延迟可能比到整数单元要长,但这与指令的类型无关。因此,当前处理器之间
MOVAPS XMM0,[MEM]和MOVDQA XMM0,[MEM]上的延迟没有差异,但不能排除未来处理器上会有差异。
[Y] 你可以
MOVAPS代替MOVAPD或MOVDQA用于将数据移入或移出内存或寄存器之间。当MOVAPS用于将整数指令的结果移动到另一个寄存器时,某些处理器中会发生旁路延迟,但在将数据移入或移出内存时不会发生旁路延迟 。
| 归档时间: |
|
| 查看次数: |
3662 次 |
| 最近记录: |