sltu
lyszt.net охоплює sltu та інші інструкції RISC-V більш детально.
Формат кодування
Опис
sltu встановлює регістр призначення в 1 або 0, як slt, і порівнює два числа як беззнакові значення. Назва означає set less than, unsigned. Сторінка slt описує збереження результату порівняння як 1 або 0.
Ті самі 32 біти можна прочитати як число зі знаком, де старший біт означає від'ємне значення, а діапазон становить приблизно від -2 мільярдів до +2 мільярдів, або як беззнакове число, без від'ємних значень і з діапазоном від 0 до приблизно 4 мільярдів. slt читає значення зі знаком, а sltu — беззнакове. Регістр, усі біти якого встановлені в 1, для slt дорівнює -1, а для sltu — найбільшому можливому значенню, тому дві інструкції можуть розходитися на однакових вхідних даних.
Використовуйте sltu для величин, які не можуть бути від'ємними, як-от адреси пам'яті, розміри, лічильники та позиції. Порівняння двох адрес пам'яті за допомогою знакового slt дає неправильний результат, щойно адреса стає достатньо великою, щоб установити свій старший біт, оскільки знакове читання трактує її як від'ємну.
Посібник RISC-V описує slt і sltu разом як знакове та беззнакове порівняння, які записують 1 у rd, якщо rs1 менше за rs2, і 0 в іншому разі. У ньому наведено рядок нижче як спосіб перевірки на ненульове значення, що є псевдоінструкцією snez.
sltu rd, x0, rs2
Форму sltu показано нижче.
sltu rd, rs1, rs2
В особливому випадку нижче rd стає 1 щоразу, коли rs є чимось іншим, ніж нуль, оскільки 0 менше за будь-яке інше беззнакове значення. Це зводить будь-яке число до 1 або 0.
sltu rd, zero, rs
Приклад
li t0, -1 li t1, 1 sltu t2, t0, t1 # t2 = 0 (t0 read as unsigned is huge)
