bgt
pseudolyszt.net tratta bgt e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
bgt è un branch che scatta quando un valore è maggiore di un altro. Il suo nome sta per branch if greater than (salto se maggiore di). L'istruzione seguente salta all'etichetta quando rs1 è strettamente maggiore di rs2, confrontandoli come valori con segno.
bgt rs1, rs2, label
Nessuno dei sei branch principali di RISC-V verifica il maggiore-di. Se a è maggiore di b è la stessa domanda di se b è minore di a con gli operandi scambiati. bgt è una pseudoistruzione, e l'assembler la riscrive come blt con gli operandi invertiti. L'hardware rimane più semplice e il confronto può comunque essere scritto nella direzione che si legge naturalmente. Il branch minore-di sottostante è descritto in blt.
Ricorri a bgt quando la condizione si legge naturalmente in quella direzione, ad esempio per saltare una volta che un valore supera un massimo, quando una lunghezza è maggiore dello spazio riservato ad essa, o quando si sceglie il maggiore tra due percorsi.
Il manuale RISC-V afferma che bgt, bgtu, ble e bleu possono essere sintetizzate invertendo gli operandi in blt, bltu, bge e bgeu.
Strettamente è la parola portante. bgt non salta quando i due valori sono uguali. Per contare anche i valori uguali, usa bge, che salta su maggiore o uguale. Gli errori di off-by-one nei cicli e nei controlli di solito derivano da questa distinzione. Il confronto è con segno. Per i dati senza segno lo stesso scambio si applica a bltu.
Si espande in
blt rs2, rs1, label
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
li t0, 5 li t1, 2 bgt t0, t1, done # 5 > 2, so jump to 'done'
