divu
lyszt.net couvre divu et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
divu effectue une division non signée. Les 32 bits d'un registre peuvent être interprétés de deux manières. Selon la lecture signée, le bit de poids fort indique un nombre négatif, de sorte que les bits représentent des valeurs allant d'environ -2 milliards à +2 milliards. Selon la lecture non signée, aucun négatif n'existe et les bits comptent de 0 à environ 4 milliards. Les bits ne changent pas. Seule l'interprétation change.
div traite ses entrées comme signées, tandis que divu les traite comme non signées. Près du haut de la plage, les deux produisent des résultats différents. Un registre dont tous les bits valent 1 vaut -1 pour div et 4 294 967 295 pour divu.
divu convient aux valeurs qui ne peuvent pas être négatives : positions dans un tableau, tailles en octets, compteurs de boucle, coordonnées de pixel. Une fois qu'une de ces valeurs dépasse environ 2 milliards, div signé renvoie des résultats erronés. Le bit de poids fort s'active, et la lecture signée rend la valeur négative.
Le manuel RISC-V définit le quotient d'une division non signée par zéro comme tous les bits à 1, et le reste comme égal au dividende. Le débordement de division non signée ne peut pas se produire, selon le manuel. Tous les bits à 1 correspondent au plus grand nombre non signé, et les circuits diviseurs non signés simples le produisent d'eux-mêmes. C'est pourquoi le manuel l'a choisi.
La division par zéro renvoie la plus grande valeur non signée, avec tous les bits à 1. Si le diviseur est une puissance de deux, un décalage logique à droite (srli) divise plus rapidement. Un décalage à droite de 3 divise un nombre non signé par 8.
Exemple
li t0, -2 li t1, 2 divu t2, t0, t1 # t2 = 2147483647 (t0 read as unsigned)
