Index: /branches/ia32/level-0/X86/X8632/x8632-bignum.lisp
===================================================================
--- /branches/ia32/level-0/X86/X8632/x8632-bignum.lisp	(revision 7906)
+++ /branches/ia32/level-0/X86/X8632/x8632-bignum.lisp	(revision 7907)
@@ -36,5 +36,5 @@
   (movl ($ x8632::nil-value) (% arg_z))
   (testl (% imm0) (% imm0))
-  (cmovel (% imm0) (% arg_z))
+  (cmovzl (% imm0) (% arg_z))
   (single-value-return))
 
@@ -76,14 +76,16 @@
 
 (defx8632lapfunction %digit-0-or-plusp ((bignum arg_y) (idx arg_z))
-  (testl (@ x8632::misc-data-offset (% bignum) (% idx)) (% imm0))
+  (movl (@ x8632::misc-data-offset (% bignum) (% idx)) (% imm0))
   (movl ($ x8632::nil-value) (% temp0))
-  (cmovbl (% temp0) (% arg_z))
+  (testl (% imm0) (% imm0))
+  (cmovsl (% temp0) (% arg_z))
   (single-value-return))
 
 ;;; For oddp, evenp
 (defx8632lapfunction %bignum-oddp ((bignum arg_z))
-  (testb ($ 1) (@ x8632::misc-data-offset (% bignum)))
+  (movl (@ x8632::misc-data-offset (% bignum)) (% imm0))
   (movl ($ x8632::nil-value) (% temp0))
-  (cmovel (% temp0) (% arg_z))
+  (btl ($ 0) (% imm0))			;copy bit 0 to carry flag
+  (cmovncl (% temp0) (% arg_z))
   (single-value-return))
 
@@ -91,7 +93,7 @@
   (vector-length bignum imm0)
   (movl (@ (- 4 x8632::misc-data-offset) (% bignum)) (% imm0))
-  (testl ($ #x8000000) (% imm0))
   (movl ($ x8632::nil-value) (% temp0))
-  (cmovnel (% temp0) (% arg_z))
+  (cmpl ($ 1) (% imm0))
+  (cmovbl (% temp0) (% arg_z))
   (single-value-return))
 
@@ -104,7 +106,7 @@
   (vector-length bignum imm0)
   (movl (@ (- 4 x8632::misc-data-offset) (% bignum) (% imm0)) (% imm0))
-  (testl ($ #x8000000) (% imm0))
   (movl ($ x8632::nil-value) (% temp0))
-  (cmovel (% temp0) (% arg_z))
+  (testl (% imm0) (% imm0))
+  (cmovnsl (% temp0) (% arg_z))
   (single-value-return))
 
@@ -128,16 +130,17 @@
   ;; unboxed a or a[i] now in temp0
   ;; unboxed b or b[j] now in imm0
-  (xorl (% arg_z) (% arg_z))
+  (movl ($ x8632::fixnumone) (% arg_z))	;for outgoing carry
   (movl (@ c (% esp)) (% arg_y))
   (testl (% arg_y) (% arg_y))		;clears carry flag
   (jz @add)
+  (xorl (% arg_y) (% arg_y))
   (stc)
   @add
+  ;; arg_y = 0, arg_z = fixnum 1
   (adc (% temp0) (% imm0))
   (movl (@ r (% esp)) (% temp0))
   (movl (@ k (% esp)) (% temp1))
   (movl (% imm0) (@ x8632::misc-data-offset (% temp0) (% temp1)))
-  (adc ($ 0) (% imm0))			;propagate carry flag
-  (box-fixnum imm0 arg_z)
+  (cmovnc (% arg_y) (% arg_z))		;outgoing carry
   (mark-as-node temp0)
   (single-value-return 7))
@@ -161,16 +164,17 @@
   ;; unboxed a or a[i] now in temp0
   ;; unboxed b or b[j] now in imm0
-  (xorl (% arg_z) (% arg_z))
+  (movl ($ x8632::fixnumone) (% arg_z))	;for outgoing carry
   (movl (@ borrow (% esp)) (% arg_y))
   (testl (% arg_y) (% arg_y))		;clears carry flag
   (jz @sub)
+  (xorl (% arg_y) (% arg_y))
   (stc)
   @sub
+  ;; arg_y = 0, arg_z = fixnum 1
   (sbb (% imm0) (% temp0))
   (movl (@ r (% esp)) (% temp0))
   (movl (@ k (% esp)) (% temp1))
   (movl (% imm0) (@ x8632::misc-data-offset (% temp0) (% temp1)))
-  (adc ($ 0) (% imm0))			;propagate carry flag
-  (box-fixnum imm0 arg_z)
+  (cmovnc (% arg_y) (% arg_z))		;outgoing carry
   (mark-as-node temp0)
   (single-value-return 7))
