Index: /branches/arm/compiler/ARM/arm-vinsns.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm-vinsns.lisp	(revision 13793)
+++ /branches/arm/compiler/ARM/arm-vinsns.lisp	(revision 13794)
@@ -1366,4 +1366,12 @@
   (fdivd result x y))
 
+
+(define-arm-vinsn single-float-compare (((crf :crf))
+                                        ((arg0 :single-float)
+                                         (arg1 :single-float))
+                                        ())
+  (fcmpes arg0 arg1)
+  (fmstat))
+
 (define-arm-vinsn single-float+-2 (((result :single-float))
                                    ((x :single-float)
@@ -1520,13 +1528,13 @@
    (cmp nargs (:$ (ash 2 arm::fixnumshift)))
    (strlo arg_z (:@! vsp (:$ (- arm::node-size))))
-   (stmeq (:! vsp) (arg_z arg_y))
-   (stmhi (:! vsp) (arg_z arg_y arg_x))
+   (stmdbeq (:! vsp) (arg_z arg_y))
+   (stmdbhi (:! vsp) (arg_z arg_y arg_x))
    :done)
   ((:pred = num-fixed-args 2)
    (cmp nargs (:$ (ash 2 arm::fixnumshift)))
-   (stmeq (:! vsp) (arg_z arg_y))
-   (stmhi (:! vsp) (arg_z arg_y arg_x)))
+   (stmdbeq (:! vsp) (arg_z arg_y))
+   (stmdbhi (:! vsp) (arg_z arg_y arg_x)))
   ((:pred > num-fixed-args 2)
-   (stm (:! vsp) (arg_z arg_y arg_x))))
+   (stmdb (:! vsp) (arg_z arg_y arg_x))))
 
 
@@ -1724,9 +1732,16 @@
     (mvn dest (:$ (:apply lognot intval))))
    ((:not (:pred arm::encode-arm-immediate (:apply lognot intval)))
-    (:data)
-    :const
-    (:word intval)
-    (:code)
-    (ldr dest :const))))
+    ((:and (:pred >= intval 0)
+           (:pred < intval #x10000))
+     (mov dest (:$ (:apply logand #xff00 intval)))
+     ((:not (:pred = 0 (:apply logand #xff intval)))))
+      (orr dest dest (:$ (:apply logand #xff intval)))))
+    ((:not (:and (:pred >= intval 0)
+                 (:pred < intval #x10000)))
+     (:data)
+     :const
+     (:word intval)
+     (:code)
+     (ldr dest :const)))
 
 
@@ -2668,5 +2683,5 @@
   (mov header (:$ arm::subtag-u32-vector))
   (orr header header (:$ (ash 1 arm::num-subtag-bits)))
-  (str header (:@ sp (:$ (- arm::dnode-size))))
+  (str header (:@! sp (:$ (- arm::dnode-size))))
   (str w (:@ sp (:$ 4))))
 
@@ -2806,5 +2821,7 @@
   (mov temp2 (:$ 0))
   (mov imm0 (:$ arm::lisp-frame-marker))  
-  (stmdb (:! sp) (imm0 vsp temp2 lr)))
+  (stmdb (:! sp) (imm0 vsp fn lr))
+  (str temp2 (:@ sp (:$ arm::lisp-frame.savefn))))
+
 
 
