- with m.If(~self.i.out_do_z):
- # XXX hmmm, don't like repeating identical code
- m.d.comb += self.o.a.eq(self.i.a)
- with m.If(in_a.exp_n127):
- m.d.comb += self.o.a.e.eq(self.i.a.N126) # limit a exponent
- with m.Else():
- m.d.comb += self.o.a.m[-1].eq(1) # set top mantissa bit
-
- m.d.comb += self.o.b.eq(self.i.b)
- with m.If(in_b.exp_n127):
- m.d.comb += self.o.b.e.eq(self.i.b.N126) # limit a exponent
- with m.Else():
- m.d.comb += self.o.b.m[-1].eq(1) # set top mantissa bit
-
- m.d.comb += self.o.ctx.eq(self.i.ctx)
- m.d.comb += self.o.z.eq(self.i.z)
- m.d.comb += self.o.out_do_z.eq(self.i.out_do_z)
- m.d.comb += self.o.oz.eq(self.i.oz)
+ # XXX hmmm, don't like repeating identical code
+ comb += self.o.a.eq(self.i.a)
+ ae = self.i.a.e
+ am = self.i.a.m
+ # either limit exponent, or set top mantissa bit
+ comb += self.o.a.e.eq(Mux(in_a.exp_n127, self.i.a.N126, ae))
+ comb += self.o.a.m[-1].eq(Mux(in_a.exp_n127, am[-1], 1))
+
+ # XXX code now repeated for b
+ comb += self.o.b.eq(self.i.b)
+ be = self.i.b.e
+ bm = self.i.b.m
+ # either limit exponent, or set top mantissa bit
+ comb += self.o.b.e.eq(Mux(in_b.exp_n127, self.i.b.N126, be))
+ comb += self.o.b.m[-1].eq(Mux(in_b.exp_n127, bm[-1], 1))
+
+ comb += self.o.ctx.eq(self.i.ctx)
+ comb += self.o.z.eq(self.i.z)
+ comb += self.o.out_do_z.eq(self.i.out_do_z)
+ comb += self.o.oz.eq(self.i.oz)