seqz疑似

seqz

疑似
RISC-V アセンブリ 参考

lyszt.netはseqzおよびその他のRISC-V命令をより詳しく扱っています。

説明

seqz はレジスタがゼロを保持しているかどうかをテストします。名前は「set if equal to zero(ゼロに等しければセット)」を意味します。ソースレジスタ rs がゼロのとき、以下の形式はデスティネーションレジスタ rd に 1 を書き込み、rs がそれ以外の値のときは 0 を書き込みます。

seqz rd, rs

出力は 1 または 0 で、値がゼロかどうかに答えます。

seqz は疑似命令です。つまり、アセンブラが実際の命令に書き換える読みやすい名前です。結果は以下の命令で、値が 1 未満かどうかを問い合わせます。

sltiu rd, rs, 1

符号なし数の中では、0 が 1 未満の唯一の値です。seqz を書くと、アセンブラが変換を行います。

2 つの値が等しいかどうかを問い合わせる RISC-V 命令は存在しないため、seqz は等価テストを構築するために使われます。2 つの値を XOR すると、一致するときはゼロ、異なるときは非ゼロの結果が得られるので、その結果に seqz を適用します。1 は元の値が等しかったことを意味します。xor のページでは、XOR が同一性を検出する理由を説明しています。

RISC-V マニュアルは seqz を、定数 1 を伴う sltiu のアセンブラ疑似命令として定義しており、rs1 がゼロに等しいときは rd を 1 に、それ以外のときは 0 に設定します。

seqz はまた、真または偽の値の意味を反転させます。0 を保持するレジスタは 1 になり、非ゼロの値は 0 になります。答えは通常の数値なので、さらなる算術に供給できます。たとえば、条件に応じて値をゼロにするために掛け算に使えます。その対応物は snez で、非ゼロをテストします。

展開先

sltiu rd, rs, 1

アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。

例

li t0, 0
seqz t1, t0       # t1 = 1