Index: softfloat/generic/div.c
===================================================================
--- softfloat/generic/div.c	(revision e6a40acd864d5bffab49423b9cf3c0d4362e8bd3)
+++ softfloat/generic/div.c	(revision d3ca21023d2d532762f885b60e558ccf24516836)
@@ -32,4 +32,6 @@
 #include<comparison.h>
 #include<mul.h>
+#include<common.h>
+
 
 float32 divFloat32(float32 a, float32 b) 
@@ -307,53 +309,8 @@
 	}
 	
-	/* pack and round */
-	
-	/* find first nonzero digit and shift result and detect possibly underflow */
-	while ((cexp > 0) && (cfrac) && (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ) )))) {
-		cexp--; 
-		cfrac <<= 1;
-			/* TODO: fix underflow */
-	};
-	
-	
-	cfrac >>= 1;
-	++cexp;
-	cfrac += (0x1 << (64 - FLOAT64_FRACTION_SIZE - 3)); 
-
-	if (cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ))) {
-		++cexp;
-		cfrac >>= 1;
-		}	
-
-	/* check overflow */
-	if (cexp >= FLOAT64_MAX_EXPONENT ) {
-		/* FIXME: overflow, return infinity */
-		result.parts.exp = FLOAT64_MAX_EXPONENT;
-		result.parts.fraction = 0;
-		return result;
-	}
-
-	if (cexp < 0) {
-		/* FIXME: underflow */
-		result.parts.exp = 0;
-		if ((cexp + FLOAT64_FRACTION_SIZE) < 0) {
-			result.parts.fraction = 0;
-			return result;
-		}
-		cfrac >>= 1;
-		while (cexp < 0) {
-			cexp ++;
-			cfrac >>= 1;
-		}
-		return result;
-		
-	} else {
-		cexp ++; /*normalized*/
-		result.parts.exp = (__u32)cexp;
-	}
-	
-	result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2 ) ) & (~FLOAT64_HIDDEN_BIT_MASK)); 
-	
-	return result;	
+	/* round and shift */
+	result = finishFloat64(cexp, cfrac, result.parts.sign);
+	return result;
+
 }
 
