--- /dev/null
+\r
+#include <stdbool.h>\r
+#include <stdint.h>\r
+#include "platform.h"\r
+#include "primitives.h"\r
+#include "internals.h"\r
+#include "softfloat.h"\r
+\r
+float32_t i64_to_f32( int_fast64_t a )\r
+{\r
+ bool sign;\r
+ uint_fast64_t absA;\r
+ int shiftCount;\r
+ union ui32_f32 u;\r
+ uint_fast32_t sig;\r
+\r
+ sign = ( a < 0 );\r
+ absA = sign ? - (uint_fast64_t) a : a;\r
+ shiftCount = softfloat_countLeadingZeros64( absA ) - 40;\r
+ if ( 0 <= shiftCount ) {\r
+ u.ui =\r
+ a ? packToF32UI(\r
+ sign, 0x95 - shiftCount, (uint_fast32_t) absA<<shiftCount )\r
+ : 0;\r
+ return u.f;\r
+ } else {\r
+ shiftCount += 7;\r
+ sig =\r
+ ( shiftCount < 0 )\r
+ ? softfloat_shortShift64RightJam( absA, - shiftCount )\r
+ : (uint_fast32_t) absA<<shiftCount;\r
+ return softfloat_roundPackToF32( sign, 0x9C - shiftCount, sig );\r
+ }\r
+\r
+}\r
+\r