Index: arm-spentry.s
===================================================================
--- arm-spentry.s	(revision 15082)
+++ arm-spentry.s	(working copy)
@@ -2175,16 +2175,21 @@
         __(extract_typecode(imm0,arg_z))
         __(cmp imm0,#subtag_bignum)
         __(bne 0b)
-        __(movc16(imm1,two_digit_bignum_header))
+        __(movc16(imm1,one_digit_bignum_header))
         __(getvheader(imm0,arg_z))
         __(cmp imm0,imm1)
-        __(bne 2f)
+        __(ldreq imm0,[arg_z,#misc_data_offset])
+        __(moveq imm1,#0)
+        __(bxeq lr)
+2:      __(movc16(imm1,two_digit_bignum_header))
+        __(cmp imm0,imm1)
+        __(bne 3f)
         __(vrefr(imm0,arg_z,0))
         __(vrefr(imm1,arg_z,1))
         __(cmp imm1,#0)
         __(bxge lr)
         __(uuo_error_reg_not_xtype(al,arg_z,xtype_u64))
-2:      __(movc16(imm1,three_digit_bignum_header))
+3:      __(movc16(imm1,three_digit_bignum_header))
         __(cmp imm0,imm1)
         __(uuo_error_reg_not_xtype(ne,arg_z,xtype_u64))
         __(vrefr(imm2,arg_z,2))
@@ -2207,6 +2212,11 @@
         __(extract_lisptag(imm0,arg_z))
         __(cmp imm0,#tag_misc)
         __(ldreq imm2,[arg_z,#misc_header_offset])
+        __(movc16(imm1,one_digit_bignum_header))
+        __(cmp imm1,imm2)
+        __(ldreq imm0,[arg_z,#misc_data_offset])
+        __(moveq imm1,imm0,asr #31)
+        __(bxeq lr)        
         __(movc16(imm1,two_digit_bignum_header))
         __(cmp imm1,imm2)
         __(beq 1f)
