8 int_fast32_t f32_to_i32_r_minMag( float32_t a
, bool exact
)
15 int_fast16_t shiftCount
;
20 exp
= expF32UI( uiA
);
21 sig
= fracF32UI( uiA
);
23 if ( exact
&& ( exp
| sig
) ) {
24 softfloat_exceptionFlags
|= softfloat_flag_inexact
;
28 sign
= signF32UI( uiA
);
29 shiftCount
= 0x9E - exp
;
30 if ( shiftCount
<= 0 ) {
31 if ( uiA
!= packToF32UI( 1, 0x9E, 0 ) ) {
32 softfloat_raiseFlags( softfloat_flag_invalid
);
33 if ( ! sign
|| ( ( exp
== 0xFF ) && sig
) ) return 0x7FFFFFFF;
35 return -0x7FFFFFFF - 1;
37 sig
= ( sig
| 0x00800000 )<<8;
38 absZ
= sig
>>shiftCount
;
39 if ( exact
&& (uint32_t) ( sig
<<( ( - shiftCount
) & 31 ) ) ) {
40 softfloat_exceptionFlags
|= softfloat_flag_inexact
;
42 return sign
? - absZ
: absZ
;