Index: softfloat/generic/arithmetic.c
===================================================================
--- softfloat/generic/arithmetic.c	(revision ef0aa999f8527e6470457c27dcf4941eb2d47ae8)
+++ softfloat/generic/arithmetic.c	(revision cf4a82392e2e531adcc4ea3efef573197358c03b)
@@ -29,4 +29,5 @@
 #include<sftypes.h>
 #include<arithmetic.h>
+#include<comparison.h>
 
 /** Add two Float32 numbers with same signs
Index: softfloat/generic/comparison.c
===================================================================
--- softfloat/generic/comparison.c	(revision ef0aa999f8527e6470457c27dcf4941eb2d47ae8)
+++ softfloat/generic/comparison.c	(revision cf4a82392e2e531adcc4ea3efef573197358c03b)
@@ -50,5 +50,5 @@
 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 ((a.binary==b.binary)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
 }
 
@@ -59,8 +59,15 @@
 {
 	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
-		return 0;
+		return 0; /* +- zeroes */
 	};
-	a.parts.sign^=a.parts.sign;
-	b.parts.sign^=b.parts.sign;
+	
+	if ((a.parts.sign)&&(b.parts.sign)) {
+		/*if both are negative, smaller is that with greater binary value*/
+		return (a.binary>b.binary);
+		};
+	
+	/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
+	a.parts.sign=!a.parts.sign;
+	b.parts.sign=!b.parts.sign;
 	return (a.binary<b.binary);
 			
@@ -73,8 +80,15 @@
 {
 	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
-		return 0;
+		return 0; /* zeroes are equal with any sign */
 	};
-	a.parts.sign^=a.parts.sign;
-	b.parts.sign^=b.parts.sign;
+	
+	if ((a.parts.sign)&&(b.parts.sign)) {
+		/*if both are negative, greater is that with smaller binary value*/
+		return (a.binary<b.binary);
+		};
+	
+	/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
+	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 ef0aa999f8527e6470457c27dcf4941eb2d47ae8)
+++ softfloat/generic/softfloat.c	(revision cf4a82392e2e531adcc4ea3efef573197358c03b)
@@ -58,5 +58,5 @@
 	fb.f=b;
 	if (fa.parts.sign!=fb.parts.sign) {
-		fb.parts.sign!=fb.parts.sign;
+		fb.parts.sign=!fb.parts.sign;
 		return addFloat32(fa,fb).f;
 	}
@@ -89,5 +89,5 @@
  * */
 
-int __cmpsf2(double a, double b) 
+int __cmpsf2(float a, float b) 
 {
 	float32 fa,fb;
@@ -146,5 +146,5 @@
 	if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
 		/* TODO: sigNaNs*/
-		return 1;
+		return -1;
 		};
 	
@@ -199,12 +199,12 @@
 
 /** Return positive value, if a>b and neither is NaN*/
-int __ltsf2(float a, float b)
-{
-	float32 fa,fb;
-	fa.f=a;
-	fb.f=b;
-	if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
-		/* TODO: sigNaNs*/
-		return 1;
+int __gtsf2(float a, float b)
+{
+	float32 fa,fb;
+	fa.f=a;
+	fb.f=b;
+	if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
+		/* TODO: sigNaNs*/
+		return -1;
 		};
 	if (isFloat32gt(fa, fb)) {
Index: softfloat/include/comparison.h
===================================================================
--- softfloat/include/comparison.h	(revision ef0aa999f8527e6470457c27dcf4941eb2d47ae8)
+++ softfloat/include/comparison.h	(revision cf4a82392e2e531adcc4ea3efef573197358c03b)
@@ -33,5 +33,5 @@
 inline int isFloat32SigNaN(float32 f);
 
-inline int isFloat32Infinity(float32 f) 
+inline int isFloat32Infinity(float32 f);
 
 inline int isFloat32eq(float32 a, float32 b);
