bltz
псевдоlyszt.net охватывает bltz и другие инструкции RISC-V более подробно.
Описание
bltz выполняет ветвление, когда регистр содержит отрицательное число. Название означает branch if less than zero (ветвление, если меньше нуля). Приведённая ниже форма выполняет переход к помеченной позиции, если rs меньше нуля, и в противном случае продолжает со следующей инструкции.
bltz rs, label
Ассемблер переписывает эту псевдоинструкцию в реальную инструкцию. Она превращается в приведённую ниже инструкцию, которая сравнивает регистр с zero — регистром, который всегда содержит 0.
blt rs, zero, label
Сравнение знаковое, поэтому 32 бита в регистре читаются как число, которое может быть отрицательным. Ветвление сравнивает два регистра и не может принимать константу, записанную в инструкции, поэтому 0 берётся из регистра zero. См. blt для ветвлений, сравнивающих два значения, и beq о том, как работают метки.
Чтобы проверить, меньше ли значение нуля, поместите значение в регистр и примените к нему bltz. Обычные случаи — проверка результата вычитания на то, не стало ли оно ниже нуля, и проверка результата функции, которая сообщает об ошибке отрицательным числом.
sub t0, t1, t2 bltz t0, smaller
Приведённые выше строки выполняют переход к smaller, когда результат вычитания меньше нуля. Результат, равный ровно 0, не является отрицательным и продолжает со следующей инструкции. Противоположное ветвление, которое также принимает ноль, — это bgez.
Разворачивается в
blt rs, zero, label
Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.
Пример
li t0, -3 bltz t0, done # t0 < 0, so jump to 'done'
