42 #include "softfloat.h" 59 uint32_t recip32, sig32Z, doubleTerm;
78 signZ = signA ^ signB;
81 if ( expA == 0x7FF ) {
82 if ( sigA )
goto propagateNaN;
83 if ( expB == 0x7FF ) {
84 if ( sigB )
goto propagateNaN;
89 if ( expB == 0x7FF ) {
90 if ( sigB )
goto propagateNaN;
97 if ( ! (expA | sigA) )
goto invalid;
102 expB = normExpSig.
exp;
103 sigB = normExpSig.
sig;
106 if ( ! sigA )
goto zero;
108 expA = normExpSig.
exp;
109 sigA = normExpSig.
sig;
113 expZ = expA - expB + 0x3FE;
114 sigA |=
UINT64_C( 0x0010000000000000 );
115 sigB |=
UINT64_C( 0x0010000000000000 );
125 doubleTerm = sig32Z<<1;
133 if ( (sigZ & 0x1FF) < 4<<4 ) {
140 if ( rem &
UINT64_C( 0x8000000000000000 ) ) {
143 if ( rem ) sigZ |= 1;
uint32_t softfloat_approxRecip32_1(uint32_t a)
void softfloat_raiseFlags(uint_fast8_t)
struct exp16_sig64 softfloat_normSubnormalF64Sig(uint_fast64_t)
float64_t softfloat_roundPackToF64(bool, int_fast16_t, uint_fast64_t)
float64_t f64_div(float64_t a, float64_t b)
#define packToF64UI(sign, exp, sig)
uint_fast64_t softfloat_propagateNaNF64UI(uint_fast64_t uiA, uint_fast64_t uiB)