sltiu
lyszt.net couvre sltiu et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
sltiu combine slti et sltu. Il compare un registre à une constante et traite les deux valeurs comme non signées. Le nom empile les parties : set less than, immediate, unsigned. La forme ci-dessous écrit 1 dans rd lorsque rs1 est inférieur à la constante imm, les deux étant lues comme des nombres non négatifs, et 0 sinon.
sltiu rd, rs1, imm
Non signé, comme sur la page sltu, signifie que le bit de poids fort compte comme un chiffre ordinaire du nombre, donc la plage va de 0 à environ 4 milliards. sltiu gère les contrôles de plage sur des valeurs qui ne peuvent pas être négatives, comme vérifier si un indice est inférieur à la taille d'un tableau, en une seule instruction.
La ligne ci-dessous demande si la valeur est inférieure à 1.
sltiu rd, rs, 1
Zéro est la seule valeur non signée inférieure à 1, donc le résultat est 1 lorsque rs vaut zéro et 0 sinon. Cela teste l'égalité à zéro, et le raccourci seqz en est construit. L'égalité entre deux valeurs en découle. Faites un XOR des deux valeurs, ce qui donne zéro uniquement lorsqu'elles correspondent, et testez le résultat par rapport à zéro.
Le manuel RISC-V indique que la constante est d'abord étendue en signe à 32 bits puis traitée comme un nombre non signé. Une constante négative devient donc une très grande valeur non signée. Le manuel donne sltiu avec la constante 1 comme moyen de tester zéro, ce qui est la pseudo-instruction seqz.
Comme pour slti, les constantes au-delà de la plage de 12 bits sont chargées dans un registre avec li et comparées avec sltu.
Exemple
li t0, -1 sltiu t1, t0, 5 # t1 = 0 (t0 read as unsigned is huge)
