+++ /dev/null
-\r
-#include <stdbool.h>\r
-#include <stdint.h>\r
-#include "platform.h"\r
-#include "primitives.h"\r
-#include "internals.h"\r
-#include "specialize.h"\r
-#include "softfloat.h"\r
-\r
-float32_t f64_to_f32( float64_t a )\r
-{\r
- union ui64_f64 uA;\r
- uint_fast64_t uiA;\r
- bool sign;\r
- int_fast16_t exp;\r
- uint_fast64_t sig;\r
- uint_fast32_t uiZ, sig32;\r
- union ui32_f32 uZ;\r
-\r
- uA.f = a;\r
- uiA = uA.ui;\r
- sign = signF64UI( uiA );\r
- exp = expF64UI( uiA );\r
- sig = fracF64UI( uiA );\r
- if ( exp == 0x7FF ) {\r
- uiZ =\r
- sig ? softfloat_commonNaNToF32UI(\r
- softfloat_f64UIToCommonNaN( uiA ) )\r
- : packToF32UI( sign, 0xFF, 0 );\r
- goto uiZ;\r
- }\r
- sig32 = softfloat_shortShift64RightJam( sig, 22 );\r
- if ( ! ( exp | sig32 ) ) {\r
- uiZ = packToF32UI( sign, 0, 0 );\r
- goto uiZ;\r
- }\r
- return softfloat_roundPackToF32( sign, exp - 0x381, sig32 | 0x40000000 );\r
- uiZ:\r
- uZ.ui = uiZ;\r
- return uZ.f;\r
-\r
-}\r
-\r