Index: /branches/arm/level-0/ARM/arm-float.lisp
===================================================================
--- /branches/arm/level-0/ARM/arm-float.lisp	(revision 13845)
+++ /branches/arm/level-0/ARM/arm-float.lisp	(revision 13846)
@@ -30,28 +30,28 @@
 ;;; no error checks, no tweaks, no nuthin 
 
-#+later
+
 (defarmlapfunction %make-float-from-fixnums ((float 4)(hi 0) (lo arg_x) (exp arg_y) (sign arg_z))
-  (rlwinm imm0 sign 0 0 0)  ; just leave sign bit 
-  (rlwimi imm0 exp (- 20 arm::fixnumshift)  1 11) ;  exp left 20 right 2 keep 11 bits
+  (and imm0 sign (:$ #x80000000))  ; just leave sign bit 
   (ldr imm1 (:@ vsp (:$ hi)))
-  (srawi imm1 imm1 arm::fixnumshift)   ; fold into below? nah keep for later
-  (rlwimi imm0 imm1 (- 32 4) 12 31)   ; right 4 - keep  20 - stuff into hi result
-  (rlwinm imm1 imm1 28 0 3)  ; hi goes left 28 - keep 4 hi bits
-  (rlwimi imm1 lo (- 32 arm::fixnumshift) 4 31) ; stuff in 28 bits of lo
+  (orr imm0 imm0 (:lsl exp (:$ (- 20 arm::fixnumshift)))) ;  exp left 20 right 2 keep 11 bits
+  (unbox-fixnum imm1 imm1)
+  (orr imm0 imm0 (:lsr imm1 (:$ 4)))
+  (and imm1 imm1 (:$ #xf0000000))
+  (orr imm1 imm1 (:lsr lo (:$ arm::fixnumshift)))
   (ldr temp0 (:@ vsp (:$ float)))         ; the float
-  (stw imm0 arm::double-float.value temp0)
-  (stw imm1 arm::double-float.val-low temp0)
-  (la vsp 8 vsp)
-  (blr))
-
-
-#+later
+  (str imm0 (:@ temp0 (:$ arm::double-float.val-high)))
+  (str imm1 (:@ temp0 (:$ arm::double-float.val-low)))
+  (add vsp vsp '2)
+  (bx lr))
+
+
 (defarmlapfunction %make-short-float-from-fixnums ((float 0) (sig arg_x) (exp arg_y) (sign arg_z))
   (unbox-fixnum imm0 sig)
-  (rlwimi imm0 exp (- 29 8) 1 8)
-  (inslwi imm0 sign 1 0)
-  (vpop arg_z)
-  (stw imm0 arm::single-float.value arg_z)
-  (blr))
+  (and imm1 sign (:$ #x800000000))
+  (orr imm0 imm0 (:lsl exp (:$ (- 23 arm::fixnumshift))))
+  (orr imm0 imm0 imm1)
+  (vpop1 arg_z)
+  (str imm0 (:@ arg_z (:$ arm::single-float.value)))
+  (bx lr))
 
 
