X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fieee754%2Ffpadd%2Fspecialcases.py;h=106d004b53b4294897c43b2d665626f8bd176ad9;hb=7199a76d8f721780fecc4868d31f9cbce6d3de35;hp=05931aac924937a169a1551370ce6823c5dbab83;hpb=0a7a13ab29550a7fc26f40aa93ba79905caa77e0;p=ieee754fpu.git diff --git a/src/ieee754/fpadd/specialcases.py b/src/ieee754/fpadd/specialcases.py index 05931aac..106d004b 100644 --- a/src/ieee754/fpadd/specialcases.py +++ b/src/ieee754/fpadd/specialcases.py @@ -6,17 +6,15 @@ from nmigen import Module, Signal, Cat, Const from nmigen.cli import main, verilog from math import log -from ieee754.fpcommon.modbase import FPModBase, FPModBaseChain +from nmutil.pipemodbase import PipeModBase, PipeModBaseChain from ieee754.fpcommon.fpbase import FPNumDecode -from nmutil.singlepipe import StageChain -from ieee754.pipeline import DynamicPipe from ieee754.fpcommon.fpbase import FPNumBaseRecord -from ieee754.fpcommon.getop import FPADDBaseData +from ieee754.fpcommon.basedata import FPBaseData from ieee754.fpcommon.denorm import (FPSCData, FPAddDeNormMod) -class FPAddSpecialCasesMod(FPModBase): +class FPAddSpecialCasesMod(PipeModBase): """ special cases: NaNs, infs, zeros, denormalised NOTE: some of these are unique to add. see "Special Operations" https://steve.hollasch.net/cgindex/coding/ieeefloat.html @@ -26,7 +24,7 @@ class FPAddSpecialCasesMod(FPModBase): super().__init__(pspec, "specialcases") def ispec(self): - return FPADDBaseData(self.pspec) + return FPBaseData(self.pspec) def ospec(self): return FPSCData(self.pspec, True) @@ -71,29 +69,6 @@ class FPAddSpecialCasesMod(FPModBase): with m.If(abnan): comb += self.o.z.nan(0) - # XXX WEIRDNESS for FP16 non-canonical NaN handling - # under review - - ## if a is zero and b is NaN return -b - #with m.If(a.is_zero & (a.s==0) & b.is_nan): - # comb += self.o.out_do_z.eq(1) - # comb += z.create(b.s, b.e, Cat(b.m[3:-2], ~b.m[0])) - - ## if b is zero and a is NaN return -a - #with m.Elif(b.is_zero & (b.s==0) & a.is_nan): - # comb += self.o.out_do_z.eq(1) - # comb += z.create(a.s, a.e, Cat(a.m[3:-2], ~a.m[0])) - - ## if a is -zero and b is NaN return -b - #with m.Elif(a.is_zero & (a.s==1) & b.is_nan): - # comb += self.o.out_do_z.eq(1) - # comb += z.create(a.s & b.s, b.e, Cat(b.m[3:-2], 1)) - - ## if b is -zero and a is NaN return -a - #with m.Elif(b.is_zero & (b.s==1) & a.is_nan): - # comb += self.o.out_do_z.eq(1) - # comb += z.create(a.s & b.s, a.e, Cat(a.m[3:-2], 1)) - # if a is inf return inf (or NaN) with m.Elif(a1.is_inf): comb += self.o.z.inf(a1.s) @@ -131,7 +106,7 @@ class FPAddSpecialCasesMod(FPModBase): return m -class FPAddSpecialCasesDeNorm(FPModBaseChain): +class FPAddSpecialCasesDeNorm(PipeModBaseChain): """ special cases chain """