bgtz
pseudolyszt.net aborda bgtz e outras instruções RISC-V com mais detalhes.
Descrição
bgtz faz um desvio quando o valor em um registrador é positivo. O nome significa branch if greater than zero (desviar se maior que zero). A forma abaixo salta para a posição rotulada quando rs é maior que zero e, caso contrário, segue para a próxima instrução.
bgtz rs, label
O montador a trata como uma pseudoinstrução e a reescreve para a instrução abaixo, que pergunta se zero é menor que o registrador.
blt zero, rs, label
O RISC-V não tem desvio para maior que, então os operandos são trocados e o desvio de menor que faz o trabalho, da mesma forma que bgt é construído. A comparação é com sinal. Zero não desvia, o que separa bgtz de bgez. Veja blt para o desvio subjacente.
bgtz serve para um laço que deve continuar enquanto houver algo a processar, como uma contagem de itens restantes maior que zero. Ele também testa se um resultado é maior que zero.
bgtz a0, found
A linha acima salta para found quando a0 contém 1 ou mais. Um valor de 0 ou qualquer número negativo segue para a próxima instrução.
Expande para
blt zero, rs, label
O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.
Exemplo
li t0, 4 bgtz t0, done # t0 > 0, so jump to 'done'
