bgeu
lyszt.net охоплює bgeu та інші інструкції RISC-V більш детально.
Формат кодування
Опис
bgeu — це беззнакова версія bge і протилежність bltu. Назва означає branch if greater than or equal, unsigned (перехід, якщо більше або дорівнює, беззнакове). Він виконує перехід до мітки, коли rs1 не менше rs2, причому обидва читаються як невід'ємні числа. Див. bge для самого порівняння та bltu для того, що змінює беззнаковість.
З bgeu у родині шість переходів. Є три питання: рівність, менше та більше або дорівнює, причому останні два бувають у знаковій і беззнаковій формі. beq і bne перевіряють рівність, blt і bge порівнюють знакові значення, а bltu і bgeu порівнюють беззнакові значення. Ці шість разом із перестановкою операндів для напрямів «більше» та «менше або дорівнює» покривають усі порівняння, потрібні програмі.
bgeu підходить для обмежень на величини, які не можуть бути від'ємними. Приклади: вихід із циклу, коли позиція досягає кінця, відхилення індексу, що досяг розміру масиву, та перехід до обробника, коли довжина досягає місткості. Для порівняння адрес пам'яті використовуються bltu і bgeu, оскільки адреси беззнакові, а знакові версії дають там хибні результати.
У посібнику RISC-V сказано, що знакові межі масиву можна перевіряти одним беззнаковим переходом, бо будь-який від'ємний індекс порівнюється як більший за будь-яку невід'ємну межу. bgeu і bltu — дві форми такої перевірки.
Рядок нижче виконує об'єднану перевірку меж однією інструкцією.
bgeu i, n, error
Він виявляє індекс, який завеликий або від'ємний, тому що від'ємний індекс читається як величезне беззнакове значення і не проходить перевірку.
Приклад
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
