[sim] made softfloat files C instead of C++
[riscv-isa-sim.git] / softfloat / s_mul64To128.c
diff --git a/softfloat/s_mul64To128.c b/softfloat/s_mul64To128.c
new file mode 100755 (executable)
index 0000000..c17780b
--- /dev/null
@@ -0,0 +1,28 @@
+\r
+#include <stdint.h>\r
+#include "platform.h"\r
+#include "primitives.h"\r
+\r
+struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b )\r
+{\r
+    uint32_t a32, a0, b32, b0;\r
+    struct uint128 z;\r
+    uint64_t mid1, mid2, mid;\r
+\r
+    a32 = a>>32;\r
+    a0 = a;\r
+    b32 = b>>32;\r
+    b0 = b;\r
+    z.v0 = (uint64_t) a0 * b0;\r
+    mid1 = (uint64_t) a32 * b0;\r
+    mid2 = (uint64_t) a0 * b32;\r
+    z.v64 = (uint64_t) a32 * b32;\r
+    mid = mid1 + mid2;\r
+    z.v64 += ( (uint64_t) ( mid < mid1 ) )<<32 | mid>>32;\r
+    mid <<= 32;\r
+    z.v0 += mid;\r
+    z.v64 += ( z.v0 < mid );\r
+    return z;\r
+\r
+}\r
+\r