Index: /branches/arm/level-0/ARM/arm-float.lisp
===================================================================
--- /branches/arm/level-0/ARM/arm-float.lisp	(revision 13940)
+++ /branches/arm/level-0/ARM/arm-float.lisp	(revision 13941)
@@ -122,6 +122,6 @@
   (orr imm1 imm1 (:lsl imm0 (:$ 28)))
   (mov imm0 (:lsr imm0 (:$ 4)))
-  (str imm0 (:@ big (:$ arm::double-float.val-high)))
-  (str imm1 (:@ big (:$ arm::double-float.val-low)))
+  (str imm0 (:@ big (:$ (+ arm::misc-data-offset 4))))
+  (str imm1 (:@ big (:$ arm::misc-data-offset)))
   (bx lr))
 
Index: /branches/arm/level-0/l0-bignum32.lisp
===================================================================
--- /branches/arm/level-0/l0-bignum32.lisp	(revision 13940)
+++ /branches/arm/level-0/l0-bignum32.lisp	(revision 13941)
@@ -1483,5 +1483,5 @@
                                  (let* ((res-len-1 (1- len-y)))
                                    (declare (fixnum res-len-1))
-                                   (bignum-shift-right-loop-1 y-shift truncate-x truncate-y res-len-1 0)))                                
+                                   (bignum-shift-right-loop-1 y-shift truncate-x truncate-x res-len-1 0)))                                
                                (let ((the-res (%normalize-bignum-macro truncate-x )))
                                  (if (not (fixnump the-res))
Index: /branches/arm/lisp-kernel/arm-asmutils.s
===================================================================
--- /branches/arm/lisp-kernel/arm-asmutils.s	(revision 13940)
+++ /branches/arm/lisp-kernel/arm-asmutils.s	(revision 13941)
@@ -85,31 +85,30 @@
 _endfn
 
-/* Logior the value in *r3 with the value in r4 (presumably a bitmask with exactly 1 */
+/* Logior the value in *r0 with the value in r1 (presumably a bitmask with exactly 1 */
 /* bit set.)  Return non-zero if any of the bits in that bitmask were already set. */
         
 _exportfn(C(atomic_ior))
-dnl         __(sync)
-dnl 1:	__(lrarx(r5,0,r3))
-dnl         __(or r6,r4,r5)
-dnl 	__(strcx(r6,0,r3))
-dnl 	__(bne- 1b)
-dnl 	__(isync)
-dnl 	__(and r3,r4,r5)
-dnl 	__(blr)
+        __(stmdb sp!,{r4,lr})
+0:      __(ldrex r2,[r0])
+        __(orr r3,r2,r1)
+        __(strex r4,r3,[r0])
+        __(cmp r4,#0)
+        __(bne 0b)
+        __(mov r0,r2)
+        __(ldmia sp!,{r4,pc})
 _endfn
 
 
-/* Logand the value in *r3 with the value in r4 (presumably a bitmask with exactly 1 */
-/* bit set.)  Return the value now in *r3 (for some value of "now" */
+/* Logand the value in *r0 with the value in r1 (presumably a bitmask with exactly 1 */
+/* bit set.)  Return the value now in *r0 (for some value of "now" */
 
 _exportfn(C(atomic_and))
-dnl         __(sync)
-dnl 1:	__(lrarx(r5,0,r3))
-dnl         __(and r6,r4,r5)
-dnl 	__(strcx(r6,0,r3))
-dnl 	__(bne- 1b)
-dnl 	__(isync)
-dnl 	__(mr r3,r6)
-dnl 	__(blr)
+0:      __(ldrex r2,[r0])
+        __(and r2,r2,r1)
+        __(strex r3,r2,[r0])
+        __(cmp r3,#0)
+        __(bne 0b)
+        __(mov r0,r2)
+        __(bx lr)
 _endfn
                 
Index: /branches/arm/lisp-kernel/arm-exceptions.h
===================================================================
--- /branches/arm/lisp-kernel/arm-exceptions.h	(revision 13940)
+++ /branches/arm/lisp-kernel/arm-exceptions.h	(revision 13941)
@@ -68,5 +68,5 @@
 
 #define IS_SUB_RM_FROM_ALLOCPTR(i)   (((i)&0x0ffff000) == 0x004cc000)
-#define IS_SUB_FROM_ALLOCPTR(i)      (((i)&0x0fffff00) == 0x024cc000)
+#define IS_SUB_FROM_ALLOCPTR(i)      (((i)&0x0ffff000) == 0x024cc000)
 #define IS_SUB_LO_FROM_ALLOCPTR(i)   (((i)&0x0fffff00) == 0x024cc000)
 #define IS_SUB_HI_FROM_ALLOCPTR(i)   (IS_SUB_FROM_ALLOCPTR(i) && \
