[解決済み] ARMv8でリテラル0ではなく、xzrレジスタを使用するのはなぜですか?
質問
を読んでいたのですが SVEホワイトペーパー ARMから、(SVEでない例で)奇妙なことに気がつきました。
mov x8, xzr
この
xzr
というレジスタがあったので調べてみると
ARMの一部コンテンツ
は、多くの文脈でゼロと同義であると述べています。
ということで、以下のようになります。
x8
がゼロに初期化されるのは、ループの直前で実行されるからです。
x8
はループカウンタとして使用されます。
私が理解できないのは、なぜリテラルな
0
の代わりに使用される
xzr
? 例えば
mov x8, 0
要約すると、私の疑問は、なぜ人は
xzr
レジスタの代わりに、リテラルな
0
ここで?
解決方法は?
私は
mov x8, xzr
対
mov x8, #0
という比較は、何だか赤信号のような気がします。
old_timerさんの回答が示すように、エンコーディングの利得はありませんし、パイプラインの性能もほとんど、あるいは全く向上しない可能性が高いです(確かに私は確認したことはありませんが)。
何
xzr
しかし、@InfinitelyManic さんの回答のようにダミーレジスタに加えて、0 値のオペランドにアクセスすることができます。
実レジスタをロードして占有することなく
. これにより、命令が1つ減り、「実際の」データを保持するためのレジスタが1つ増えるという2つの利点があります。
が持つ重要な特性だと思います。 OPで紹介した「ARMのいくつかのコンテンツ」。 が指摘を怠っている。
ということなのです。
mov x8, xzr
対
mov x8, #0
は赤信号である。 もし、ゼロにするのなら
x8
を使用することは、その後にそれを変更することを意図しています。
xzr
または
#0
はかなり恣意的です(私なら
#0
の方がわかりやすいと思います)。 しかし、もしゼロにするのであれば
x8
純粋に、後続の命令にゼロのオペランドを与えるためであれば、許可されている限りは
xzr
の代わりに
x8
のオペランドとして使用します。
その
命令で、ゼロにならない
x8
を全く使用しない。
関連
-
[解決済み] MIPSでディブディブ
-
[解決済み] アセンブリ言語で数字をプリントアウトする?
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] アセンブリ言語 新規ライン
-
[解決済み] アセンブリ言語 - sarqはコードの中で何をするのですか?
-
[解決済み] x86アセンブリの角括弧の意味は何ですか?
-
[解決済み] アセンブリの追加要求の明確化
-
[解決済み] インテルアセンブリの%ripレジスタを理解する
-
[解決済み] ST(0)をEAXに移動させる方法は?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 着信側セーブレジスタ、発信側セーブレジスタとは何ですか?
-
[解決済み] callq命令とは何ですか?
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] アセンブリで数字をASCIIに変換する
-
[解決済み] error: invalid effective address エラー:有効なアドレスがありません。
-
[解決済み] BL命令ARM - その仕組み
-
[解決済み] cmovlオペコードの中で何と何が比較されるのですか?
-
[解決済み] SRLとSRAの違いは何ですか?[重複しています]。
-
[解決済み] アセンブリ言語 jeジャンプ機能
-
[解決済み] ST(0)をEAXに移動させる方法は?