snezпсевдо

snez

псевдо
Асемблер RISC-V Посилання

lyszt.net охоплює snez та інші інструкції RISC-V більш детально.

Опис

snez перевіряє, чи містить регістр значення, відмінне від нуля, — це обернена операція до seqz. Назва означає «встановити, якщо не дорівнює нулю». Коли rs не дорівнює нулю, наведена нижче форма записує 1 у rd, а коли rs дорівнює нулю — записує 0.

snez rd, rs

snez — це псевдоінструкція, як і seqz, і асемблер розгортає її в реальну інструкцію. Ця інструкція перевіряє, чи нуль менший за значення.

sltu rd, zero, rs

Це виконується для будь-якого значення, крім нуля. Асемблер виконує перетворення, коли ви пишете snez.

Обчислення часто дає значення, єдиною корисною властивістю якого є те, чи дорівнює воно нулю, наприклад кількість елементів, що залишилися, різниця між двома величинами або група прапорців. snez зводить це значення до 1, коли воно не дорівнює нулю, і до 0, коли воно дорівнює нулю, — стандартна форма функції, що повертає відповідь «так» або «ні».

Посібник RISC-V визначає snez як псевдоінструкцію асемблера для sltu з x0 як першим джерелом. Вона встановлює rd у 1, якщо rs2 не дорівнює нулю, і в 0 в іншому випадку.

snez працює з XOR для перевірки нерівності. Застосуйте XOR до двох значень, що дає ненульовий результат лише тоді, коли вони різняться, потім застосуйте snez, щоб отримати 1, коли вони різні. Разом із seqz це дає результат «істина» або «хибність» для рівності та нерівності, який можна поєднувати з and і or у більші умови без переходу.

Розгортається до

sltu rd, zero, rs

Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.

Приклад

li t0, 5
snez t1, t0       # t1 = 1