fixes concerning FMADD_S, FMSUB_S, FNMADD_S, and FNSUB_S
mostly about ensuring correct sign
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user