bgeu
lyszt.net behandelt bgeu und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
bgeu ist die vorzeichenlose Version von bge und das Gegenteil von bltu. Der Name bedeutet branch if greater than or equal, unsigned. Er springt zur Marke, wenn rs1 mindestens rs2 ist, wobei beide als nicht negative Zahlen gelesen werden. Siehe bge für den Vergleich und bltu für das, was das Vorzeichenlose ändert.
Mit bgeu hat die Familie sechs Branches. Es gibt drei Fragen, gleich, kleiner als und größer oder gleich, und die letzten beiden gibt es in einer vorzeichenbehafteten und einer vorzeichenlosen Form. beq und bne prüfen auf Gleichheit, blt und bge vergleichen vorzeichenbehaftete Werte, und bltu und bgeu vergleichen vorzeichenlose Werte. Diese sechs decken zusammen mit dem Vertauschen der Operanden für die Richtungen größer als und kleiner oder gleich jeden Vergleich ab, den ein Programm benötigt.
bgeu eignet sich für Grenzen von Größen, die nicht negativ sein können. Beispiele sind das Verlassen einer Schleife, wenn eine Position das Ende erreicht, das Zurückweisen eines Index, der die Arraygröße erreicht hat, und das Verzweigen zu einem Handler, wenn eine Länge die Kapazität erreicht. Der Vergleich von Speicheradressen verwendet bltu und bgeu, da Adressen vorzeichenlos sind, und die vorzeichenbehafteten Versionen dort falsche Ergebnisse liefern.
Das RISC-V-Handbuch sagt, dass vorzeichenbehaftete Array-Grenzen mit einem einzigen vorzeichenlosen Branch geprüft werden können, da jeder negative Index größer als jede nicht negative Grenze verglichen wird. bgeu und bltu sind die beiden Formen dieser Prüfung.
Die folgende Zeile führt die kombinierte Grenzprüfung in einer einzigen Anweisung aus.
bgeu i, n, error
Sie fängt einen Index ab, der zu groß oder negativ ist, weil ein negativer Index als riesiger vorzeichenloser Wert gelesen wird und den Test nicht besteht.
Beispiel
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
