6
アセンブリでの見かけ上の問題:XMM0レジスタ全体をXMM3にコピーしたい。私は試しましたXMMレジスタ間で128ビット値をどのように移動させますか?
movdq xmm3, xmm0
しかし、MOVDQは2つのXMMレジスタ間の値の移動には使用できません。代わりに私は何をすべきですか?
アセンブリでの見かけ上の問題:XMM0レジスタ全体をXMM3にコピーしたい。私は試しましたXMMレジスタ間で128ビット値をどのように移動させますか?
movdq xmm3, xmm0
しかし、MOVDQは2つのXMMレジスタ間の値の移動には使用できません。代わりに私は何をすべきですか?
それは、彼らはすべて同じことを行うが、キャッチがありますmovapd
、movaps
、またはmovdqa
movaps xmm3, xmm0
です:
movapd
とmovaps
は、浮動小数点ドメイン内で動作します。movdqa
は、ドメイン変更のストールを避けるために、あなたのデータ型に応じて適切なものを使用して、整数ドメインでを運営しています。
また、movapd
を使用する理由はありません。 movapd
がエンコードするために余分なバイトを必要とするため、常にmovaps
を使用してください。
movdqaは私が探していたものです:)ありがとう。それは速かった:) PS。浮動小数点の動きは実際には整数の動きとどう違うのですか?私にとっては、どちらも単純なコピーでなければなりません。 – lampak
Intelプロセッサでは、FP単位と整数単位が別々です。 1つのユニットにある命令を実行すると、そのユニットに値が移動されます。しかし、別のドメインでその値に命令を出すときは、新しいユニットに移動しなければなりません.1〜2サイクルのペナルティが必要です。したがって、可能であれば、ドメインに値を保持することが最善です。なぜ、異なる 'mov'命令があるのでしょうか。整数演算をしていて、 'movaps'を使用している場合は、値をFPユニットに移動するためにペナルティを支払うことになり、次の整数命令に戻すためにペナルティが戻されます。 – Mysticial
同じことが論理演算子に適用されます: 'por'、' orps'、 'orpd' – Mysticial