9 softfloat_roundPackToI64(
13 int_fast8_t roundingMode
,
17 bool roundNearestEven
, increment
;
18 union { uint64_t ui
; int64_t i
; } uZ
;
21 roundNearestEven
= ( roundingMode
== softfloat_round_nearest_even
);
22 increment
= ( UINT64_C( 0x8000000000000000 ) <= sig0
);
25 && ( roundingMode
!= softfloat_round_nearest_maxMag
)
28 ( roundingMode
!= softfloat_round_minMag
)
30 == ( sign
? softfloat_round_min
: softfloat_round_max
) )
35 if ( ! sig64
) goto invalid
;
37 ~ ( ! ( sig0
& UINT64_C( 0x7FFFFFFFFFFFFFFF ) )
40 uZ
.ui
= sign
? - sig64
: sig64
;
42 if ( z
&& ( ( z
< 0 ) ^ sign
) ) goto invalid
;
43 if ( exact
&& sig0
) softfloat_exceptionFlags
|= softfloat_flag_inexact
;
46 softfloat_raiseFlags( softfloat_flag_invalid
);
48 sign
? - INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1
49 : INT64_C( 0x7FFFFFFFFFFFFFFF );