+++ /dev/null
-\r
-/*** UPDATE COMMENTS. ***/\r
-\r
-#include <stdbool.h>\r
-#include <stdint.h>\r
-#include "platform.h"\r
-#include "internals.h"\r
-#include "specialize.h"\r
-#include "softfloat.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two single-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-uint_fast32_t\r
- softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB )\r
-{\r
- bool isNaNA, isSigNaNA, isNaNB, isSigNaNB;\r
- uint_fast32_t uiMagA, uiMagB;\r
-\r
- /*------------------------------------------------------------------------\r
- *------------------------------------------------------------------------*/\r
- isNaNA = isNaNF32UI( uiA );\r
- isSigNaNA = softfloat_isSigNaNF32UI( uiA );\r
- isNaNB = isNaNF32UI( uiB );\r
- isSigNaNB = softfloat_isSigNaNF32UI( uiB );\r
- /*------------------------------------------------------------------------\r
- | Make NaNs non-signaling.\r
- *------------------------------------------------------------------------*/\r
- uiA |= 0x00400000;\r
- uiB |= 0x00400000;\r
- /*------------------------------------------------------------------------\r
- *------------------------------------------------------------------------*/\r
- if ( isSigNaNA | isSigNaNB ) {\r
- softfloat_raiseFlags( softfloat_flag_invalid );\r
- }\r
- if ( isSigNaNA ) {\r
- if ( isSigNaNB ) goto returnLargerSignificand;\r
- return isNaNB ? uiB : uiA;\r
- } else if ( isNaNA ) {\r
- if ( isSigNaNB || ! isNaNB ) return uiA;\r
- returnLargerSignificand:\r
- uiMagA = uiA<<1;\r
- uiMagB = uiB<<1;\r
- if ( uiMagA < uiMagB ) return uiB;\r
- if ( uiMagB < uiMagA ) return uiA;\r
- return ( uiA < uiB ) ? uiA : uiB;\r
- } else {\r
- return uiB;\r
- }\r
-\r
-}\r
-\r