remu

remu

Assembleur RISC-V Référence

lyszt.net couvre remu et d'autres instructions RISC-V plus en détail.

Format d'encodage

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

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)