bge
lyszt.net охоплює bge та інші інструкції RISC-V більш детально.
Формат кодування
Опис
bge працює в парі з blt і інвертує його умову. Літери означають branch if greater than or equal (перехід, якщо більше або дорівнює). Коли rs1 не менше rs2, наведена нижче інструкція переходить до позначеної позиції. Інакше виконання продовжується з наступної інструкції.
bge rs1, rs2, label
Для будь-яких двох значень рівно одна з інструкцій blt і bge виконує перехід, тож разом вони охоплюють усі випадки. Порівняння описано в розділі про blt, а переходи загалом — у розділі про beq.
bge часто з'являється на початку циклу як перевірка виходу. Наведений нижче рядок залишає цикл, щойно лічильник t1 досягає своєї межі t2.
bge t1, t2, done
Далі йде тіло циклу, а безумовний перехід у його кінці повертає до початку. Перевірка перед тілом обробляє нуль повторень, оскільки тіло, умова якого вже виконується, ніколи не запускається.
Частина "or equal" (або дорівнює) визначає поведінку на межі. bge виконує перехід, коли два значення рівні, і помилки на одиницю в циклах зазвичай походять саме від цієї межі. Цикл, що рахує від 0 до n, завершується, коли лічильник досягає n.
Згідно з посібником RISC-V, bge і bgeu виконують перехід, коли rs1 більше або дорівнює rs2, порівнюючи відповідно знакові та беззнакові значення. Зсув переходу — це 12-бітне значення, вимірюване в кратних 2 байтах.
Як і у випадку з blt, порівняння знакове, тому від'ємні значення дозволені. bgeu — це беззнакова форма, яка використовується для адрес і розмірів. Поширене застосування — перевірка того, що значення невід'ємне, як у наведеному нижче рядку.
bge t0, zero, ok
Приклад
bge t1, t2, done # leave the loop once i >= n
