41#include "specialize.h"
62 struct uint128 sig128, uiZ;
73 expDiff = expA - expB;
74 if ( 0 < expDiff )
goto expABigger;
75 if ( expDiff < 0 )
goto expBBigger;
76 if ( expA == 0x7FFF ) {
77 if ( (sigA | sigB) &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) {
88 if ( ! expZ ) expZ = 1;
90 if ( sigB < sigA )
goto aBigger;
91 if ( sigA < sigB )
goto bBigger;
99 if ( expB == 0x7FFF ) {
100 if ( sigB &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) )
goto propagateNaN;
102 uiZ0 =
UINT64_C( 0x8000000000000000 );
108 if ( ! expDiff )
goto newlyAlignedBBigger;
112 sigExtra = sig128.v0;
122 if ( expA == 0x7FFF ) {
123 if ( sigA &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) )
goto propagateNaN;
131 if ( ! expDiff )
goto newlyAlignedABigger;
135 sigExtra = sig128.v0;
153 uZ.s.signExp = uiZ64;
struct uint128 softfloat_propagateNaNExtF80UI(uint_fast16_t uiA64, uint_fast64_t uiA0, uint_fast16_t uiB64, uint_fast64_t uiB0)
void softfloat_raiseFlags(uint_fast8_t flags)
#define defaultNaNExtF80UI0
#define defaultNaNExtF80UI64
#define packToExtF80UI64(sign, exp)
#define expExtF80UI64(a64)
THREAD_LOCAL uint_fast8_t softfloat_roundingMode
THREAD_LOCAL uint_fast8_t extF80_roundingPrecision
extFloat80_t softfloat_normRoundPackToExtF80(bool sign, int_fast32_t exp, uint_fast64_t sig, uint_fast64_t sigExtra, uint_fast8_t roundingPrecision)
struct uint128 softfloat_shiftRightJam128(uint64_t a64, uint64_t a0, uint_fast32_t dist)
struct uint128 softfloat_sub128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
extFloat80_t softfloat_subMagsExtF80(uint_fast16_t uiA64, uint_fast64_t uiA0, uint_fast16_t uiB64, uint_fast64_t uiB0, bool signZ)