Index: softfloat/generic/conversion.c
===================================================================
--- softfloat/generic/conversion.c	(revision feef1cd3702ab8f3d1f357fb02cfdceb1a73b3e3)
+++ softfloat/generic/conversion.c	(revision 350514cb8dd5c0fa5256bae2ae04520fef3f1568)
@@ -60,4 +60,6 @@
 			--result.parts.exp;
 		};
+		
+		++result.parts.exp;
 		result.parts.mantisa = mant;
 	};
@@ -109,5 +111,4 @@
 		
 		exp *= -1;	
-		
 		if (exp > FLOAT32_MANTISA_SIZE ) {
 			/* FIXME: underflow */
@@ -118,6 +119,8 @@
 		/* denormalized */
 		
-		mant = result.parts.mantisa >> 1; 
+		mant = a.parts.mantisa; 
 		mant |= 0x10000000000000ll; /* denormalize and set hidden bit */
+		
+		mant >>= (FLOAT64_MANTISA_SIZE - FLOAT32_MANTISA_SIZE + 1);
 		
 		while (exp > 0) {
Index: softfloat/generic/softfloat.c
===================================================================
--- softfloat/generic/softfloat.c	(revision feef1cd3702ab8f3d1f357fb02cfdceb1a73b3e3)
+++ softfloat/generic/softfloat.c	(revision 350514cb8dd5c0fa5256bae2ae04520fef3f1568)
@@ -50,5 +50,5 @@
 	}
 	return addFloat32(fa,fb).f;
-};
+}
 
 float __subsf3(float a, float b)
@@ -62,5 +62,5 @@
 	}
 	return subFloat32(fa,fb).f;
-};
+}
 
 float __mulsf3(float a, float b) 
@@ -78,5 +78,5 @@
 	fb.f=b;
 //	return 	divFloat32(fa, fb).f;
-};
+}
 
 float __negsf2(float a)
@@ -86,5 +86,5 @@
 	fa.parts.sign=!fa.parts.sign;
 	return fa.f;
-};
+}
 
 double __negdf2(double a)
@@ -94,5 +94,5 @@
 	fa.parts.sign=!fa.parts.sign;
 	return fa.d;
-};
+}
 
 /* Conversion functions */
@@ -103,5 +103,5 @@
 	fa.f = a;
 	return convertFloat32ToFloat64(fa).d;
-};
+}
 
 float __truncdfsf2(double a) 
@@ -111,4 +111,5 @@
 	return convertFloat64ToFloat32(da).f;
 }
+
 /* Comparison functions */
 
@@ -144,5 +145,5 @@
 	fb.f=b;
 	return ((isFloat32NaN(fa))||(isFloat32NaN(fb)));
-};
+}
 
 /** 
@@ -159,5 +160,5 @@
 		};
 	return isFloat32eq(fa,fb)-1;
-};
+}
 
 /* strange behavior, but it was in gcc documentation */
@@ -165,5 +166,5 @@
 {
 	return __eqsf2(a,b);
-};
+}
 
 /* return value >= 0 if a>=b and neither is NaN */
@@ -245,2 +246,17 @@
 /* Other functions */
 
+float __powisf2(float a, int b)
+{
+//TODO:	
+}
+
+float __mulsc3(float a, float b, float c, float d)
+{
+//TODO:
+}
+
+float __divsc3(float a, float b, float c, float d)
+{
+//TODO:
+}
+
