Index: /trunk/ccl/lisp-kernel/spentry.s
===================================================================
--- /trunk/ccl/lisp-kernel/spentry.s	(revision 361)
+++ /trunk/ccl/lisp-kernel/spentry.s	(revision 362)
@@ -3290,35 +3290,28 @@
 	__(ldr(arg_z,vectorH.logsize(arg_z)))
 	__(blr)
-3:	__(bne cr2,9f)
-	__(li temp2,0)
-	__(mr temp0,arg_z)
-	__(mr temp1,arg_z)
-4:	__(cmpri(cr7,temp0,nil_value))
-	__(extract_lisptag(imm0,temp0))
-	__(extract_lisptag(imm1,temp1))
-	__(cmpri(cr0,imm0,tag_list))
+3:	__(bne cr2,8f)
+	__(li temp2,-1<<fixnum_shift)
+	__(mr temp0,arg_z)	; fast pointer
+	__(mr temp1,arg_z)	; slow pointer
+4:	__(extract_lisptag(imm0,temp0))
+	__(cmpri(cr7,temp0,nil_value))
+	__(cmpri(cr1,imm0,tag_list))
+	__(addi temp2,temp2,fixnum_one)
+	__(beq cr7,9f)
+	__(andi. imm0,temp2,1<<fixnum_shift)
+	__(bne cr1,8f)
+	__(extract_lisptag(imm1,temp1))	
+	__(_cdr(temp0,temp0))
 	__(cmpri(cr1,imm1,tag_list))
-	__(beq cr7,8f)
-	__(bne cr0,9f)
-	__(_cdr(temp3,temp0))
-	__(bne cr1,9f)
-	__(cmpri(cr4,temp2,0))
-	__(cmpri(cr3,temp3,nil_value))
-	__(extract_lisptag(imm0,temp3))
-	__(cmpr(cr5,temp0,temp1))
-	__(bne cr3,5f)
-	__(addi arg_z,temp2,fixnumone)
-	__(blr)
-5:	__(bne cr5,6f)
-	__(bne cr4,9f)
-6:	__(_cdr(temp0,temp3))	
+	__(beq cr0,4b)
+	__(bne cr1,8f)
 	__(_cdr(temp1,temp1))
-	__(addi temp2,temp2,2<<fixnumshift)
-	__(b 4b)
+	__(cmpr(cr0,temp0,temp1))
+	__(bne cr0,4b)
 8:	
+	__(jump_builtin(_builtin_length,1))
+9:	
 	__(mr arg_z,temp2)
 	__(blr)
-9:	
-	__(jump_builtin(_builtin_length,1))
 
 _spentry(builtin_seqtype)
