bltzpseudo

bltz

pseudo
Assembly RISC-V Referência

lyszt.net aborda bltz e outras instruções RISC-V com mais detalhes.

Descrição

bltz desvia quando um registrador contém um número negativo. O nome significa desviar se menor que zero. A forma abaixo salta para a posição rotulada se rs for menor que zero, e continua para a próxima instrução caso contrário.

bltz rs, label

O montador reescreve esta pseudo-instrução como uma instrução real. Ela se torna a instrução abaixo, que compara o registrador com zero, o registrador que sempre contém 0.

blt rs, zero, label

A comparação é com sinal, então os 32 bits no registrador são lidos como um número que pode ser negativo. Um desvio compara dois registradores e não pode receber uma constante escrita na instrução, e é por isso que o 0 vem do registrador zero. Veja blt para desvios que comparam dois valores e beq para saber como os rótulos funcionam.

Para verificar se um valor é menor que zero, coloque o valor em um registrador e use bltz nele. Os casos usuais são testar o resultado de uma subtração para ver se ficou abaixo de zero, e testar o resultado de uma função que reporta um erro como número negativo.

sub t0, t1, t2
bltz t0, smaller

As linhas acima saltam para smaller quando o resultado da subtração é menor que zero. Um resultado exatamente 0 não é negativo e continua para a próxima instrução. O desvio oposto, que também recebe zero, é bgez.

Expande para

blt rs, zero, label

O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.

Exemplo

li t0, -3
bltz t0, done   # t0 < 0, so jump to 'done'