Index: /branches/arm/level-0/ARM/arm-bignum.lisp
===================================================================
--- /branches/arm/level-0/ARM/arm-bignum.lisp	(revision 13930)
+++ /branches/arm/level-0/ARM/arm-bignum.lisp	(revision 13931)
@@ -853,5 +853,4 @@
 ;; y1 is at index, y2 at index-1
 ;; this doesnt help much
-#+notyet
 (defarmlapfunction truncate-guess-loop ((guess-h 8)(guess-l 4)(x 0)
                                         (xidx arg_x)(yptr arg_y) (yidx arg_z))
@@ -864,60 +863,69 @@
         (gy2-hi imm2)
         (xptr temp0)
-        (m imm3)
-        (tem imm4)
-        (y1-idx 28)
-        (y2-idx 24)
-        (x0-idx 20)
-        (x1-idx 16)
-        (x2-idx 12))
-    (stru -32  (:$ tsp)) tsp
-    (str tsp tsp  (:$ 4))
-    (ldr y1 vsp (:$ guess-h))
-    (ldr tem vsp (:$ guess-l))
-    (compose-digit guess y1 tem)
-    (addi tem yidx arm::misc-data-offset)
-    (ldr y1 (:@ yptr tem))
-    (str y1 tsp  (:$ y1-idx))
-    (subi tem tem 4)
-    (ldr y2 (:@ yptr tem))
-    (str y2 tsp  (:$ y2-idx))
-    (ldr xptr vsp (:$ x))
-    (addi tem xidx arm::misc-data-offset)
-    (ldr y1 (:@ xptr tem)) ; its x0
-    (str y1 tsp  (:$ x0-idx))
-    (subi tem tem 4)
-    (ldr y1 (:@ xptr tem))
-    (str y1 tsp  (:$ x1-idx))
-    (subi tem tem 4)
-    (ldr y1 (:@ xptr tem))
-    (str y1 tsp  (:$ x2-idx))
+        (m r3)
+        (tem temp1)
+        (save-rcontext temp2)
+        (m-save 24)
+        (y1-idx 20)
+        (y2-idx 16)
+        (x0-idx 12)
+        (x1-idx 8)
+        (x2-idx 4))
+    (mov imm0 (:$ (ash 6 arm::num-subtag-bits)))
+    (orr imm0 imm0 (:$ arm::subtag-u32-vector))
+    (str imm0 (:@! sp (:$ -32)))
+    (mov save-rcontext rcontext)
+    (ldr y1 (:@ vsp (:$ guess-h)))
+    (ldr y2 (:@ vsp (:$ guess-l)))
+    (compose-digit guess y1 y2)
+    (mov tem (:lsl yidx (:$ arm::fixnumshift)))
+    (add tem tem (:$ (ash arm::misc-data-offset arm::fixnumshift)))
+    (ldr y1 (:@ yptr (:asr tem (:$ arm::fixnumshift))))
+    (str y1 (:@ sp  (:$ y1-idx)))
+    (sub tem tem '4)
+    (ldr y2 (:@ yptr (:asr tem (:$ arm::fixnumshift))))
+    (str y2 (:@ sp  (:$ y2-idx)))
+    (ldr xptr (:@ vsp (:$ x)))
+    (mov tem (:lsl xidx (:$ arm::fixnumshift)))
+    (add tem tem (:$ (ash arm::misc-data-offset arm::fixnumshift)))
+    (ldr y1 (:@ xptr (:asr tem (:$ arm::fixnumshift)))) ; its x0
+    (str y1 (:@ sp  (:$ x0-idx)))
+    (sub tem tem '4)
+    (ldr y1 (:@ xptr (:asr tem (:$ arm::fixnumshift))))
+    (str y1 (:@ sp  (:$ x1-idx)))
+    (sub tem tem '4)
+    (ldr y1 (:@ xptr (:asr tem (:$ arm::fixnumshift))))
+    (str y1 (:@ sp  (:$ x2-idx)))
     @loop
-    (ldr y1 tsp (:$ y1-idx))     ; get y1
-    (mullw gy1-lo guess y1)
-    (ldr m tsp (:$ x1-idx))      ; get x1
-    (subc m m gy1-lo)      ; x1 - gy1-lo => m
-    (mulhwu gy1-hi guess y1)
-    (ldr tem tsp (:$ x0-idx))    ; get x0
-    (subfe. tem gy1-hi tem)      ; - val not used just cr
-    (ldr y2 tsp (:$ y2-idx))     ; get y2
-    (mulhwu gy2-hi guess y2)   ; does it pay to do this now even tho may not need?
+    (ldr y1 (:@ sp (:$ y1-idx)))     ; get y1
+    (mul gy1-lo guess y1)
+    (ldr m (:@ sp (:$ x1-idx)))      ; get x1
+    (subs m m gy1-lo)      ; x1 - gy1-lo => m
+    (umull gy1-hi y2 guess y1)
+    (ldr y2 (:@ sp (:$ x0-idx)))    ; get x0
+    (rscs y2 gy1-hi y2)      ; - val not used just cr
+    (ldr y2 (:@ sp (:$ y2-idx)))     ; get y2
+    (str m (:@ sp (:$ m-save)))
+    (umull gy2-hi m guess y2)   ; does it pay to do this now even tho may not need?
+    (ldr m (:@ sp (:$ m-save)))
     (bne @done)
-    (cmpl :cr0 gy2-hi m)       ; if > or = and foo then more - L means logical means unsigned
-    (blt @done)           ; if < done
+    (cmp gy2-hi m)       ; if > or = and foo then more - L means logical means unsigned
+    (blo @done)           ; if < done
     (bne @more)           ; if = test lo
-    (mullw gy2-lo guess y2)
-    (ldr tem tsp (:$ x2-idx)) ; get x2
-    (cmpl :cr0 gy2-lo tem)
-    (ble @done)
+    (mul gy2-lo guess y2)
+    (ldr y1 (:@ sp (:$ x2-idx))) ; get x2
+    (cmp gy2-lo y1)
+    (bls @done)
     @more
-    (subi guess guess 1)
+    (sub guess guess (:$ 1))
     (b @loop)
     @done
+    (mov rcontext save-rcontext)
     (digit-h temp0 guess)
-    (vpush temp0)
+    (vpush1 temp0)
     (digit-l temp0 guess)
-    (vpush temp0)
+    (vpush1 temp0)
     (add temp0 vsp (:$ 20))
-    (ldr tsp tsp (:$ 0))
+    (add sp sp (:$ 32))
     (set-nargs 2)
     (ba .spvalues)))
@@ -1160,5 +1168,5 @@
     (ldr x (:@ bignum (:asr i (:$ 2))))
     (rsb shift shift (:$ 32))
-    (mov x (:asr x shift))
+    (mov x (:lsr x shift))
     (add i i '4)                        ;sic
     (ldr y (:@ bignum (:asr i (:$ 2))))
@@ -1169,13 +1177,9 @@
     (add j j '1)    
     (cmp j len)
-    (add i i '4)
     (blt @loop)    
     @done
-                                        ; do first - lo order
-       
-                                        ; do last - hi order    
-                                        ;(dbg t)
+    (rsb shift shift (:$ 32))
     (ldr y (:@ bignum (:asr i (:$ 2))))
-    (mov y (:asr y shift))
+    (mov y (:lsr y shift))
     (add x len (:$ arm::misc-data-offset))
     (str y (:@ resptr x))    
