56 struct uint128 sigB, sigZ;
61 expA = expF128UI64( uiA64 );
62 sigA.v64 = fracF128UI64( uiA64 );
64 expB = expF128UI64( uiB64 );
65 sigB.v64 = fracF128UI64( uiB64 );
69 expDiff = expA - expB;
70 if ( 0 < expDiff )
goto expABigger;
71 if ( expDiff < 0 )
goto expBBigger;
72 if ( expA == 0x7FFF ) {
73 if ( sigA.v64 | sigA.v0 | sigB.v64 | sigB.v0 )
goto propagateNaN;
80 if ( ! expZ ) expZ = 1;
81 if ( sigB.v64 < sigA.v64 )
goto aBigger;
82 if ( sigA.v64 < sigB.v64 )
goto bBigger;
83 if ( sigB.v0 < sigA.v0 )
goto aBigger;
84 if ( sigA.v0 < sigB.v0 )
goto bBigger;
91 if ( expB == 0x7FFF ) {
92 if ( sigB.v64 | sigB.v0 )
goto propagateNaN;
93 uiZ.v64 = packToF128UI64( signZ ^ 1, 0x7FFF, 0 );
98 sigA.v64 |=
UINT64_C( 0x0010000000000000 );
101 if ( ! expDiff )
goto newlyAlignedBBigger;
106 sigB.v64 |=
UINT64_C( 0x0010000000000000 );
112 if ( expA == 0x7FFF ) {
113 if ( sigA.v64 | sigA.v0 )
goto propagateNaN;
119 sigB.v64 |=
UINT64_C( 0x0010000000000000 );
122 if ( ! expDiff )
goto newlyAlignedABigger;
127 sigA.v64 |=
UINT64_C( 0x0010000000000000 );