8 uint_fast64_t f64_to_ui64_r_minMag( float64_t a
, bool exact
)
14 int_fast16_t shiftCount
;
19 exp
= expF64UI( uiA
);
20 sig
= fracF64UI( uiA
);
22 if ( exact
&& ( exp
| sig
) ) {
23 softfloat_exceptionFlags
|= softfloat_flag_inexact
;
27 if ( signF64UI( uiA
) ) goto invalid
;
28 shiftCount
= exp
- 0x433;
29 if ( 0 <= shiftCount
) {
30 if ( 0x43E < exp
) goto invalid
;
31 z
= ( sig
| UINT64_C( 0x0010000000000000 ) )<<shiftCount
;
33 sig
|= UINT64_C( 0x0010000000000000 );
34 z
= sig
>>( - shiftCount
);
35 if ( exact
&& (uint64_t) ( sig
<<( shiftCount
& 63 ) ) ) {
36 softfloat_exceptionFlags
|= softfloat_flag_inexact
;
41 softfloat_raiseFlags( softfloat_flag_invalid
);
42 return UINT64_C( 0xFFFFFFFFFFFFFFFF );