50 struct uint128 sigA, uiZ;
51 struct exp32_sig128 normExpSig;
58 struct uint128 y, term;
68 signA = signF128UI64( uiA64 );
69 expA = expF128UI64( uiA64 );
70 sigA.v64 = fracF128UI64( uiA64 );
74 if ( expA == 0x7FFF ) {
75 if ( sigA.v64 | sigA.v0 ) {
79 if ( ! signA )
return a;
85 if ( ! (expA | sigA.v64 | sigA.v0) )
return a;
91 if ( ! (sigA.v64 | sigA.v0) )
return a;
93 expA = normExpSig.exp;
94 sigA = normExpSig.sig;
101 expZ = ((expA - 0x3FFF)>>1) + 0x3FFE;
103 sigA.v64 |=
UINT64_C( 0x0001000000000000 );
104 sig32A = sigA.v64>>17;
127 if ( ! (rem.v64 &
UINT64_C( 0x8000000000000000 )) )
break;
134 q = ((rem.v64>>2) * recipSqrt32)>>32;
145 if ( ! (rem.v64 &
UINT64_C( 0x8000000000000000 )) )
break;
151 q = (((rem.v64>>2) * recipSqrt32)>>32) + 2;
161 if ( (q & 0xF) <= 2 ) {
165 y.v0 |= sigZExtra>>58;
176 if ( term.v64 &
UINT64_C( 0x8000000000000000 ) ) {
179 if ( term.v64 | term.v0 | y.v0 ) {