remu
lyszt.net cubre remu y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
remu calcula el resto sin signo, el valor que queda después de una división sin signo. Se relaciona con divu como rem se relaciona con div. La u significa que los bits se tratan como números no negativos, desde 0 hasta aproximadamente 4 mil millones. La página de divu explica cómo difieren las lecturas con signo y sin signo de los mismos bits.
Un resultado de remu siempre cae entre 0 y el divisor menos 1, por lo que nunca es negativo y no tiene regla de signo. Esto lo hace útil para envolver una posición alrededor de un búfer circular, distribuir valores hash sobre un número fijo de ranuras y recorrer cíclicamente una secuencia repetitiva.
Un resto por cero devuelve el número original.
Según el manual de RISC-V, el desbordamiento de la división sin signo no puede ocurrir, por lo que remu no tiene caso de desbordamiento. Un resto por cero es igual al dividendo. El manual recomienda ejecutar divu y remu sobre los mismos operandos cuando se necesitan tanto el cociente como el resto, para que un procesador pueda fusionarlos en una sola división.
Para un divisor que es una potencia de dos, un AND bit a bit (andi) produce el mismo resultado de forma más económica. La línea siguiente calcula el resto después de dividir por 8, ya que el resto por una potencia de dos son los bits más bajos del valor.
andi t0, t0, 7
Este atajo solo se aplica a potencias de dos.
Ejemplo
li t0, -1 li t1, 10 remu t2, t0, t1 # t2 = 5 (t0 read as unsigned)
