如何使用比较运算符是 riscv(<=, >=)

how to use comparison operators is riscv(<=, >=)

我无法理解如何仅使用 来实现 rs1 >= rs2 和 rs1 <= rs2 sltsltixori。我知道怎么做 rs1 < rs2 但是我真的找不到不使用 bne 来执行 <= 的方法,有人有想法吗?

您在寻找什么答案?尝试将布尔值放入寄存器,或分支到目标——这些会有不同的答案。

由于限制包括 xori,我们假设是前者。 xori 指令可用于取反布尔值。如果您不明白如何做到这一点,请查看 NOT on MIPS 或 RISC V,例如

因此,要执行 rs1 <= rs2,我们会执行 ! (rs2 < rs1),这在逻辑上与 rs2 >= rs1 相同,而在逻辑上与 rs1 <= rs2 相同。

不同之处在于 ! (rs2 < rs1) 可以直接实现 MIPS 指令集和您的限制。


如果您希望在 <= 上分支而不是生成布尔值,我们将计算 rs2 < rs1 然后在 false 上分支(使用 beq .. [=19=])而不是在 true 上分支使用(bne .. [=20=]).


所有6个关系操作都可以这样进行。您的工具包中的工具是:交换操作数边、取反布尔值、and/or false 分支与 true 分支。

询问编译器。

unsigned int fun ( unsigned int a, unsigned int b )
{
    unsigned int ret;
    
    ret=0;
    if(a<b) ret=1;
    return(ret);
}
00000000 <fun>:
   0:   00b53533            sltu    x10,x10,x11
   4:   8082                    c.jr    x1