bgtz
псевдоlyszt.net охватывает bgtz и другие инструкции RISC-V более подробно.
Описание
bgtz выполняет переход, когда значение в регистре положительно. Название означает branch if greater than zero (переход, если больше нуля). Приведённая ниже форма переходит к помеченной позиции, когда rs больше нуля, и в противном случае переходит к следующей инструкции.
bgtz rs, label
Ассемблер рассматривает её как псевдоинструкцию и переписывает её в инструкцию ниже, которая проверяет, меньше ли zero регистра.
blt zero, rs, label
В RISC-V нет перехода для «больше», поэтому операнды меняются местами, и работу выполняет переход «меньше», так же как построен bgt. Сравнение знаковое. Ноль не выполняет переход, что отличает bgtz от bgez. См. blt для базового перехода.
bgtz подходит для цикла, который должен продолжаться, пока остаётся что-то для обработки, например счётчик оставшихся элементов, который больше нуля. Он также проверяет, больше ли результат нуля.
bgtz a0, found
Строка выше переходит к found, когда a0 содержит 1 или больше. Значение 0 или любое отрицательное число продолжает выполнение со следующей инструкции.
Разворачивается в
blt zero, rs, label
Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.
Пример
li t0, 4 bgtz t0, done # t0 > 0, so jump to 'done'
