sltiu

sltiu

Asembler RISC-V Referencja

lyszt.net obejmuje sltiu i inne instrukcje RISC-V w większych szczegółach.

Format kodowania

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

Opis

sltiu łączy slti i sltu. Porównuje rejestr ze stałą i traktuje obie wartości jako bezznakowe. Nazwa składa się z części: set less than, immediate, unsigned. Poniższa postać zapisuje 1 do rd, gdy rs1 jest mniejsze od stałej imm, przy czym obie wartości są odczytywane jako liczby nieujemne, a w przeciwnym razie 0.

sltiu rd, rs1, imm

Bezznakowość, podobnie jak na stronie sltu, oznacza, że najstarszy bit liczy się jako zwykła cyfra liczby, więc zakres rozciąga się od 0 do około 4 miliardów. sltiu obsługuje sprawdzanie zakresu dla wartości, które nie mogą być ujemne, na przykład sprawdzanie, czy indeks jest mniejszy od rozmiaru tablicy, w jednej instrukcji.

Poniższy wiersz pyta, czy wartość jest mniejsza od 1.

sltiu rd, rs, 1

Zero jest jedyną bezznakową wartością mniejszą od 1, więc wynikiem jest 1, gdy rs wynosi zero, a w przeciwnym razie 0. To sprawdza równość z zerem, a skrót seqz jest na tym zbudowany. Równość między dwiema wartościami wynika z tego. Wykonaj XOR obu wartości, co daje zero tylko wtedy, gdy są równe, i sprawdź, czy wynik jest zerem.

Podręcznik RISC-V mówi, że stała jest najpierw rozszerzana znakowo do 32 bitów, a następnie traktowana jako liczba bezznakowa. Stała ujemna staje się więc bardzo dużą wartością bezznakową. Podręcznik podaje sltiu ze stałą 1 jako sposób sprawdzania zera, czyli pseudorozkaz seqz.

Podobnie jak w przypadku slti, stałe spoza zakresu 12 bitów są ładowane do rejestru za pomocą li i porównywane z sltu.

Przykład

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