Index: /branches/arm/lisp-kernel/arm-spentry.s
===================================================================
--- /branches/arm/lisp-kernel/arm-spentry.s	(revision 13810)
+++ /branches/arm/lisp-kernel/arm-spentry.s	(revision 13811)
@@ -553,5 +553,5 @@
 	__(add temp1,temp1,#fixnum_one)
 	__(ldr arg_z,[imm1,#-node_size]!)
-	__(push1(imm0,arg_z))
+	__(push1(arg_z,imm0))
 	__(bne 5b)
 6:
@@ -856,11 +856,11 @@
 	__(add imm0,arg_y,#misc_data_offset)
 	__(str arg_z,[arg_x,imm0])
-        __(bxls lr)
+        __(bxhs lr)
         __(add imm0,imm0,arg_x)
         __(ref_global(temp0,ref_base))
         __(sub imm0,imm0,temp0)
         __(mov imm0,imm0,lsr #dnode_shift)
-        __(ref_global(temp0,oldspace_dnode_count))
-        __(cmp imm0,temp0)
+        __(ref_global(imm1,oldspace_dnode_count))
+        __(cmp imm0,imm1)
         __(bxhs lr)
         __(and imm2,imm0,#31)
@@ -868,11 +868,11 @@
         __(mov imm1,imm1,lsr imm2)
         __(mov imm0,imm0,lsr #bitmap_shift)
-        __(ref_global(imm2,refbits))
-        __(add imm2,imm2,imm0,lsl #word_shift)
-        __(ldr imm0,[imm2])
-        __(ands imm0,imm0,imm1)
-        __(bxne lr)
-        __(build_lisp_frame(imm0))
-        __(set_ref_bit(gvset))
+        __(ref_global(temp0,refbits))
+        __(add temp0,temp0,imm0,lsl #word_shift)
+0:      __(ldrex imm2,[temp0])
+        __(orr imm2,imm2,imm1)
+        __(strex imm0,imm2,[temp0])
+        __(cmp imm0,#0)
+        __(bne 0b)        
         __(bx lr)
 
@@ -2220,5 +2220,5 @@
 dnl /* multiple values, then things are even simpler.  */
 _spentry(lexpr_entry)
-dnl  __(ref_global(imm1,ret1val_addr))
+dnl  __(ref_global(imm1,ret1valn))
 dnl  __(cmpr(imm1,loc_pc))
 dnl  __(build_lisp_frame(fn,loc_pc,imm0))
