bgtpseudo

bgt

pseudo
Ensamblador RISC-V Referencia

lyszt.net cubre bgt y otras instrucciones RISC-V con más detalle.

Descripción

bgt es una rama que se activa cuando un valor es mayor que otro. Su nombre significa branch if greater than (rama si es mayor que). La instrucción siguiente salta a la etiqueta cuando rs1 es estrictamente mayor que rs2, comparándolos como valores con signo.

bgt rs1, rs2, label

Ninguna de las seis ramas principales de RISC-V comprueba si es mayor que. Que a sea mayor que b es la misma pregunta que si b es menor que a con los operandos intercambiados. bgt es una pseudoinstrucción, y el ensamblador la reescribe como blt con los operandos invertidos. El hardware se mantiene más simple y la comparación aún puede escribirse en la dirección que se lee de forma natural. La rama de menor que subyacente se describe en blt.

Recurre a bgt cuando la condición se lea de forma natural en esa dirección, por ejemplo para saltar cuando un valor supera un máximo, cuando una longitud es mayor que el espacio reservado para ella, o al elegir el mayor de dos caminos.

El manual de RISC-V indica que bgt, bgtu, ble y bleu pueden sintetizarse invirtiendo los operandos a blt, bltu, bge y bgeu.

Estrictamente es la palabra clave. bgt no salta cuando los dos valores son iguales. Para contar también los valores iguales, usa bge, que salta si es mayor o igual. Los errores por desfase de uno en bucles y comprobaciones suelen provenir de esta distinción. La comparación es con signo. Para datos sin signo se aplica el mismo intercambio a bltu.

Se expande a

blt rs2, rs1, label

El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.

Ejemplo

li t0, 5
li t1, 2
bgt t0, t1, done   # 5 > 2, so jump to 'done'