Index: /trunk/source/compiler/ARM/arm-vinsns.lisp
===================================================================
--- /trunk/source/compiler/ARM/arm-vinsns.lisp	(revision 14761)
+++ /trunk/source/compiler/ARM/arm-vinsns.lisp	(revision 14762)
@@ -656,18 +656,15 @@
     (((dest :double-float))
      ((src :address)
-      (index :s16const))
-     ((low (:u32 #.arm::imm0))
-      (high (:u32 #.arm::imm1))))
-  (ldrd low (:@ src (:$ index)))
-  (fmdrr dest low high))
+      (index :s16const)))
+  (fldd dest (:@ src (:$ index)))
+)
 
 (define-arm-vinsn (mem-ref-double-float :predicatable)
-    (((dest :double-float))
+    (((dest :double-float)
+      (src :address))
      ((src :address)
-      (index :s32))
-     ((low (:u32 #.arm::imm0))
-      (high (:u32 #.arm::imm1))))
-  (ldrd low (:@ src  index))
-  (fmdrr dest low high))
+      (index :s32)))
+  (add src src index)
+  (fldd dest (:@ src (:$ 0))))
 
 (define-arm-vinsn (mem-set-c-double-float :predicatable)
@@ -700,7 +697,7 @@
     (((dest :single-float))
      ((src :address)
-      (index :s32))
+      (index :lisp))
      ((temp :u32)))
-  (ldr temp (:@ src index))
+  (ldr temp (:@ src (:asr index (:$ arm::fixnumshift))))
   (fmsr dest temp))
 
@@ -1589,4 +1586,9 @@
   (bla .SPcheck-fpu-exception))
 
+(define-arm-vinsn (double-float-negate :predicatable) (((dest :double-float))
+                                                       ((src :double-float)))
+  (fnegd dest src))
+
+
 
 (define-arm-vinsn single-float-compare (((crf :crf))
@@ -1666,4 +1668,7 @@
   (bla .SPcheck-fpu-exception))
 
+(define-arm-vinsn (single-float-negate :predicatable) (((dest :single-float))
+                                                       ((src :single-float)))
+  (fnegs dest src))
 
 
@@ -3070,5 +3075,5 @@
   :defined)
 
-(define-arm-vinsn (temp-push-unboxed-word :push :word :sp :predicatable)
+(define-arm-vinsn (temp-push-unboxed-word :push :word :csp :predicatable)
     
     (()
@@ -3079,5 +3084,5 @@
   (str w (:@ sp (:$ 4))))
 
-(define-arm-vinsn (temp-pop-unboxed-word :pop :word :sp :predicatable)
+(define-arm-vinsn (temp-pop-unboxed-word :pop :word :csp :predicatable)
     
     (((w :u32))
@@ -3086,5 +3091,5 @@
   (add sp sp (:$ arm::dnode-size)))
 
-(define-arm-vinsn (temp-push-double-float :push :doubleword :sp :predicatable)
+(define-arm-vinsn (temp-push-double-float :push :doubleword :csp :predicatable)
     
     (()
@@ -3095,5 +3100,5 @@
   (fstd d (:@ sp (:$ 8))))
 
-(define-arm-vinsn (temp-pop-double-float :pop :doubleword :sp :predicatable)
+(define-arm-vinsn (temp-pop-double-float :pop :doubleword :csp :predicatable)
     
     (()
@@ -3113,5 +3118,5 @@
 
 
-(define-arm-vinsn (temp-pop-single-float :pop :word :sp :predicatable)
+(define-arm-vinsn (temp-pop-single-float :pop :word :csp :predicatable)
     
     (()
