45{
46 union ui128_f128 uA;
48 bool sign;
52 struct uint128 sig128;
53 struct uint64_extra sigExtra;
54
55
56
58 uiA64 = uA.ui.v64;
59 uiA0 = uA.ui.v0;
60 sign = signF128UI64( uiA64 );
61 exp = expF128UI64( uiA64 );
62 sig64 = fracF128UI64( uiA64 );
63 sig0 = uiA0;
64
65
66 shiftDist = 0x402F - exp;
67 if ( shiftDist <= 0 ) {
68
69
70 if ( shiftDist < -15 ) {
72 return
75 }
76
77
78 sig64 |=
UINT64_C( 0x0001000000000000 );
79 if ( shiftDist ) {
81 sig64 = sig128.v64;
82 sig0 = sig128.v0;
83 }
84 } else {
85
86
87 if ( exp ) sig64 |=
UINT64_C( 0x0001000000000000 );
89 sig64 = sigExtra.v;
90 sig0 = sigExtra.extra;
91 }
93
94}
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
void softfloat_raiseFlags(uint_fast8_t flags)
#define i64_fromNegOverflow
#define i64_fromPosOverflow
int_fast64_t softfloat_roundToI64(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)