bltz
疑似lyszt.netはbltzおよびその他のRISC-V命令をより詳しく扱っています。
説明
bltz は、レジスタが負の数を保持しているときに分岐します。この名前は「branch if less than zero(ゼロより小さい場合に分岐)」を意味します。以下の形式は、rs がゼロより小さい場合にラベル付きの位置へジャンプし、そうでなければ次の命令へ進みます。
bltz rs, label
アセンブラはこの疑似命令を実際の命令に書き換えます。それは以下の命令になり、レジスタを常に 0 を保持する zero レジスタと比較します。
blt rs, zero, label
比較は符号付きなので、レジスタ内の 32 ビットは負になりうる数値として読み取られます。分岐は 2 つのレジスタを比較するものであり、命令に書かれた定数を取ることはできません。これが 0 が zero レジスタから来る理由です。2 つの値を比較する分岐については blt を、ラベルの仕組みについては beq を参照してください。
値がゼロより小さいかどうかを確認するには、その値をレジスタに入れて bltz を使います。よくあるケースは、減算の結果がゼロを下回ったかどうかを調べることと、エラーを負の数として報告する関数の結果を調べることです。
sub t0, t1, t2 bltz t0, smaller
上記の行は、減算の結果がゼロより小さい場合に smaller へジャンプします。結果がちょうど 0 の場合は負ではないので、次の命令へ進みます。同様にゼロを取る反対の分岐は bgez です。
展開先
blt rs, zero, label
アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。
例
li t0, -3 bltz t0, done # t0 < 0, so jump to 'done'
