bge

bge

Assembleur RISC-V Référence

lyszt.net couvre bge et d'autres instructions RISC-V plus en détail.

Format d'encodage

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Description

bge s'associe à blt et inverse sa condition. Les lettres signifient branch if greater than or equal (branchement si supérieur ou égal). Lorsque rs1 est au moins égal à rs2, l'instruction ci-dessous saute à la position étiquetée. Sinon, l'exécution se poursuit avec l'instruction suivante.

bge rs1, rs2, label

Pour deux valeurs quelconques, exactement l'une de blt et bge prend le branchement, de sorte que les deux couvrent tous les cas. La comparaison est décrite sous blt, et les branchements en général sous beq.

bge apparaît couramment en haut d'une boucle comme test de sortie. La ligne ci-dessous quitte la boucle une fois que le compteur t1 atteint sa limite t2.

bge t1, t2, done

Le corps de la boucle suit, et un saut inconditionnel à sa fin revient au début. Tester avant le corps gère zéro répétition, puisqu'un corps dont la condition est déjà vérifiée ne s'exécute jamais.

La partie or equal (ou égal) détermine le comportement à la frontière. bge branche lorsque les deux valeurs sont égales, et les erreurs de décalage d'une unité dans les boucles remontent généralement à cette frontière. Une boucle qui compte de 0 jusqu'à n se termine lorsque le compteur atteint n.

Selon le manuel RISC-V, bge et bgeu prennent le branchement lorsque rs1 est supérieur ou égal à rs2, comparant respectivement des valeurs signées et non signées. Un décalage de branchement est une valeur de 12 bits mesurée en multiples de 2 octets.

Comme pour blt, la comparaison est signée, donc les valeurs négatives sont autorisées. bgeu est la forme non signée, utilisée pour les adresses et les tailles. Un usage courant consiste à vérifier qu'une valeur est non négative, comme dans la ligne ci-dessous.

bge t0, zero, ok

Exemple

bge t1, t2, done   # leave the loop once i >= n