small optimisation, move subtraction of -126 from exponent into FPNumBase module...
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 3 Mar 2019 10:12:04 +0000 (10:12 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 3 Mar 2019 10:12:04 +0000 (10:12 +0000)
src/add/fpbase.py
src/add/nmigen_add_experiment.py

index d8073d5355ae1f787c9b07e73eae0cb02f49d276..58b4994a4de4ea8904156dca641e41bb6e0f3d27 100644 (file)
@@ -96,6 +96,7 @@ class FPNumBase:
         self.is_overflowed = Signal(reset_less=True)
         self.is_denormalised = Signal(reset_less=True)
         self.exp_128 = Signal(reset_less=True)
+        self.exp_sub_n126 = Signal((e_width, True), reset_less=True)
         self.exp_lt_n126 = Signal(reset_less=True)
         self.exp_gt_n126 = Signal(reset_less=True)
         self.exp_gt127 = Signal(reset_less=True)
@@ -112,8 +113,9 @@ class FPNumBase:
         m.d.comb += self.is_overflowed.eq(self._is_overflowed())
         m.d.comb += self.is_denormalised.eq(self._is_denormalised())
         m.d.comb += self.exp_128.eq(self.e == self.P128)
-        m.d.comb += self.exp_gt_n126.eq(self.e > self.N126)
-        m.d.comb += self.exp_lt_n126.eq(self.e < self.N126)
+        m.d.comb += self.exp_sub_n126.eq(self.e - self.N126)
+        m.d.comb += self.exp_gt_n126.eq(self.exp_sub_n126 > 0)
+        m.d.comb += self.exp_lt_n126.eq(self.exp_sub_n126 < 0)
         m.d.comb += self.exp_gt127.eq(self.e > self.P127)
         m.d.comb += self.exp_n127.eq(self.e == self.N127)
         m.d.comb += self.exp_n126.eq(self.e == self.N126)
index 6e797c016f1845b9e82df7fe61088bedfd842b53..6e259fd9abb4699c4e5a765043261b8e4280148e 100644 (file)
@@ -610,8 +610,8 @@ class FPNorm1Mod:
                 clz = Signal((len(in_z.e), True), reset_less=True)
                 # make sure that the amount to decrease by does NOT
                 # go below the minimum non-INF/NaN exponent
-                limclz = Mux(in_z.e - pe.o - in_z.N126 > 0, pe.o,
-                             in_z.e - in_z.N126)
+                limclz = Mux(in_z.exp_sub_n126 > pe.o, pe.o,
+                             in_z.exp_sub_n126)
                 m.d.comb += [
                     # cat round and guard bits back into the mantissa
                     temp_m.eq(Cat(in_of.round_bit,