sltiu
lyszt.net охоплює sltiu та інші інструкції RISC-V більш детально.
Формат кодування
Опис
sltiu поєднує slti та sltu. Він порівнює регістр із константою й трактує обидва значення як беззнакові. Назва складається з частин: set less than, immediate, unsigned. Наведена нижче форма записує 1 у rd, коли rs1 менше за константу imm, причому обидва значення читаються як невід'ємні числа, і 0 в іншому разі.
sltiu rd, rs1, imm
Беззнаковість, як і на сторінці sltu, означає, що старший біт вважається звичайною цифрою числа, тому діапазон простягається від 0 приблизно до 4 мільярдів. sltiu виконує перевірки діапазону для значень, які не можуть бути від'ємними, наприклад перевірку того, що індекс менший за розмір масиву, за одну інструкцію.
Наступний рядок запитує, чи значення менше за 1.
sltiu rd, rs, 1
Нуль — єдине беззнакове значення, менше за 1, тому результат дорівнює 1, коли rs дорівнює нулю, і 0 в іншому разі. Це перевірка на рівність нулю, і скорочення seqz побудоване на ній. Рівність двох значень випливає з неї. Виконайте XOR двох значень, що дає нуль лише тоді, коли вони збігаються, і перевірте результат на нуль.
Посібник RISC-V каже, що константа спершу розширюється зі знаком до 32 бітів, а потім трактується як беззнакове число. Тому від'ємна константа стає дуже великим беззнаковим значенням. Посібник наводить sltiu з константою 1 як спосіб перевірки на нуль, тобто псевдоінструкцію seqz.
Як і у випадку з slti, константи поза межами 12-бітного діапазону завантажуються в регістр за допомогою li й порівнюються з sltu.
Приклад
li t0, -1 sltiu t1, t0, 5 # t1 = 0 (t0 read as unsigned is huge)
