5 #include "primitives.h"
9 int_fast32_t f32_to_i32( float32_t a
, int_fast8_t roundingMode
, bool exact
)
17 int_fast16_t shiftCount
;
21 sign
= signF32UI( uiA
);
22 exp
= expF32UI( uiA
);
23 sig
= fracF32UI( uiA
);
24 if ( ( exp
== 0xFF ) && sig
) sign
= 0;
25 if ( exp
) sig
|= 0x00800000;
26 sig64
= (uint_fast64_t) sig
<<32;
27 shiftCount
= 0xAF - exp
;
28 if ( 0 < shiftCount
) {
29 sig64
= softfloat_shift64RightJam( sig64
, shiftCount
);
31 return softfloat_roundPackToI32( sign
, sig64
, roundingMode
, exact
);