bge
lyszt.net aborda bge e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
bge faz par com blt e inverte sua condição. As letras significam branch if greater than or equal (desvio se maior ou igual). Quando rs1 é pelo menos rs2, a instrução abaixo salta para a posição rotulada. Caso contrário, a execução continua com a próxima instrução.
bge rs1, rs2, label
Para quaisquer dois valores, exatamente um entre blt e bge realiza o desvio, de modo que os dois cobrem todos os casos. A comparação é descrita em blt, e os desvios em geral em beq.
bge costuma aparecer no topo de um laço como teste de saída. A linha abaixo deixa o laço assim que o contador t1 atinge seu limite t2.
bge t1, t2, done
O corpo do laço vem em seguida, e um salto incondicional em seu final retorna ao topo. Testar antes do corpo trata zero repetições, já que um corpo cuja condição já é satisfeita nunca é executado.
A parte or equal (ou igual) decide o comportamento na fronteira. bge desvia quando os dois valores são iguais, e erros de off-by-one em laços geralmente remontam a essa fronteira. Um laço que conta de 0 até n sai quando o contador atinge n.
De acordo com o manual RISC-V, bge e bgeu realizam o desvio quando rs1 é maior ou igual a rs2, comparando valores com sinal e sem sinal, respectivamente. Um deslocamento de desvio é um valor de 12 bits medido em múltiplos de 2 bytes.
Assim como em blt, a comparação é com sinal, então valores negativos são permitidos. bgeu é a forma sem sinal, usada para endereços e tamanhos. Um uso comum é verificar que um valor é não negativo, como na linha abaixo.
bge t0, zero, ok
Exemplo
bge t1, t2, done # leave the loop once i >= n
