ble疑似

ble

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

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

説明

ble は、一方の値がもう一方以下であるときに分岐します。名前は branch if less than or equal を表します。以下の形式は、rs1 が rs2 以下であるときにラベルへジャンプし、符号付き比較を使用します。

ble rs1, rs2, label

ble は bgt と同様にオペランドを入れ替えることに依存する疑似命令です。a が b 以下かどうかを問うことは、b が a 以上かどうかを問うことと同じなので、アセンブラは ble をオペランドを逆にした bge として書き換えます。専用の機械命令は不要です。基になる分岐については bge を参照してください。

ble は終端を含むループや範囲に適しています。カウンタが n 以下である間、n を含めて実行されるループは、ble を使うと明確に読めます。同じループを厳密な blt で書くと n プラス 1 が必要です。範囲チェックでは他の分岐と並んで使われます。値が最小値未満なら分岐して離れ、最大値より大きければ分岐して離れ、残ったものは通過したことになります。

RISC-V マニュアルには、bgt、bgtu、ble、bleu はオペランドを逆にして blt、bltu、bge、bgeu に合成できると記載されています。

等しい値は ble で分岐するため、同じオペランドに対する bgt の反対になります。どのペアでも、どちらか一方が分岐します。比較は符号付きなので、値は負でもかまいません。blt、bge、bgt、ble を合わせると、符号付きの 4 つの順序方向すべてが得られます。

展開先

bge rs2, rs1, label

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

例

li t0, 2
li t1, 5
ble t0, t1, done   # 2 <= 5, so jump to 'done'