blezпсевдо

blez

псевдо
RISC-V Ассемблер Ссылка

lyszt.net охватывает blez и другие инструкции RISC-V более подробно.

Описание

blez выполняет переход, когда значение в регистре равно нулю или отрицательно. Название означает branch if less than or equal to zero (переход, если меньше или равно нулю). Приведённая ниже форма выполняет переход к помеченной позиции, когда rs не больше нуля, и в противном случае переходит к следующей инструкции.

blez rs, label

Ассемблер рассматривает её как псевдоинструкцию и переписывает в приведённую ниже инструкцию, которая проверяет, больше ли zero или равно регистру.

bge zero, rs, label

Операнды меняются местами, потому что в RISC-V нет перехода по «меньше или равно», поэтому работу выполняет bge, так же как устроена ble. Сравнение знаковое. Переход при нуле, что отличает blez от bltz, и это противоположность bgtz, поэтому для любого значения ровно одна из двух выполняет переход. См. bge для лежащего в основе перехода.

blez подходит для проверки того, что не осталось ничего делать. Цикл, обрабатывающий количество оставшихся элементов, может завершиться, как только счётчик станет равен нулю или опустится ниже него.

blez t0, done

Строка выше выполняет переход к done, когда t0 равно 0 или отрицательно.

Разворачивается в

bge zero, rs, label

Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.

Пример

li t0, 0
blez t0, done   # t0 <= 0, so jump to 'done'