インテルのデータシートを探しています:インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルそして違いがわかりません
Intelのデータシートでは、両方の手順について説明しています。
この命令を使用して、128ビットのメモリ位置からXMMレジスタをロードしたり、XMMレジスタの内容を128ビットのメモリ位置に格納したり、2つのXMMレジスタ間でデータを移動したりできます。
唯一の違いは次のとおりです。
整列されていないメモリ位置との間でダブルクワッドワードを移動するには、MOVDQU命令を使用します。
そして
パックされた単精度浮動小数点値をアラインされていないメモリ位置との間で移動するには、MOVUPS命令を使用します。
しかし、2つの異なる指示がある理由がわかりませんか?
それで誰かが違いを説明できますか?
機能的には同じです。
一部(すべてではありません)のマイクロアーキテクチャでは、「ドメイン交差ペナルティ」によるタイミングの違いがあります。このため、データが整数SSE命令で使用されている場合は、通常movdqa
を使用し、データが浮動小数点で使用されている場合はmovaps
を使用する必要があります。このテーマの詳細については、Intel最適化マニュアルまたはAgner Fogの優れたマイクロアーキテクチャガイドを参照してください。これらの遅延は、ほとんどの場合、ロードやストアではなく、レジスタとレジスタの移動に関連していることに注意してください。