bgeu
lyszt.net tratta bgeu e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
bgeu è la versione senza segno di bge e l'opposto di bltu. Il nome significa branch if greater than or equal, unsigned. Salta all'etichetta quando rs1 è almeno rs2, con entrambi letti come numeri non negativi. Vedi bge per il confronto e bltu per ciò che cambia la versione senza segno.
Con bgeu la famiglia ha sei branch. Ci sono tre domande, uguale, minore di e maggiore o uguale, e le ultime due esistono in forma con segno e senza segno. beq e bne verificano l'uguaglianza, blt e bge confrontano valori con segno, e bltu e bgeu confrontano valori senza segno. Questi sei, insieme allo scambio degli operandi per le direzioni maggiore di e minore o uguale, coprono ogni confronto di cui un programma ha bisogno.
bgeu è adatto ai limiti su quantità che non possono essere negative. Esempi sono uscire da un ciclo quando una posizione raggiunge la fine, rifiutare un indice che ha raggiunto la dimensione dell'array e saltare a un handler quando una lunghezza raggiunge la capacità. Il confronto degli indirizzi di memoria usa bltu e bgeu, poiché gli indirizzi sono senza segno, e le versioni con segno danno risultati errati in quel caso.
Il manuale RISC-V afferma che i limiti di un array con segno possono essere verificati con un singolo branch senza segno, poiché qualsiasi indice negativo viene confrontato come maggiore di qualsiasi limite non negativo. bgeu e bltu sono le due forme di questa verifica.
La riga seguente esegue la verifica combinata dei limiti in una sola istruzione.
bgeu i, n, error
Intercetta un indice troppo grande o negativo, perché un indice negativo viene letto come un enorme valore senza segno e non supera il test.
Esempio
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
