5 #include "primitives.h"
9 uint_fast64_t f32_to_ui64( float32_t a
, int_fast8_t roundingMode
, bool exact
)
16 int_fast16_t shiftCount
;
17 uint_fast64_t sig64
, extra
;
18 struct uint64_extra sig64Extra
;
22 sign
= signF32UI( uiA
);
23 exp
= expF32UI( uiA
);
24 sig
= fracF32UI( uiA
);
25 shiftCount
= 0xBE - exp
;
26 if ( shiftCount
< 0 ) {
27 softfloat_raiseFlags( softfloat_flag_invalid
);
28 return UINT64_C( 0xFFFFFFFFFFFFFFFF );
30 if ( exp
) sig
|= 0x00800000;
31 sig64
= (uint_fast64_t) sig
<<40;
34 sig64Extra
= softfloat_shift64ExtraRightJam( sig64
, 0, shiftCount
);
36 extra
= sig64Extra
.extra
;
39 softfloat_roundPackToUI64( sign
, sig64
, extra
, roundingMode
, exact
);