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 定义为以 x0 作为第一个源操作数的 sltu 的汇编器伪指令。如果 rs2 不等于零,则将 rd 置为 1,否则置为 0。
snez 与 XOR 配合来测试不相等。对两个值进行 XOR,仅当它们不同时才会得到非零结果,然后应用 snez 在它们不同时得到 1。与 seqz 一起,这为相等和不相等产生真或假的结果,你可以将其与 and 和 or 组合成更大的条件,而无需跳转。
展开为
sltu rd, zero, rs
汇编器会将此伪指令替换为上面列出的真实指令或指令。
示例
li t0, 5 snez t1, t0 # t1 = 1
