sltu
lyszt.net couvre sltu et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
sltu définit le registre de destination à 1 ou 0 comme slt, et il compare deux nombres en tant que valeurs non signées. Le nom signifie set less than, unsigned. La page slt couvre le stockage d'un résultat de comparaison sous la forme d'un 1 ou d'un 0.
Les mêmes 32 bits peuvent être lus comme un nombre signé, avec le bit de poids fort signifiant négatif et une plage d'environ -2 milliards à +2 milliards, ou comme un nombre non signé, sans négatifs et avec une plage de 0 à environ 4 milliards. slt lit la valeur signée et sltu lit la valeur non signée. Un registre dont tous les bits sont à 1 vaut -1 pour slt et la plus grande valeur possible pour sltu, donc les deux instructions peuvent être en désaccord sur des entrées identiques.
Utilisez sltu pour les quantités qui ne peuvent pas être négatives, telles que les adresses mémoire, les tailles, les compteurs et les positions. Comparer deux adresses mémoire avec le slt signé donne un résultat erroné dès qu'une adresse est suffisamment grande pour que son bit de poids fort soit à 1, car la lecture signée la traite comme négative.
Le manuel RISC-V décrit slt et sltu ensemble comme les comparaisons signée et non signée qui écrivent 1 dans rd si rs1 est inférieur à rs2 et 0 sinon. Il donne la ligne ci-dessous comme moyen de tester la non-nullité, ce qui est la pseudo-instruction snez.
sltu rd, x0, rs2
La forme de sltu est montrée ci-dessous.
sltu rd, rs1, rs2
Dans le cas particulier ci-dessous, rd devient 1 chaque fois que rs est différent de zéro, puisque 0 est inférieur à toute autre valeur non signée. Cela réduit tout nombre à un 1 ou un 0.
sltu rd, zero, rs
Exemple
li t0, -1 li t1, 1 sltu t2, t0, t1 # t2 = 0 (t0 read as unsigned is huge)
