sltu
lyszt.net cubre sltu y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
sltu establece el registro de destino en 1 o 0 como slt, y compara dos números como valores sin signo. El nombre significa set less than, unsigned. La página de slt cubre cómo almacenar el resultado de una comparación como un 1 o un 0.
Los mismos 32 bits se pueden leer como un número con signo, donde el bit superior significa negativo y el rango va aproximadamente de -2 mil millones a +2 mil millones, o como un número sin signo, sin negativos y con un rango de 0 a unos 4 mil millones. slt lee el valor con signo y sltu lee el valor sin signo. Un registro con todos los bits a 1 es -1 para slt y el mayor valor posible para sltu, por lo que las dos instrucciones pueden discrepar con entradas idénticas.
Usa sltu para cantidades que no pueden ser negativas, como direcciones de memoria, tamaños, recuentos y posiciones. Comparar dos direcciones de memoria con el slt con signo da un resultado incorrecto en cuanto una dirección es lo bastante grande como para activar su bit superior, ya que la lectura con signo la trata como negativa.
El manual de RISC-V describe slt y sltu juntas como las comparaciones con signo y sin signo que escriben 1 en rd si rs1 es menor que rs2 y 0 en caso contrario. Proporciona la línea siguiente como la forma de comprobar si no es cero, que es la pseudoinstrucción snez.
sltu rd, x0, rs2
La forma de sltu se muestra a continuación.
sltu rd, rs1, rs2
En el caso especial siguiente, rd se convierte en 1 siempre que rs sea cualquier cosa distinta de cero, ya que 0 es menor que cualquier otro valor sin signo. Esto reduce cualquier número a un 1 o un 0.
sltu rd, zero, rs
Ejemplo
li t0, -1 li t1, 1 sltu t2, t0, t1 # t2 = 0 (t0 read as unsigned is huge)
