x86比較命令:cmp x, y
が減算を行い、結果に基づいてさまざまなフラグが設定されていると聞いたことがあります。x86減算の代わりにXORを使用する比較命令
ここで、2つのオペランドが等しいかどうかをテストするだけですか?減算の代わりに排他的論理和演算をするのははるかに高速ですか?私の質問は、2つのオペランドが等しいかどうかを知るためにXORとの比較を行う命令があるかどうかです。おそらく、次のようになります:cmpeq x, y
またはcmpxor x, y
。
cmpxor
を使用すると、減算を行うcmp
よりも高速であることがわかります。 cmpxor
のようなスピードアップを与えるような指示はありますか?
私はxor
がzero flag
に設定されていることを認識しています。しかし、xor x, y
を実行すると、x
が変更されます。私はそれを望んでいない。両方のオペランドだけを残す比較命令が必要です。
XORが「はるかに高速」であると思われるのはなぜですか? – jalf
'cmp'は他の命令(' xor'を含む)と同じくらい速いので、 "はるかに高速"にはなりません。いくつかのμarchでは、 'cmp'命令をフロントエンドによって単一のμopに依存する分岐命令と融合させて、事実上さらに速くすることができます。これはすべて、インテルの最適化マニュアルに記載されています。 –
Ira Baxterは非常にうまくいっています:*技術的には、SUBはXORよりも時間がかかるはずです。なぜなら、XORはビット単位で並列しているのに対し、キャリーはすべてのビットを "リップル"させなければならないからです。 – Aaron