diff --git a/softfloat/source/s_mulAddF32.c b/softfloat/source/s_mulAddF32.c index f324642..5c9cb59 100644 --- a/softfloat/source/s_mulAddF32.c +++ b/softfloat/source/s_mulAddF32.c @@ -92,14 +92,11 @@ float32_t goto infProdArg; } if ( expC == 0xFF ) { - // expC indicates special value if ( sigC ) { - //uiC is quiet NaN uiZ = 0; goto propagateNaN_ZC; } - //uiC is +- infinity - uiZ = (uiC & ~(1UL << 31)) | ((unsigned long)signC << 31); //set sign bit + uiZ = uiC; goto uiZ; } /*------------------------------------------------------------------------ @@ -212,22 +209,15 @@ float32_t /*------------------------------------------------------------------------ *------------------------------------------------------------------------*/ zeroProd: - if(expC | sigC){ - //3rd operand != 0 - uiZ = (uiC & ~(1UL << 31)) | ((unsigned long)(signC) << 31); //set sign bit - } - else { - //3rd operand == +-0 - if (signProd != signC) { - completeCancellation: - uiZ = packToF32UI((softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - uiZ = (uiC & ~(1UL << 31)) | ((unsigned long)signC << 31); //set sign bit + uiZ = uiC; + if ( ! (expC | sigC) && (signProd != signC) ) { + completeCancellation: + uiZ = + packToF32UI( + (softfloat_roundingMode == softfloat_round_min), 0, 0 ); } uiZ: uZ.ui = uiZ; return uZ.f; } -