bgtzpseudo

bgtz

pseudo
Ensamblador RISC-V Referencia

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

Descripción

bgtz toma una rama cuando el valor en un registro es positivo. El nombre significa branch if greater than zero (bifurcar si es mayor que cero). La forma a continuación salta a la posición etiquetada cuando rs es mayor que cero, y en caso contrario continúa con la siguiente instrucción.

bgtz rs, label

El ensamblador la trata como una pseudoinstrucción y la reescribe a la instrucción de abajo, que pregunta si zero es menor que el registro.

blt zero, rs, label

RISC-V no tiene una rama para mayor que, así que los operandos se intercambian y la rama menor que hace el trabajo, de la misma manera en que se construye bgt. La comparación es con signo. Cero no bifurca, lo que separa a bgtz de bgez. Consulta blt para la rama subyacente.

bgtz encaja en un bucle que debe continuar mientras quede algo por procesar, como un recuento de elementos restantes que sea mayor que cero. También comprueba si un resultado es mayor que cero.

bgtz a0, found

La línea anterior salta a found cuando a0 contiene 1 o más. Un valor de 0 o cualquier número negativo continúa con la siguiente instrucción.

Se expande a

blt zero, rs, label

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

Ejemplo

li t0, 4
bgtz t0, done   # t0 > 0, so jump to 'done'