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 плюс один. Проверки диапазона используют её вместе с другими ветвлениями. Переходите в сторону, если значение ниже минимума, переходите в сторону, если оно выше максимума, а то, что осталось, прошло проверку.
Руководство RISC-V утверждает, что bgt, bgtu, ble и bleu можно синтезировать, поменяв операнды местами на blt, bltu, bge и bgeu.
Равные значения всё же вызывают переход с ble, что делает её противоположностью bgt при тех же операндах. Для любой пары одна из них выполняет переход. Сравнение знаковое, поэтому значения могут быть отрицательными. blt, bge, bgt и ble вместе дают все четыре направления знакового упорядочения.
Разворачивается в
bge rs2, rs1, label
Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.
Пример
li t0, 2 li t1, 5 ble t0, t1, done # 2 <= 5, so jump to 'done'
