bgtpseudo

bgt

pseudo
Assembly RISC-V Riferimento

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