ble
疑似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'
