Index: /branches/arm/compiler/ARM/arm-asm.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm-asm.lisp	(revision 13956)
+++ /branches/arm/compiler/ARM/arm-asm.lisp	(revision 13957)
@@ -121,4 +121,5 @@
     :@rn
     :uuoC
+    :fpux
     ))
 
@@ -677,5 +678,5 @@
    (define-arm-instruction fmuls (:sd :sn :sm)
      #x0e200a00
-     #x0ff00ff0
+     #x0ff00f50
      ())
    (define-arm-instruction fdivd (:dd :dn :dm)
@@ -685,5 +686,5 @@
    (define-arm-instruction fdivs (:sd :sn :sm)
      #x0e800a00
-     #x0ff00ff0
+     #x0ff00f50
      ())
    (define-arm-instruction fcpyd (:dd :dm)
@@ -691,6 +692,6 @@
      #x0fb00ff0
      ())
-   (define-arm-instruction fcpyd (:sd :sm)
-     #x0eb00b40
+   (define-arm-instruction fcpys (:sd :sm)
+     #x0eb00a40
      #x0fb00fc0
      ())
@@ -702,4 +703,12 @@
      #x0eb70ac0
      #x0ff70ac0
+     ())
+   (define-arm-instruction fmxr (:fpux :rd)
+     #x0ee00a10
+     #x0ff00fff
+     ())
+   (define-arm-instruction fmrx (:rd :fpux)
+     #x0ef00a10
+     #x0ff00fff
      ())
    (define-arm-instruction smull (:rd :rn :rm :rs)
@@ -1138,4 +1147,13 @@
   (set-field-value instruction (byte 4 16) (need-arm-gpr form)))
 
+(defun parse-fpux-operand (form instruction)
+  (let* ((regno (if (typep form '(unsigned-byte 4))
+                  form
+                  (ecase (keywordize form)
+                    (:fpsid 0)
+                    (:fpscr 1)
+                    (:fpexc 8)))))
+    (set-field-value instruction (byte 4 16) regno)))
+
 (defun parse-rm-operand (form instruction)
   (set-field-value instruction (byte 4 0) (need-arm-gpr form)))
@@ -1262,4 +1280,5 @@
       parse-@rn-operand
       parse-uuoc-operand
+      parse-fpux-operand
       ))
 
Index: /branches/arm/compiler/ARM/arm-disassemble.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm-disassemble.lisp	(revision 13956)
+++ /branches/arm/compiler/ARM/arm-disassemble.lisp	(revision 13957)
@@ -182,4 +182,12 @@
     (arm-gpr-name (ldb (byte 4 16) opcode))))
 
+(defun extract-arm-fpux-operand (opcodes i)
+  (let* ((opcode (adi-opcode (svref opcodes i))))
+    (case (ldb (byte 4 16) opcode)
+      (0 :fpsid)
+      (1 :fpscr)
+      (8 :fpexc)
+      (t (list :fpu (ldb (byte 4 16) opcode))))))
+
 (defun extract-arm-rm-operand (opcodes i)
   (let* ((opcode (adi-opcode (svref opcodes i))))
@@ -285,4 +293,5 @@
     extract-arm-@rn-operand
     extract-arm-uuoc-operand
+    extract-arm-fpux-operand
     ))
 
