53 bool roundNearEven, doIncrement, isTiny;
54 struct uint128_extra sig128Extra;
56 struct uint128 sig128;
63 doIncrement = (
UINT64_C( 0x8000000000000000 ) <= sigExtra);
89 sig64 = sig128Extra.v.v64;
90 sig0 = sig128Extra.v.v0;
91 sigExtra = sig128Extra.extra;
93 if ( isTiny && sigExtra ) {
96 doIncrement = (
UINT64_C( 0x8000000000000000 ) <= sigExtra);
127 uiZ64 = packToF128UI64( sign, 0x7FFF, 0 );
132 sign, 0x7FFE,
UINT64_C( 0x0000FFFFFFFFFFFF ) );
133 uiZ0 =
UINT64_C( 0xFFFFFFFFFFFFFFFF );
142#ifdef SOFTFLOAT_ROUND_ODD
155 (! (sigExtra &
UINT64_C( 0x7FFFFFFFFFFFFFFF ))
158 if ( ! (sig64 | sig0) ) exp = 0;
163 uiZ64 = packToF128UI64( sign, exp, sig64 );
void softfloat_raiseFlags(uint_fast8_t flags)
THREAD_LOCAL uint_fast8_t softfloat_roundingMode
@ softfloat_flag_underflow
@ softfloat_flag_overflow
THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags
THREAD_LOCAL uint_fast8_t softfloat_detectTininess
@ softfloat_round_near_even
@ softfloat_round_near_maxMag
@ softfloat_tininess_beforeRounding
struct uint128 softfloat_add128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
bool softfloat_eq128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
bool softfloat_lt128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
float128_t softfloat_roundPackToF128(bool sign, int_fast32_t exp, uint_fast64_t sig64, uint_fast64_t sig0, uint_fast64_t sigExtra)
unsigned __int64 uint64_t