fixes concerning FMADD_S, FMSUB_S, FNMADD_S, and FNSUB_S

mostly about ensuring correct sign
This commit is contained in:
2024-07-29 21:07:54 +02:00
parent 93d89e07ca
commit 7ffa7667b6
2 changed files with 13 additions and 3 deletions

View File

@ -92,11 +92,14 @@ float32_t
goto infProdArg;
}
if ( expC == 0xFF ) {
// expC indicates special value
if ( sigC ) {
//uiC is quiet NaN
uiZ = 0;
goto propagateNaN_ZC;
}
uiZ = uiC;
//uiC is +- infinity
uiZ = (uiC & ~(1UL << 31)) | ((unsigned long)signC << 31); //set sign bit
goto uiZ;
}
/*------------------------------------------------------------------------
@ -209,12 +212,13 @@ float32_t
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
zeroProd:
uiZ = uiC;
uiZ = (uiC & ~(1UL << 31)) | ((unsigned long)signC << 31); //set sign bit
if ( ! (expC | sigC) && (signProd != signC) ) {
completeCancellation:
uiZ =
packToF32UI(
(softfloat_roundingMode == softfloat_round_min), 0, 0 );
uiZ = (uiZ & ~(1UL << 31)) | ((unsigned long)(signC|signProd) << 31); //set sign bit
}
uiZ:
uZ.ui = uiZ;