bgt疑似

bgt

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

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

説明

bgt は、一方の値がもう一方より大きいときに発火する分岐です。その名前は branch if greater than の略です。以下の命令は、rs1 が rs2 より厳密に大きいときにラベルへジャンプし、それらを符号付きの値として比較します。

bgt rs1, rs2, label

RISC-V の6つのコア分岐のうち、greater-than を判定するものはありません。a が b より大きいかどうかは、オペランドを入れ替えて b が a より小さいかどうかという問いと同じです。bgt は疑似命令であり、アセンブラはオペランドを逆にして blt に書き換えます。ハードウェアはより単純なままで、比較は自然に読める向きで書くことができます。基になる less-than 分岐は blt で説明されています。

条件がその向きで自然に読めるときには bgt を使ってください。たとえば、値が最大値を超えたときに分岐する場合、長さがそれ用に確保された領域より大きくなった場合、または2つの経路のうち大きい方を選ぶ場合などです。

The RISC-V manual states that bgt, bgtu, ble and bleu can be synthesized by reversing the operands to blt, bltu, bge and bgeu.

Strictly が重要な語です。bgt は2つの値が等しいときには分岐しません。等しい値も含めて数えるには、greater than or equal で分岐する bge を使ってください。ループやチェックにおける off-by-one エラーは、通常この区別から生じます。比較は符号付きです。符号なしデータでは、同じ入れ替えが bltu に適用されます。

展開先

blt rs2, rs1, label

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

例

li t0, 5
li t1, 2
bgt t0, t1, done   # 5 > 2, so jump to 'done'