remu
lyszt.net tratta remu e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
remu calcola il resto senza segno, il valore che rimane dopo una divisione senza segno. Si rapporta a divu come rem si rapporta a div. La u significa che i bit sono trattati come numeri non negativi, da 0 fino a circa 4 miliardi. La pagina divu spiega come differiscono le letture con segno e senza segno degli stessi bit.
Un risultato di remu cade sempre tra 0 e il divisore meno 1, quindi non è mai negativo e non ha una regola del segno. Ciò lo rende utile per far girare una posizione attorno a un buffer circolare, distribuire valori di hash su un numero fisso di slot e scorrere ciclicamente una sequenza ripetitiva.
Un resto per zero restituisce il numero originale.
Secondo il manuale RISC-V, l'overflow della divisione senza segno non può verificarsi, quindi remu non ha un caso di overflow. Un resto per zero è uguale al dividendo. Il manuale raccomanda di eseguire divu e remu sugli stessi operandi quando servono sia il quoziente sia il resto, così un processore può fonderli in un'unica divisione.
Per un divisore che è una potenza di due, un AND bit a bit (andi) produce lo stesso risultato in modo più economico. La riga seguente calcola il resto dopo la divisione per 8, poiché il resto per una potenza di due è costituito dai bit più bassi del valore.
andi t0, t0, 7
Questa scorciatoia si applica solo alle potenze di due.
Esempio
li t0, -1 li t1, 10 remu t2, t0, t1 # t2 = 5 (t0 read as unsigned)
