remove out_do_z test
[ieee754fpu.git] / src / ieee754 / fpcommon / denorm.py
1 """IEEE754 Floating Point Library
2
3 Copyright (C) 2019 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
4
5 """
6
7 from nmigen import Module
8 from nmigen.cli import main, verilog
9 from math import log
10
11 from nmutil.pipemodbase import PipeModBase
12 from ieee754.fpcommon.fpbase import FPNumBase
13 from ieee754.fpcommon.pscdata import FPSCData
14
15
16 class FPAddDeNormMod(PipeModBase):
17
18 def __init__(self, pspec, m_extra):
19 self.m_extra = m_extra
20 super().__init__(pspec, "denormalise")
21
22 def ispec(self):
23 return FPSCData(self.pspec, self.m_extra)
24
25 def ospec(self):
26 return FPSCData(self.pspec, self.m_extra)
27
28 def elaborate(self, platform):
29 m = Module()
30 comb = m.d.comb
31
32 m.submodules.denorm_in_a = in_a = FPNumBase(self.i.a)
33 m.submodules.denorm_in_b = in_b = FPNumBase(self.i.b)
34
35 with m.If(~self.i.out_do_z):
36 # XXX hmmm, don't like repeating identical code
37 comb += self.o.a.eq(self.i.a)
38 with m.If(in_a.exp_n127):
39 comb += self.o.a.e.eq(self.i.a.N126) # limit a exponent
40 with m.Else():
41 comb += self.o.a.m[-1].eq(1) # set top mantissa bit
42
43 comb += self.o.b.eq(self.i.b)
44 with m.If(in_b.exp_n127):
45 comb += self.o.b.e.eq(self.i.b.N126) # limit a exponent
46 with m.Else():
47 comb += self.o.b.m[-1].eq(1) # set top mantissa bit
48
49 comb += self.o.ctx.eq(self.i.ctx)
50 comb += self.o.z.eq(self.i.z)
51 comb += self.o.out_do_z.eq(self.i.out_do_z)
52 comb += self.o.oz.eq(self.i.oz)
53
54 return m