bgt
pseudolyszt.net aborda bgt e outras instruções RISC-V com mais detalhes.
Descrição
bgt é um branch que dispara quando um valor é maior que outro. Seu nome significa branch if greater than (branch se maior que). A instrução abaixo salta para o rótulo quando rs1 é estritamente maior que rs2, comparando-os como valores com sinal.
bgt rs1, rs2, label
Nenhum dos seis branches principais do RISC-V testa o maior-que. Saber se a é maior que b é a mesma questão que saber se b é menor que a com os operandos trocados. bgt é uma pseudoinstrução, e o montador a reescreve como blt com os operandos invertidos. O hardware permanece mais simples e a comparação ainda pode ser escrita na direção que se lê naturalmente. O branch menor-que subjacente é descrito em blt.
Recorra a bgt quando a condição se lê naturalmente nessa direção, por exemplo para desviar quando um valor ultrapassa um máximo, quando um comprimento é maior que o espaço reservado para ele, ou ao escolher o maior de dois caminhos.
O manual do RISC-V afirma que bgt, bgtu, ble e bleu podem ser sintetizadas invertendo os operandos para blt, bltu, bge e bgeu.
Estritamente é a palavra decisiva. bgt não desvia quando os dois valores são iguais. Para contar também os valores iguais, use bge, que desvia em maior ou igual. Erros de off-by-one em laços e verificações geralmente vêm dessa distinção. A comparação é com sinal. Para dados sem sinal, a mesma troca se aplica a bltu.
Expande para
blt rs2, rs1, label
O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.
Exemplo
li t0, 5 li t1, 2 bgt t0, t1, done # 5 > 2, so jump to 'done'
