[libre-riscv-dev] [Bug 44] IEEE754 FPU inverse-sqrt

bugzilla-daemon at libre-riscv.org bugzilla-daemon at libre-riscv.org
Fri Jun 28 07:14:55 BST 2019


--- Comment #36 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
ok that's basically it: the infrastructure's in place.  it should
be clear that:

* FPDivStage0Mod is the first class that converts incoming
  (normalised) data into Q+R (whatever: the stuff that
  eventually becomes the div and rem)
* FPDivStage1Mod is part of the huuuuge chain that will
  take Q+R (whatever) and output Q+R (whatever)
* FPDivStage2Mod is the *last* one that takes Q+R (whatever)
  as input and drops it into the mantissa.

given that div *may* need the mantissa normalising to within a
range 0.5 to 1.0 (or somesuch), we *may* need an *extra*
pre-normalising stage.

it should be pretty clear from divstages.py how that can be

index 94c8a78..e1f8b11 100644 (file)
--- a/src/ieee754/fpdiv/divstages.py
+++ b/src/ieee754/fpdiv/divstages.py
@@ -16,6 +16,7 @@ from ieee754.fpcommon.postcalc import FPAddStage1Data
 # TODO: write these
 from .div0 import FPDivStage0Mod
 from .div1 import FPDivStage1Mod
+from .div2 import FPDivStage2Mod

 class FPDivStages(FPState, SimpleHandshake):
@@ -40,10 +41,12 @@ class FPDivStages(FPState, SimpleHandshake):
         # TODO.  clearly, this would be a for-loop, here, creating
         # a huge number of stages (if radix-2 is used).  interestingly
         # the number of stages will be data-dependent.
-        m0mod = FPDivStage0Mod(self.width, self.id_wid)
-        m1mod = FPDivStage1Mod(self.width, self.id_wid)
+        divstages = [FPDivStage0Mod(self.width, self.id_wid)]
+        for i in range(self.width): # XXX TODO: work out actual number needed
+            divstages.append(FPDivStage1Mod(self.width, self.id_wid))
+        divstages.append(FPDivStage2Mod(self.width, self.id_wid))

-        chain = StageChain([m0mod, m1mod])
+        chain = StageChain(divstages)
         chain.setup(m, i)

         self.o = m1mod.o

You are receiving this mail because:
You are on the CC list for the bug.

More information about the libre-riscv-dev mailing list