41#include "specialize.h"
79 if ( sigA || ((expB == 0x1F) && sigB) )
goto propagateNaN;
83 if ( sigB )
goto propagateNaN;
89 if ( ! sigB )
goto invalid;
91 expB = normExpSig.
exp;
92 sigB = normExpSig.
sig;
95 if ( ! sigA )
return a;
97 expA = normExpSig.
exp;
98 sigA = normExpSig.
sig;
104 expDiff = expA - expB;
106 if ( expDiff < -1 )
return a;
114 if ( q ) rem -= sigB;
132 if ( expDiff < 0 )
break;
139 q32 >>= ~expDiff & 31;
141 rem = (rem<<(expDiff + 30)) - q * sigB;
149 }
while ( ! (rem & 0x8000) );
150 meanRem = rem + altRem;
151 if ( (meanRem & 0x8000) || (! meanRem && (q & 1)) ) rem = altRem;
153 if ( 0x8000 <= rem ) {
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
uint_fast16_t softfloat_propagateNaNF16UI(uint_fast16_t uiA, uint_fast16_t uiB)
void softfloat_raiseFlags(uint_fast8_t flags)
float16_t f16_rem(float16_t a, float16_t b)
struct exp8_sig16 softfloat_normSubnormalF16Sig(uint_fast16_t)
float16_t softfloat_normRoundPackToF16(bool, int_fast16_t, uint_fast16_t)
uint32_t softfloat_approxRecip32_1(uint32_t a)