bgeu
lyszt.net cubre bgeu y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
bgeu es la versión sin signo de bge y lo opuesto de bltu. El nombre significa branch if greater than or equal, unsigned (bifurcar si es mayor o igual, sin signo). Salta a la etiqueta cuando rs1 es al menos rs2, con ambos leídos como números no negativos. Consulta bge para la comparación y bltu para lo que cambia el modo sin signo.
Con bgeu la familia tiene seis bifurcaciones. Hay tres preguntas: igual, menor que y mayor o igual, y las dos últimas vienen en forma con signo y sin signo. beq y bne comprueban la igualdad, blt y bge comparan valores con signo, y bltu y bgeu comparan valores sin signo. Estas seis, junto con intercambiar los operandos para las direcciones mayor que y menor o igual, cubren todas las comparaciones que un programa necesita.
bgeu es adecuada para límites de cantidades que no pueden ser negativas. Algunos ejemplos son salir de un bucle cuando una posición alcanza el final, rechazar un índice que ha alcanzado el tamaño del arreglo y bifurcar a un manejador cuando una longitud alcanza la capacidad. La comparación de direcciones de memoria usa bltu y bgeu, ya que las direcciones no tienen signo, y las versiones con signo dan resultados incorrectos ahí.
El manual de RISC-V dice que los límites de un arreglo con signo se pueden comprobar con una sola bifurcación sin signo, ya que cualquier índice negativo se compara como mayor que cualquier límite no negativo. bgeu y bltu son las dos formas de esa comprobación.
La línea siguiente realiza la comprobación combinada de límites en una sola instrucción.
bgeu i, n, error
Detecta un índice que es demasiado grande o negativo, porque un índice negativo se lee como un valor sin signo enorme y falla la prueba.
Ejemplo
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
