[libre-riscv-dev] div/mod algorithm written in python

Luke Kenneth Casson Leighton lkcl at lkcl.net
Sun Jul 21 15:40:26 BST 2019

so, this is the first bit.  bear in mind that at this stage, both
self.i.a and self.i.b have been "denormalised".  they're 1 bit longer
than a "normal" FPnum, and the top mantissa bit in each of a and b
have been set to 1:

diff --git a/src/ieee754/fpdiv/div0.py b/src/ieee754/fpdiv/div0.py
 from ieee754.fpcommon.fpbase import FPState
 from ieee754.fpcommon.denorm import FPSCData
 from ieee754.fpcommon.getop import FPPipeContext
+from ieee754.div_rem_sqrt_rsqrt.div_pipe import DivPipeInputData

        with m.If(~self.i.out_do_z):
            # do conversion here, of both self.i.a and self.i.b,
            # into DivPipeCoreInputData dividend and divisor.

+            m.d.comb += [self.o.z.e.eq(self.i.a.e - self.i.b.e + 1),
+                         self.o.z.s.eq(self.i.a.s ^ self.i.b.s)
+                         self.o.dividend.eq(self.i.a.m), # TODO: check
+                         self.o.divisor_radicand.eq(self.i.b.m), # TODO: check
+                         self.o.operation.eq(Const(0)) # TODO (set from ctx.op)
+                ]

that's basically... errr.... job done.  (except for setting up the operation).


More information about the libre-riscv-dev mailing list