--- /dev/null
+\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