remu
lyszt.net couvre remu et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
remu calcule le reste non signé, la valeur restante après une division non signée. Il est à divu ce que rem est à div. Le u signifie que les bits sont traités comme des nombres non négatifs, de 0 jusqu'à environ 4 milliards. La page divu explique comment les lectures signée et non signée des mêmes bits diffèrent.
Un résultat de remu se situe toujours entre 0 et le diviseur moins 1, il n'est donc jamais négatif et n'a pas de règle de signe. Cela le rend utile pour faire boucler une position autour d'un tampon circulaire, répartir des valeurs de hachage sur un nombre fixe d'emplacements et parcourir cycliquement une séquence répétitive.
Un reste par zéro renvoie le nombre d'origine.
Selon le manuel RISC-V, un débordement de division non signée ne peut pas se produire, donc remu n'a pas de cas de débordement. Un reste par zéro est égal au dividende. Le manuel recommande d'exécuter divu et remu sur les mêmes opérandes lorsque le quotient et le reste sont tous deux nécessaires, afin qu'un processeur puisse les fusionner en une seule division.
Pour un diviseur qui est une puissance de deux, un ET bit à bit (andi) donne le même résultat à moindre coût. La ligne ci-dessous calcule le reste après division par 8, puisque le reste par une puissance de deux correspond aux bits de poids faible de la valeur.
andi t0, t0, 7
Ce raccourci ne s'applique qu'aux puissances de deux.
Exemple
li t0, -1 li t1, 10 remu t2, t0, t1 # t2 = 5 (t0 read as unsigned)
