snez
псевдо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
