bgeu
lyszt.net couvre bgeu et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
bgeu est la version non signée de bge et l'opposé de bltu. Le nom signifie branch if greater than or equal, unsigned. Il saute vers l'étiquette lorsque rs1 est au moins égal à rs2, les deux étant lus comme des nombres non négatifs. Voir bge pour la comparaison et bltu pour ce que change le caractère non signé.
Avec bgeu, la famille compte six branches. Il y a trois questions, égal, inférieur à et supérieur ou égal, et les deux dernières existent sous forme signée et non signée. beq et bne testent l'égalité, blt et bge comparent des valeurs signées, et bltu et bgeu comparent des valeurs non signées. Ces six instructions, combinées à la permutation des opérandes pour les directions supérieur à et inférieur ou égal, couvrent toutes les comparaisons dont un programme a besoin.
bgeu convient aux limites portant sur des quantités qui ne peuvent pas être négatives. Par exemple, quitter une boucle lorsqu'une position atteint la fin, rejeter un indice qui a atteint la taille du tableau et brancher vers un gestionnaire lorsqu'une longueur atteint la capacité. La comparaison d'adresses mémoire utilise bltu et bgeu, car les adresses sont non signées, et les versions signées y donnent des résultats erronés.
Le manuel RISC-V indique que les bornes signées d'un tableau peuvent être vérifiées avec un seul branchement non signé, car tout indice négatif se compare comme supérieur à toute borne non négative. bgeu et bltu sont les deux formes de cette vérification.
La ligne ci-dessous effectue la vérification combinée des bornes en une seule instruction.
bgeu i, n, error
Elle intercepte un indice trop grand ou négatif, car un indice négatif est lu comme une valeur non signée énorme et échoue au test.
Exemple
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
