42 #include "softfloat.h" 60 #ifdef SOFTFLOAT_FAST_INT64 61 struct uint128 sig128Z;
80 signZ = signA ^ signB;
83 if ( expA == 0x7FF ) {
84 if ( sigA || ((expB == 0x7FF) && sigB) )
goto propagateNaN;
85 magBits = expB | sigB;
88 if ( expB == 0x7FF ) {
89 if ( sigB )
goto propagateNaN;
90 magBits = expA | sigA;
96 if ( ! sigA )
goto zero;
98 expA = normExpSig.
exp;
99 sigA = normExpSig.
sig;
102 if ( ! sigB )
goto zero;
104 expB = normExpSig.
exp;
105 sigB = normExpSig.
sig;
109 expZ = expA + expB - 0x3FF;
110 sigA = (sigA |
UINT64_C( 0x0010000000000000 ))<<10;
111 sigB = (sigB |
UINT64_C( 0x0010000000000000 ))<<11;
112 #ifdef SOFTFLOAT_FAST_INT64 113 sig128Z = softfloat_mul64To128( sigA, sigB );
114 sigZ = sig128Z.v64 | (sig128Z.v0 != 0);
121 if ( sigZ <
UINT64_C( 0x4000000000000000 ) ) {
void softfloat_raiseFlags(uint_fast8_t)
struct exp16_sig64 softfloat_normSubnormalF64Sig(uint_fast64_t)
float64_t f64_mul(float64_t a, float64_t b)
unsigned long long uint64_t
void softfloat_mul64To128M(uint64_t a, uint64_t b, uint32_t *zPtr)
float64_t softfloat_roundPackToF64(bool, int_fast16_t, uint_fast64_t)
#define indexWord(total, n)
#define packToF64UI(sign, exp, sig)
uint_fast64_t softfloat_propagateNaNF64UI(uint_fast64_t uiA, uint_fast64_t uiB)