Index: softfloat/generic/conversion.c
===================================================================
--- softfloat/generic/conversion.c	(revision ba5870ddd0e1200d4fb6d42059b63100c288fcbe)
+++ softfloat/generic/conversion.c	(revision b419162567eebf03db8ff08a2d21f6d3003f1577)
@@ -387,5 +387,4 @@
 }	
 
-	
 /** Convert unsigned integer to float32
  *
@@ -486,2 +485,100 @@
  	return result;
 }
+
+/** Convert unsigned integer to float64
+ *
+ *
+ */
+float64 uint32_to_float64(__u32 i)
+{
+	int counter;
+	__s32 exp;
+	float64 result;
+	__u64 frac;
+	
+	result.parts.sign = 0;
+	result.parts.fraction = 0;
+
+	counter = countZeroes32(i);
+
+	exp = FLOAT64_BIAS + 32 - counter - 1;
+	
+	if (counter == 32) {
+		result.binary = 0;
+		return result;
+	}
+	
+	frac = i;
+	frac <<= counter + 32 - 1; 
+
+	roundFloat64(&exp, &frac);
+
+	result.parts.fraction = frac >> 10;
+	result.parts.exp = exp;
+
+	return result;
+}
+
+float64 int32_to_float64(__s32 i) 
+{
+	float64 result;
+
+	if (i < 0) {
+		result = uint32_to_float64((__u32)(-i));
+	} else {
+		result = uint32_to_float64((__u32)i);
+	}
+	
+	result.parts.sign = i < 0;
+
+ 	return result;
+}
+
+
+float64 uint64_to_float64(__u64 i) 
+{
+	int counter;
+	__s32 exp;
+	float64 result;
+	
+	result.parts.sign = 0;
+	result.parts.fraction = 0;
+
+	counter = countZeroes64(i);
+
+	exp = FLOAT64_BIAS + 64 - counter - 1;
+	
+	if (counter == 64) {
+		result.binary = 0;
+		return result;
+	}
+	
+	if (counter > 0) {
+		i <<= counter - 1;
+	} else {
+		i >>= 1;
+	}
+
+	roundFloat64(&exp, &i);
+
+	result.parts.fraction = i >> 10;
+	result.parts.exp = exp;
+	return result;
+}
+
+float64 int64_to_float64(__s64 i) 
+{
+	float64 result;
+
+	if (i < 0) {
+		result = uint64_to_float64((__u64)(-i));
+	} else {
+		result = uint64_to_float64((__u64)i);
+	}
+	
+	result.parts.sign = i < 0;
+
+ 	return result;
+}
+
+
Index: softfloat/generic/softfloat.c
===================================================================
--- softfloat/generic/softfloat.c	(revision ba5870ddd0e1200d4fb6d42059b63100c288fcbe)
+++ softfloat/generic/softfloat.c	(revision b419162567eebf03db8ff08a2d21f6d3003f1577)
@@ -264,4 +264,8 @@
 double __floatsidf(int i)
 {
+	float64 da;
+	
+	da = int_to_float64(i);
+	return da.d;
 }
  
@@ -275,4 +279,8 @@
 double __floatdidf(long i)
 {
+	float64 da;
+	
+	da = long_to_float64(i);
+	return da.d;
 }
  
@@ -286,4 +294,8 @@
 double __floattidf(long long i)
 {
+	float64 da;
+	
+	da = longlong_to_float64(i);
+	return da.d;
 }
 
@@ -297,4 +309,8 @@
 double __floatunsidf(unsigned int i)
 {
+	float64 da;
+	
+	da = uint_to_float64(i);
+	return da.d;
 }
  
@@ -308,4 +324,8 @@
 double __floatundidf(unsigned long i)
 {
+	float64 da;
+	
+	da = ulong_to_float64(i);
+	return da.d;
 }
  
@@ -319,4 +339,8 @@
 double __floatuntidf(unsigned long long i)
 {
+	float64 da;
+	
+	da = ulonglong_to_float64(i);
+	return da.d;
 }
 
Index: softfloat/include/conversion.h
===================================================================
--- softfloat/include/conversion.h	(revision ba5870ddd0e1200d4fb6d42059b63100c288fcbe)
+++ softfloat/include/conversion.h	(revision b419162567eebf03db8ff08a2d21f6d3003f1577)
@@ -51,4 +51,11 @@
 float32 uint64_to_float32(__u64 i);
 float32 int64_to_float32(__s64 i);
+
+float64 uint32_to_float64(__u32 i);
+float64 int32_to_float64(__s32 i);
+
+float64 uint64_to_float64(__u64 i);
+float64 int64_to_float64(__s64 i);
+
 #endif
 
