From: Andrew Waterman Date: Fri, 10 Sep 2010 00:50:10 +0000 (-0700) Subject: Revert "[xcc, sim] added slei/sleui in lieu of slti/sltiu" X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a71855cfd61d4b98a1e88aafae3891fca32f6a36;p=riscv-isa-sim.git Revert "[xcc, sim] added slei/sleui in lieu of slti/sltiu" This reverts commit bf5406d4df625678bc6ec20ce1d48541541dba54. We found a clever way to efficiently implement slti/sltiu despite the reversed operands. The trick is because of the following fact: (a < b) === !(b <= a) === !(b-1 < a) So just turn off the carry-in when doing the subtraction for the comparison. --- diff --git a/riscv/execute.h b/riscv/execute.h index 69bdeb0..15f90ef 100644 --- a/riscv/execute.h +++ b/riscv/execute.h @@ -480,12 +480,12 @@ switch((insn.bits >> 0x19) & 0x7f) } case 0x2: { - #include "insns/slei.h" + #include "insns/slti.h" break; } case 0x3: { - #include "insns/sleiu.h" + #include "insns/sltiu.h" break; } case 0x4: diff --git a/riscv/insns/slei.h b/riscv/insns/slei.h deleted file mode 100644 index 2f4fe29..0000000 --- a/riscv/insns/slei.h +++ /dev/null @@ -1 +0,0 @@ -RA = !(sreg_t(cmp_trunc(SIMM)) < sreg_t(cmp_trunc(RB))); diff --git a/riscv/insns/sleiu.h b/riscv/insns/sleiu.h deleted file mode 100644 index 2519eb4..0000000 --- a/riscv/insns/sleiu.h +++ /dev/null @@ -1 +0,0 @@ -RA = !(cmp_trunc(SIMM) < cmp_trunc(RB)); diff --git a/riscv/insns/slti.h b/riscv/insns/slti.h new file mode 100644 index 0000000..a5ef31e --- /dev/null +++ b/riscv/insns/slti.h @@ -0,0 +1 @@ +RA = sreg_t(cmp_trunc(RB)) < sreg_t(cmp_trunc(SIMM)); diff --git a/riscv/insns/sltiu.h b/riscv/insns/sltiu.h new file mode 100644 index 0000000..a09f3ec --- /dev/null +++ b/riscv/insns/sltiu.h @@ -0,0 +1 @@ +RA = cmp_trunc(RB) < cmp_trunc(SIMM);