Index: softfloat/generic/comparison.c
===================================================================
--- softfloat/generic/comparison.c	(revision b5440cf541def5ef335e5908fbf8a45c8d9b1df8)
+++ softfloat/generic/comparison.c	(revision 7e557805bf047a9f3c55433d9e77f3cb63325752)
@@ -40,2 +40,30 @@
 };
 
+inline int isFloat32Infinity(float32 f) 
+{
+	return ((f.parts.exp==0xFF)&&(f.parts.mantisa==0x0));
+};
+
+/**
+ * @return 1, if both floats are equal - but NaNs are not recognized 
+ */
+inline int isFloat32eq(float32 a, float32 b)
+{
+	return ((a==b)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
+}
+
+/**
+ * @return 1, if a>b - but NaNs are not recognized 
+ */
+inline int isFloat32lt(float32 a, float32 b) 
+{
+	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
+		return 0;
+	};
+	a.parts.sign^=a.parts.sign;
+	b.parts.sign^=b.parts.sign;
+	return (a.binary<b.binary);
+			
+}
+
+
Index: softfloat/generic/softfloat.c
===================================================================
--- softfloat/generic/softfloat.c	(revision b5440cf541def5ef335e5908fbf8a45c8d9b1df8)
+++ softfloat/generic/softfloat.c	(revision 7e557805bf047a9f3c55433d9e77f3cb63325752)
@@ -84,4 +84,57 @@
 /* Comparison functions */
 
+/* a<b .. -1
+ * a=b ..  0
+ * a>b ..  1
+ * */
+
+int __cmpsf2(double a, double b) 
+{
+	float32 fa,fb;
+	fa.f=a;
+	fb.f=b;
+	if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
+		return 1; /* no special constant for unordered - maybe signaled? */
+	};
+
+	
+	if (isFloat32eq(fa,fb)) {
+		return 0;
+	};
+	
+	if (isFloat32lt(fa,fb)) {
+		return -1;
+		};
+	return 1;
+}
+
+int __unordsf2(float a, float b) 
+{
+	float32 fa,fb;
+	fa.f=a;
+	fb.f=b;
+	return ((isFloat32NaN(fa))||(isFloat32NaN(fb)));
+};
+
+/** 
+ * @return zero, if neither argument is a NaN and are equal
+ * */
+int __eqsf2(float a, float b) 
+{
+	float32 fa,fb;
+	fa.f=a;
+	fb.f=b;
+	if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
+		/* TODO: sigNaNs*/
+		return 1;
+		};
+	return isFloat32eq(fa,fb)-1;
+};
+
+/* strange behavior, but it was in gcc documentation */
+int __nesf2(float a, float b) 
+{
+	return __eqsf2(a,b);
+};
 /* Other functions */
 
Index: softfloat/include/sftypes.h
===================================================================
--- softfloat/include/sftypes.h	(revision b5440cf541def5ef335e5908fbf8a45c8d9b1df8)
+++ softfloat/include/sftypes.h	(revision 7e557805bf047a9f3c55433d9e77f3cb63325752)
@@ -33,4 +33,6 @@
 typedef union {
 	float f;
+	__u32 binary;
+
 	struct 	{
 		#ifdef __BIG_ENDIAN__
@@ -50,4 +52,6 @@
 typedef union {
 	double d;
+	__u64 binary;
+	
 	struct	{
 		#ifdef __BIG_ENDIAN__
