6 #include "specialize.h"
9 float32_t
f32_div( float32_t a
, float32_t b
)
22 struct exp16_sig32 normExpSig
;
30 signA
= signF32UI( uiA
);
31 expA
= expF32UI( uiA
);
32 sigA
= fracF32UI( uiA
);
35 signB
= signF32UI( uiB
);
36 expB
= expF32UI( uiB
);
37 sigB
= fracF32UI( uiB
);
38 signZ
= signA
^ signB
;
40 if ( sigA
) goto propagateNaN
;
42 if ( sigB
) goto propagateNaN
;
48 if ( sigB
) goto propagateNaN
;
53 if ( ! ( expA
| sigA
) ) goto invalid
;
54 softfloat_raiseFlags( softfloat_flag_infinity
);
57 normExpSig
= softfloat_normSubnormalF32Sig( sigB
);
58 expB
= normExpSig
.exp
;
59 sigB
= normExpSig
.sig
;
62 if ( ! sigA
) goto zero
;
63 normExpSig
= softfloat_normSubnormalF32Sig( sigA
);
64 expA
= normExpSig
.exp
;
65 sigA
= normExpSig
.sig
;
67 expZ
= expA
- expB
+ 0x7D;
68 sigA
= ( sigA
| 0x00800000 )<<7;
69 sigB
= ( sigB
| 0x00800000 )<<8;
70 if ( sigB
<= ( sigA
+ sigA
) ) {
74 sigZ
= ( (uint_fast64_t) sigA
<<32 ) / sigB
;
75 if ( ! ( sigZ
& 0x3F ) ) {
76 sigZ
|= ( (uint_fast64_t) sigB
* sigZ
!= (uint_fast64_t) sigA
<<32 );
78 return softfloat_roundPackToF32( signZ
, expZ
, sigZ
);
80 uiZ
= softfloat_propagateNaNF32UI( uiA
, uiB
);
83 softfloat_raiseFlags( softfloat_flag_invalid
);
84 uiZ
= defaultNaNF32UI
;
87 uiZ
= packToF32UI( signZ
, 0xFF, 0 );
90 uiZ
= packToF32UI( signZ
, 0, 0 );