blepseudo

ble

pseudo
Assembly RISC-V Referência

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

Descrição

ble desvia quando um valor é menor ou igual a outro. O nome significa « branch if less than or equal » (desviar se menor ou igual). A forma abaixo salta para o rótulo quando rs1 é no máximo rs2, usando uma comparação com sinal.

ble rs1, rs2, label

ble é uma pseudoinstrução que depende da troca de operandos, como bgt faz. Perguntar se a é menor ou igual a b equivale a perguntar se b é maior ou igual a a, então o montador reescreve ble como bge com os operandos invertidos. Nenhuma instrução de máquina dedicada é necessária. Veja bge para o desvio subjacente.

ble é adequada para laços e intervalos que incluem seu ponto final. Um laço que executa enquanto um contador é no máximo n, com n incluído, lê-se claramente com ble. O mesmo laço com o estrito blt precisa de n mais um. Verificações de intervalo a usam junto com os outros desvios. Desvie se um valor estiver abaixo do mínimo, desvie se estiver acima do máximo, e o que resta passou.

O manual RISC-V afirma que bgt, bgtu, ble e bleu podem ser sintetizadas invertendo os operandos para blt, bltu, bge e bgeu.

Valores iguais desviam com ble, o que o torna o oposto de bgt nos mesmos operandos. Para qualquer par, um deles desvia. A comparação é com sinal, então os valores podem ser negativos. blt, bge, bgt e ble juntos fornecem todas as quatro direções de ordenação com sinal.

Expande para

bge rs2, rs1, label

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

Exemplo

li t0, 2
li t1, 5
ble t0, t1, done   # 2 <= 5, so jump to 'done'