sltiu

sltiu

Assembly RISC-V Riferimento

lyszt.net tratta sltiu e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

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

Descrizione

sltiu combina slti e sltu. Confronta un registro con una costante e tratta entrambi i valori come senza segno. Il nome impila le parti: set less than, immediate, unsigned. La forma seguente scrive 1 in rd quando rs1 è inferiore alla costante imm, con entrambi letti come numeri non negativi, e 0 altrimenti.

sltiu rd, rs1, imm

Senza segno, come nella pagina sltu, significa che il bit più alto conta come una cifra ordinaria del numero, quindi l'intervallo va da 0 a circa 4 miliardi. sltiu gestisce i controlli di intervallo su valori che non possono essere negativi, come verificare se un indice è inferiore alla dimensione di un array, in una sola istruzione.

La riga seguente chiede se il valore è inferiore a 1.

sltiu rd, rs, 1

Zero è l'unico valore senza segno inferiore a 1, quindi il risultato è 1 quando rs è zero e 0 altrimenti. Questo verifica l'uguaglianza con zero, e la scorciatoia seqz è costruita su di esso. L'uguaglianza tra due valori ne consegue. Esegui lo XOR dei due valori, che dà zero solo quando coincidono, e verifica il risultato rispetto a zero.

Il manuale RISC-V afferma che la costante viene prima estesa con il segno a 32 bit e poi trattata come un numero senza segno. Una costante negativa diventa quindi un valore senza segno molto grande. Il manuale indica sltiu con la costante 1 come modo per verificare lo zero, che è la pseudo-istruzione seqz.

Come con slti, le costanti oltre l'intervallo di 12 bit vengono caricate in un registro con li e confrontate con sltu.

Esempio

li t0, -1
sltiu t1, t0, 5   # t1 = 0 (t0 read as unsigned is huge)