46{
47 union ui128_f128 uA;
49 bool sign;
53 struct uint128 sig128;
54 struct uint64_extra sigExtra;
55
56
57
59 uiA64 = uA.ui.v64;
60 uiA0 = uA.ui.v0;
61 sign = signF128UI64( uiA64 );
62 exp = expF128UI64( uiA64 );
63 sig64 = fracF128UI64( uiA64 );
64 sig0 = uiA0;
65
66
67 shiftDist = 0x402F - exp;
68 if ( shiftDist <= 0 ) {
69
70
71 if ( shiftDist < -15 ) {
73 return
76 }
77
78
79 sig64 |=
UINT64_C( 0x0001000000000000 );
80 if ( shiftDist ) {
82 sig64 = sig128.v64;
83 sig0 = sig128.v0;
84 }
85 } else {
86
87
88 if ( exp ) sig64 |=
UINT64_C( 0x0001000000000000 );
90 sig64 = sigExtra.v;
91 sig0 = sigExtra.extra;
92 }
94
95}
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
void softfloat_raiseFlags(uint_fast8_t flags)
#define ui64_fromPosOverflow
#define ui64_fromNegOverflow
uint_fast64_t softfloat_roundToUI64(bool sign, uint_fast64_t sig, uint_fast64_t sigExtra, uint_fast8_t roundingMode, bool exact)
struct uint128 softfloat_shortShiftLeft128(uint64_t a64, uint64_t a0, uint_fast8_t dist)