bgtpseudo

bgt

pseudo
Assembly RISC-V Referência

lyszt.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'