sltiu
lyszt.net behandelt sltiu und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
sltiu kombiniert slti und sltu. Es vergleicht ein Register mit einer Konstante und behandelt beide Werte als vorzeichenlos. Der Name stapelt die Teile: set less than, immediate, unsigned. Die folgende Form schreibt 1 in rd, wenn rs1 unter der Konstante imm liegt, wobei beide als nicht negative Zahlen gelesen werden, und sonst 0.
sltiu rd, rs1, imm
Vorzeichenlos bedeutet, wie auf der sltu-Seite, dass das höchste Bit als gewöhnliche Ziffer der Zahl zählt, sodass der Bereich von 0 bis etwa 4 Milliarden reicht. sltiu erledigt Bereichsprüfungen für Werte, die nicht negativ sein können, wie etwa das Prüfen, ob ein Index unter der Größe eines Arrays liegt, in einer einzigen Anweisung.
Die folgende Zeile fragt, ob der Wert unter 1 liegt.
sltiu rd, rs, 1
Null ist der einzige vorzeichenlose Wert unter 1, also ist das Ergebnis 1, wenn rs null ist, und sonst 0. Dies testet auf Gleichheit mit null, und die seqz-Kurzform baut darauf auf. Die Gleichheit zwischen zwei Werten folgt daraus. Verknüpfe die beiden Werte mit XOR, was nur dann null ergibt, wenn sie übereinstimmen, und teste das Ergebnis auf null.
Das RISC-V-Handbuch sagt, dass die Konstante zuerst auf 32 Bit vorzeichenerweitert und dann als vorzeichenlose Zahl behandelt wird. Eine negative Konstante wird daher zu einem sehr großen vorzeichenlosen Wert. Das Handbuch gibt sltiu mit der Konstante 1 als Möglichkeit an, auf null zu testen, was die seqz-Pseudoanweisung ist.
Wie bei slti werden Konstanten außerhalb des 12-Bit-Bereichs mit li in ein Register geladen und mit sltu verglichen.
Beispiel
li t0, -1 sltiu t1, t0, 5 # t1 = 0 (t0 read as unsigned is huge)
