Index: /branches/arm/compiler/ARM/arm2.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm2.lisp	(revision 13794)
+++ /branches/arm/compiler/ARM/arm2.lisp	(revision 13795)
@@ -304,9 +304,9 @@
   (case cond
     (:EQ (values arm::arm-cond-eq t))
-    (:NE (values arm::arm-cond-ne t))
+    (:NE (values arm::arm-cond-eq nil))
     (:GT (values arm::arm-cond-gt t))
-    (:LE (values arm::arm-cond-le t))
+    (:LE (values arm::arm-cond-gt nil))
     (:LT (values arm::arm-cond-lt t))
-    (:GE (values arm::arm-cond-ge t))))
+    (:GE (values arm::arm-cond-lt nil))))
 
 
@@ -3128,5 +3128,4 @@
       (^))))
 
-;;; Have to extract a bit out of the CR when a boolean result needed.
 (defun arm2-compare-double-float-registers (seg vreg xfer ireg jreg cr-bit true-p)
   (with-arm-local-vinsn-macros (seg vreg xfer)
@@ -3144,4 +3143,22 @@
          (^)))
       (^))))
+
+(defun arm2-compare-single-float-registers (seg vreg xfer ireg jreg cr-bit true-p)
+  (with-arm-local-vinsn-macros (seg vreg xfer)
+    (if vreg
+      (regspec-crf-gpr-case 
+       (vreg dest)
+       (progn
+         (! single-float-compare dest ireg jreg)
+         (^ cr-bit true-p))
+       (progn
+         (with-crf-target () flags
+           (! single-float-compare flags ireg jreg)
+
+           (! cond->boolean dest (if true-p cr-bit (logxor cr-bit 1))))
+         (^)))
+      (^))))
+
+
 
 
@@ -6531,5 +6548,5 @@
       (with-fp-target (r1) (r2 :single-float)
         (multiple-value-bind (r1 r2) (arm2-two-untargeted-reg-forms seg form1 r1 form2 r2)
-          (arm2-compare-double-float-registers seg vreg xfer r1 r2 cr-bit true-p))))))
+          (arm2-compare-single-float-registers seg vreg xfer r1 r2 cr-bit true-p))))))
  
 (eval-when (:compile-toplevel :execute)
