diff --git a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a index b4466d620..442544836 100644 Binary files a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a and b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a differ diff --git a/addins/embench-iot b/addins/embench-iot index 261a65e0a..2d2aaa7b8 160000 --- a/addins/embench-iot +++ b/addins/embench-iot @@ -1 +1 @@ -Subproject commit 261a65e0a2d3e8d62d81b1d8fe7e309a096bc6a9 +Subproject commit 2d2aaa7b85c60219c591555b647dfa1785ffe1b3 diff --git a/addins/riscv-arch-test b/addins/riscv-arch-test index be67c99bd..effd553a6 160000 --- a/addins/riscv-arch-test +++ b/addins/riscv-arch-test @@ -1 +1 @@ -Subproject commit be67c99bd461742aa1c100bcc0732657faae2230 +Subproject commit effd553a6a91ed9b0ba251796a8a44505a45174f diff --git a/addins/riscv-dv b/addins/riscv-dv index a7e27bc04..cb4295f9c 160000 --- a/addins/riscv-dv +++ b/addins/riscv-dv @@ -1 +1 @@ -Subproject commit a7e27bc046405f0dbcde091be99f5a5d564e2172 +Subproject commit cb4295f9ce5da2881d7746015a6105adb8f09071 diff --git a/addins/riscv-tests b/addins/riscv-tests index cf04274f5..3e2bf06b0 160000 --- a/addins/riscv-tests +++ b/addins/riscv-tests @@ -1 +1 @@ -Subproject commit cf04274f50621fd9ef9147793cca6dd1657985c7 +Subproject commit 3e2bf06b071a77ae62c09bf07c5229d1f9397d94 diff --git a/pipelined/src/fpu/fcmp.sv b/pipelined/src/fpu/fcmp.sv index 1fbcae5e2..61f37b00e 100755 --- a/pipelined/src/fpu/fcmp.sv +++ b/pipelined/src/fpu/fcmp.sv @@ -23,40 +23,32 @@ module fcmp ( output logic [`FLEN-1:0] CmpResE // compare resilt ); - logic LT, EQ; // is X < or > or = Y - - // X is less than Y: - // Signs: - // X Y answer - // pos pos idk - keep checking - // pos neg no - // neg pos yes - // neg neg idk - keep checking - // Exponent - // - if XExp < YExp - // - if negitive - no - // - if positive - yes - // - otherwise keep checking - // Mantissa - // - XMan < YMan then - // - if negitive - no - // - if positive - yes - // note: LT does -0 < 0 - //*** compare Exp and Man together - assign LT = XSgnE^YSgnE ? XSgnE : XExpE==YExpE ? ((XManE or = Y + logic BothZeroE, EitherNaNE, EitherSNaNE; + + assign LTabs= {1'b0, XExpE, XManE} < {1'b0, YExpE, YManE}; // unsigned comparison, treating FP as integers + assign LT = (XSgnE & ~YSgnE) | (XSgnE & YSgnE & ~LTabs & ~EQ) | (~XSgnE & ~YSgnE & LTabs); + //assign LT = $signed({XSgnE, XExpE, XManE[`NF-1:0]}) < $signed({YSgnE, YExpE, YManE[`NF-1:0]}); + //assign LT = XInt < YInt; +// assign LT = XSgnE^YSgnE ? XSgnE : XExpE==YExpE ? ((XManE