[sim] made softfloat files C instead of C++
[riscv-isa-sim.git] / softfloat / i64_to_f32.c
diff --git a/softfloat/i64_to_f32.c b/softfloat/i64_to_f32.c
new file mode 100755 (executable)
index 0000000..4fecbb9
--- /dev/null
@@ -0,0 +1,36 @@
+\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