58 struct exp32_sig128 normExpSig;
63 struct uint128_extra sig128Extra;
72 signA = signF128UI64( uiA64 );
73 expA = expF128UI64( uiA64 );
74 sigA.v64 = fracF128UI64( uiA64 );
79 signB = signF128UI64( uiB64 );
80 expB = expF128UI64( uiB64 );
81 sigB.v64 = fracF128UI64( uiB64 );
83 signZ = signA ^ signB;
86 if ( expA == 0x7FFF ) {
88 (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0))
92 magBits = expB | sigB.v64 | sigB.v0;
95 if ( expB == 0x7FFF ) {
96 if ( sigB.v64 | sigB.v0 )
goto propagateNaN;
97 magBits = expA | sigA.v64 | sigA.v0;
103 if ( ! (sigA.v64 | sigA.v0) )
goto zero;
105 expA = normExpSig.exp;
106 sigA = normExpSig.sig;
109 if ( ! (sigB.v64 | sigB.v0) )
goto zero;
111 expB = normExpSig.exp;
112 sigB = normExpSig.sig;
116 expZ = expA + expB - 0x4000;
117 sigA.v64 |=
UINT64_C( 0x0001000000000000 );
126 if (
UINT64_C( 0x0002000000000000 ) <= sigZ.v64 ) {
130 sigZ.v64, sigZ.v0, sigZExtra, 1 );
131 sigZ = sig128Extra.v;
132 sigZExtra = sig128Extra.extra;
150 uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 );
155 uiZ.v64 = packToF128UI64( signZ, 0, 0 );