5 #include "primitives.h"
7 #include "specialize.h"
10 softfloat_addMagsF32( uint_fast32_t uiA
, uint_fast32_t uiB
, bool signZ
)
22 expA
= expF32UI( uiA
);
23 sigA
= fracF32UI( uiA
);
24 expB
= expF32UI( uiB
);
25 sigB
= fracF32UI( uiB
);
26 expDiff
= expA
- expB
;
31 if ( sigA
| sigB
) goto propagateNaN
;
36 uiZ
= packToF32UI( signZ
, 0, ( uiA
+ uiB
) & 0x7FFFFFFF );
40 sigZ
= 0x40000000 + sigA
+ sigB
;
44 if ( sigB
) goto propagateNaN
;
45 uiZ
= packToF32UI( signZ
, 0xFF, 0 );
49 sigA
+= expA
? 0x20000000 : sigA
;
50 sigA
= softfloat_shift32RightJam( sigA
, - expDiff
);
53 if ( sigA
) goto propagateNaN
;
58 sigB
+= expB
? 0x20000000 : sigB
;
59 sigB
= softfloat_shift32RightJam( sigB
, expDiff
);
61 sigZ
= 0x20000000 + sigA
+ sigB
;
62 if ( sigZ
< 0x40000000 ) {
67 return softfloat_roundPackToF32( signZ
, expZ
, sigZ
);
69 uiZ
= softfloat_propagateNaNF32UI( uiA
, uiB
);